xref: /openbsd-src/gnu/usr.bin/perl/dist/Net-Ping/t/001_new.t (revision de8cc8edbc71bd3e3bc7fbffa27ba0e564c37d8b)
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