15759b3d2Safresh1use warnings; 25759b3d2Safresh1use strict; 3*de8cc8edSafresh1use Config; 45759b3d2Safresh1 55759b3d2Safresh1BEGIN { 65759b3d2Safresh1 unless (my $port = getservbyname('echo', 'tcp')) { 75759b3d2Safresh1 print "1..0 \# Skip: no echo port\n"; 85759b3d2Safresh1 exit; 95759b3d2Safresh1 } 10*de8cc8edSafresh1 unless ($Config{d_getpbyname}) { 11*de8cc8edSafresh1 print "1..0 \# Skip: no getprotobyname\n"; 12*de8cc8edSafresh1 exit; 13*de8cc8edSafresh1 } 145759b3d2Safresh1} 155759b3d2Safresh1 165759b3d2Safresh1use Test::More qw(no_plan); 175759b3d2Safresh1BEGIN {use_ok('Net::Ping')}; 185759b3d2Safresh1 195759b3d2Safresh1# plain ol' constuctor call 205759b3d2Safresh1my $p = Net::Ping->new(); 215759b3d2Safresh1isa_ok($p, "Net::Ping"); 225759b3d2Safresh1 235759b3d2Safresh1# call new from an instantiated object 245759b3d2Safresh1my $p2 = $p->new(); 255759b3d2Safresh1isa_ok($p2, "Net::Ping"); 265759b3d2Safresh1 275759b3d2Safresh1# named args 285759b3d2Safresh1my $p3 = Net::Ping->new({proto => 'tcp', ttl => 5}); 295759b3d2Safresh1isa_ok($p3, "Net::Ping"); 305759b3d2Safresh1 315759b3d2Safresh1# check for invalid proto 325759b3d2Safresh1eval { 335759b3d2Safresh1 $p = Net::Ping->new("thwackkk"); 345759b3d2Safresh1}; 355759b3d2Safresh1like($@, qr/Protocol for ping must be "icmp", "icmpv6", "udp", "tcp", "syn", "stream" or "external"/, "new() errors for invalid protocol"); 365759b3d2Safresh1 375759b3d2Safresh1# check for invalid timeout 385759b3d2Safresh1eval { 395759b3d2Safresh1 $p = Net::Ping->new("tcp", -1); 405759b3d2Safresh1}; 415759b3d2Safresh1like($@, qr/Default timeout for ping must be greater than 0 seconds/, "new() errors for invalid timeout"); 425759b3d2Safresh1 435759b3d2Safresh1# check for invalid data sizes 445759b3d2Safresh1eval { 455759b3d2Safresh1 $p = Net::Ping->new("udp", 10, -1); 465759b3d2Safresh1}; 475759b3d2Safresh1like($@, qr/Data for ping must be from/, "new() errors for invalid data size"); 485759b3d2Safresh1 495759b3d2Safresh1eval { 50f3efcd01Safresh1 $p = Net::Ping->new("udp", 10, 70000); 515759b3d2Safresh1}; 525759b3d2Safresh1like($@, qr/Data for ping must be from/, "new() errors for invalid data size"); 535759b3d2Safresh1 545759b3d2Safresh1# force failures for udp 555759b3d2Safresh1 565759b3d2Safresh1 575759b3d2Safresh1# force failures for tcp 585759b3d2Safresh1SKIP: { 59f3efcd01Safresh1 # diag "Checking icmp"; 605759b3d2Safresh1 eval { $p = Net::Ping->new('icmp'); }; 615759b3d2Safresh1 skip "icmp ping requires root privileges.", 3 625759b3d2Safresh1 if !Net::Ping::_isroot() or $^O eq 'MSWin32'; 635759b3d2Safresh1 if($> and $^O ne 'VMS' and $^O ne 'cygwin') { 645759b3d2Safresh1 like($@, qr/icmp ping requires root privilege/, "Need root for icmp"); 655759b3d2Safresh1 skip "icmp tests require root", 2; 665759b3d2Safresh1 } else { 675759b3d2Safresh1 isa_ok($p, "Net::Ping"); 685759b3d2Safresh1 } 695759b3d2Safresh1 705759b3d2Safresh1 # set IP TOS to "Minimum Delay" 715759b3d2Safresh1 $p = Net::Ping->new("icmp", undef, undef, undef, 8); 725759b3d2Safresh1 isa_ok($p, "Net::Ping"); 735759b3d2Safresh1 745759b3d2Safresh1 # This really shouldn't work. Not sure who to blame. 755759b3d2Safresh1 $p = Net::Ping->new("icmp", undef, undef, undef, "does this fail"); 765759b3d2Safresh1 isa_ok($p, "Net::Ping"); 775759b3d2Safresh1} 785759b3d2Safresh1 79