1#!perl -T 2use strict; 3use Test::More; 4use Net::Pcap; 5use lib 't'; 6use Utils; 7 8plan skip_all => "must be run as root" unless is_allowed_to_use_pcap(); 9plan skip_all => "no network device available" unless find_network_device(); 10plan tests => 14; 11 12my $has_test_exception = eval "use Test::Exception; 1"; 13 14my($dev,$pcap,$err) = ('','',''); 15 16 17# Testing error messages 18SKIP: { 19 skip "Test::Exception not available", 4 unless $has_test_exception; 20 21 # open_live() errors 22 throws_ok(sub { 23 Net::Pcap::open_live() 24 }, '/^Usage: Net::Pcap::open_live\(device, snaplen, promisc, to_ms, err\)/', 25 "calling open_live() with no argument"); 26 27 throws_ok(sub { 28 Net::Pcap::open_live(0, 0, 0, 0, 0) 29 }, '/^arg5 not a reference/', 30 "calling open_live() with no reference for arg5"); 31 32 # close() errors 33 throws_ok(sub { 34 Net::Pcap::close() 35 }, '/^Usage: Net::Pcap::close\(p\)/', 36 "calling close() with no argument"); 37 38 throws_ok(sub { 39 Net::Pcap::close(0) 40 }, '/^p is not of type pcap_tPtr/', 41 "calling close() with incorrect argument type"); 42 43} 44 45# Find a device 46$dev = find_network_device(); 47 48# Testing open_live() 49eval { $pcap = Net::Pcap::open_live($dev, 1024, 1, 0, \$err) }; 50is( $@, '', "open_live()" ); 51is( $err, '', " - \$err must be null: $err" ); $err = ''; 52ok( defined $pcap, " - \$pcap is defined" ); 53isa_ok( $pcap, 'SCALAR', " - \$pcap" ); 54isa_ok( $pcap, 'pcap_tPtr', " - \$pcap" ); 55 56# Testing close() 57eval { Net::Pcap::close($pcap) }; 58is( $@, '', "close()" ); 59is( $err, '', " - \$err must be null: $err" ); $err = ''; 60 61# Testing open_live() with fake device name 62my $fakedev = 'this is not a device'; 63eval { $pcap = Net::Pcap::open_live($fakedev, 1024, 1, 0, \$err) }; 64is( $@, '', "open_live()" ); 65cmp_ok( length($err), '>', 0, " - \$err must be set: $err" ); 66is( $pcap, undef, " - \$pcap isn't defined" ); 67$err = ''; 68 69