This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / lib / Net / hostent.t
1 #!./perl -w
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6 }
7
8 use Test::More;
9
10 BEGIN {
11     require Config; import Config;
12     if ($Config{'extensions'} !~ /\bSocket\b/ && 
13         !(($^O eq 'VMS') && $Config{d_socket})) 
14     {
15         plan skip_all => "Test uses Socket, Socket not built";
16     }
17     if ($^O eq 'irix' && $Config{osvers} == 5) {
18         plan skip_all => "Test relies on resolution of localhost, fails on $^O ($Config{osvers})";
19     }
20 }
21
22 use Test::More;
23
24 BEGIN { use_ok 'Net::hostent' }
25
26 # Remind me to add this to Test::More.
27 sub DIE {
28     print "# @_\n";
29     exit 1;
30 }
31
32 # test basic resolution of localhost <-> 127.0.0.1
33 use Socket;
34
35 my $h = gethost('localhost');
36 SKIP: {
37 skip "Can't resolve localhost and you don't have /etc/hosts", 6
38     if (!defined($h) && !-e '/etc/hosts');
39
40 ok(defined $h,  "gethost('localhost')") ||
41   DIE("Can't continue without working gethost: $!");
42
43 is( inet_ntoa($h->addr), "127.0.0.1",   'addr from gethost' );
44
45 my $i = gethostbyaddr(inet_aton("127.0.0.1"));
46 ok(defined $i,  "gethostbyaddr('127.0.0.1')") || 
47   DIE("Can't continue without working gethostbyaddr: $!");
48
49 is( inet_ntoa($i->addr), "127.0.0.1",   'addr from gethostbyaddr' );
50
51 $i = gethost("127.0.0.1");
52 ok(defined $i,  "gethost('127.0.0.1')");
53 is( inet_ntoa($i->addr), "127.0.0.1",   'addr from gethost' );
54
55 "127.0.0.1" =~ /(.*)/;
56 $i = gethost($1);
57 ok(defined $i, 'gethost on capture variable');
58
59 # need to skip the name comparisons on Win32 because windows will
60 # return the name of the machine instead of "localhost" when resolving
61 # 127.0.0.1 or even "localhost"
62
63 # - VMS returns "LOCALHOST" under tcp/ip services V4.1 ECO 2, possibly others
64 # - OS/390 returns localhost.YADDA.YADDA
65
66 SKIP: {
67     skip "Windows will return the machine name instead of 'localhost'", 2
68       if $^O eq 'MSWin32' or $^O eq 'cygwin';
69
70     print "# name = " . $h->name . ", aliases = " . join (",", @{$h->aliases}) . "\n";
71
72     my $in_alias;
73     unless ($h->name =~ /^localhost(?:\..+)?$/i) {
74         foreach (@{$h->aliases}) {
75             if (/^localhost(?:\..+)?$/i) {
76                 $in_alias = 1;
77                 last;
78             }
79         }
80         ok( $in_alias );
81     } else {
82         ok( 1 );
83     }
84     
85     if ($in_alias) {
86         # If we found it in the aliases before, expect to find it there again.
87         foreach (@{$h->aliases}) {
88             if (/^localhost(?:\..+)?$/i) {
89                 # This time, clear the flag if we see "localhost"
90                 undef $in_alias;
91                 last;
92             }
93         }
94     } 
95
96     if( $in_alias ) {
97         like( $i->name, qr/^localhost(?:\..+)?$/i );
98     }
99     else {
100         ok( !$in_alias );
101         print "# " . $h->name . " " . join (",", @{$h->aliases}) . "\n";
102     }
103 }
104 }
105
106 done_testing();