1#!./perl -w 2 3BEGIN { 4 chdir 't' if -d 't'; 5 @INC = '../lib'; 6} 7 8use Test::More; 9 10BEGIN { 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 22use Test::More tests => 7; 23 24BEGIN { use_ok 'Net::hostent' } 25 26# Remind me to add this to Test::More. 27sub DIE { 28 print "# @_\n"; 29 exit 1; 30} 31 32# test basic resolution of localhost <-> 127.0.0.1 33use Socket; 34 35my $h = gethost('localhost'); 36SKIP: { 37skip "Can't resolve localhost and you don't have /etc/hosts", 6 38 if (!defined($h) && !-e '/etc/hosts'); 39 40ok(defined $h, "gethost('localhost')") || 41 DIE("Can't continue without working gethost: $!"); 42 43is( inet_ntoa($h->addr), "127.0.0.1", 'addr from gethost' ); 44 45my $i = gethostbyaddr(inet_aton("127.0.0.1")); 46ok(defined $i, "gethostbyaddr('127.0.0.1')") || 47 DIE("Can't continue without working gethostbyaddr: $!"); 48 49is( inet_ntoa($i->addr), "127.0.0.1", 'addr from gethostbyaddr' ); 50 51# need to skip the name comparisons on Win32 because windows will 52# return the name of the machine instead of "localhost" when resolving 53# 127.0.0.1 or even "localhost" 54 55# - VMS returns "LOCALHOST" under tcp/ip services V4.1 ECO 2, possibly others 56# - OS/390 returns localhost.YADDA.YADDA 57 58SKIP: { 59 skip "Windows will return the machine name instead of 'localhost'", 2 60 if $^O eq 'MSWin32' or $^O eq 'NetWare' or $^O eq 'cygwin'; 61 62 print "# name = " . $h->name . ", aliases = " . join (",", @{$h->aliases}) . "\n"; 63 64 my $in_alias; 65 unless ($h->name =~ /^localhost(?:\..+)?$/i) { 66 foreach (@{$h->aliases}) { 67 if (/^localhost(?:\..+)?$/i) { 68 $in_alias = 1; 69 last; 70 } 71 } 72 ok( $in_alias ); 73 } else { 74 ok( 1 ); 75 } 76 77 if ($in_alias) { 78 # If we found it in the aliases before, expect to find it there again. 79 foreach (@{$h->aliases}) { 80 if (/^localhost(?:\..+)?$/i) { 81 # This time, clear the flag if we see "localhost" 82 undef $in_alias; 83 last; 84 } 85 } 86 } 87 88 if( $in_alias ) { 89 like( $i->name, qr/^localhost(?:\..+)?$/i ); 90 } 91 else { 92 ok( !$in_alias ); 93 print "# " . $h->name . " " . join (",", @{$h->aliases}) . "\n"; 94 } 95} 96} 97