The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use Test::More;
use Test::Exception;
use Test::Warn;
BEGIN { plan tests => 14 }
use Net::P0f;

my $p0f = undef;

# new() diags
throws_ok {
    $p0f = new Net::P0f backend => 'machin'
} "/^fatal: Unknown value for option 'backend': machin/", 
  "passing unknown backend to new()";

is( $p0f, undef, " - object not created" );

warning_is {
    $p0f = new Net::P0f machin => 'bidule'
} "warning: Unknown option 'machin'", 
  "passing unknown option to new()";
isa_ok( $p0f, 'Net::P0f::Backend::CmdFE' );

# AUTOLOAD() diags
warning_is {
    $p0f->machin
} "warning: Unknown option 'machin'", 
  "calling an unknown option";

# loop() diags
throws_ok {
    $p0f->loop()
} "/^fatal: Option 'callback' was not set./", 
  "calling loop() without callback";

throws_ok {
    $p0f->loop(callback => \&fake)
} "/^fatal: Option 'count' was not set./", 
  "calling loop() without count";

throws_ok {
    $p0f->loop(callback => \&fake, count => 1)
} "/^fatal: No input source was defined. Please set one of 'interface' or 'dump_file'./", 
  "calling loop() with no source";

#warning_is {
#    $p0f->interface('fake');
#    $p0f->dump_file('fake');
#    $p0f->loop(callback => \&fake, count => 1)
#} "warning: Both 'interface' and 'dump_file' have been set. 'dump_file' prevails.", 
#  "options interface and dump_file were both set";

# checking the diagnostics of CmdFE backend ###################################
$p0f = undef;
warning_is {
    $p0f = new Net::P0f backend => 'cmd', machin => 'bidule'
} "warning: Unknown option 'machin'", 
  "passing unknown option to new() -- CmdFE backend";
isa_ok( $p0f, 'Net::P0f::Backend::CmdFE' );

#throws_ok {
#    $p0f->run
#} "fatal: Please set the path to p0f with the 'program_path' option", 
#  "trying to execute run() without program_path set";

# run() (backend cmdfe)
#   croak "fatal: Please set the path to p0f with the 'program_path' option"
#   croak "fatal: Can't exec '", $self->{options}{program_path}, "': $!"
#   carp "error: The callback died with the following error: $@"

# checking the diagnostics of XS backend ######################################
$p0f = undef;
warning_is {
    $p0f = new Net::P0f backend => 'xs', machin => 'bidule'
} "warning: Unknown option 'machin'", 
  "passing unknown option to new() -- XS backend";
isa_ok( $p0f, 'Net::P0f::Backend::XS' );

# checking the diagnostics of Socket backend ##################################
$p0f = undef;
warning_is {
    $p0f = new Net::P0f backend => 'socket', machin => 'bidule'
} "warning: Unknown option 'machin'", 
  "passing unknown option to new() -- Socket backend";
isa_ok( $p0f, 'Net::P0f::Backend::Socket' );

sub fake {}