16fb12b70Safresh1#!/usr/bin/perl 26fb12b70Safresh1 3*5486feefSafresh1use v5.14; 46fb12b70Safresh1use warnings; 56fb12b70Safresh1 66fb12b70Safresh1use Test::More; 76fb12b70Safresh1 86fb12b70Safresh1use IO::Socket::IP; 96fb12b70Safresh1 106fb12b70Safresh1sub arguments_is { 116fb12b70Safresh1 my ($arg, $exp, $name) = @_; 126fb12b70Safresh1 136fb12b70Safresh1 $arg = [$arg] 146fb12b70Safresh1 unless ref $arg; 156fb12b70Safresh1 166fb12b70Safresh1 $name ||= join ' ', map { defined $_ ? $_ : 'undef' } @$arg; 176fb12b70Safresh1 186fb12b70Safresh1 my $got = do { 196fb12b70Safresh1 no warnings 'redefine'; 206fb12b70Safresh1 my $args; 216fb12b70Safresh1 226fb12b70Safresh1 local *IO::Socket::IP::_io_socket_ip__configure = sub { 236fb12b70Safresh1 $args = $_[1]; 246fb12b70Safresh1 return $_[0]; 256fb12b70Safresh1 }; 266fb12b70Safresh1 276fb12b70Safresh1 IO::Socket::IP->new(@$arg); 286fb12b70Safresh1 296fb12b70Safresh1 $args; 306fb12b70Safresh1 }; 316fb12b70Safresh1 326fb12b70Safresh1 is_deeply($got, $exp, $name); 336fb12b70Safresh1} 346fb12b70Safresh1 356fb12b70Safresh1my @tests = ( 366fb12b70Safresh1 [ [ '[::1]:80' ], { PeerHost => '::1', PeerService => '80' } ], 376fb12b70Safresh1 [ [ '[::1]:http' ], { PeerHost => '::1', PeerService => 'http' } ], 386fb12b70Safresh1 [ [ '[::1]' ], { PeerHost => '::1', } ], 396fb12b70Safresh1 [ [ '[::1]:' ], { PeerHost => '::1', } ], 406fb12b70Safresh1 [ [ '127.0.0.1:80' ], { PeerHost => '127.0.0.1', PeerService => '80' } ], 416fb12b70Safresh1 [ [ '127.0.0.1:http' ], { PeerHost => '127.0.0.1', PeerService => 'http' } ], 426fb12b70Safresh1 [ [ '127.0.0.1' ], { PeerHost => '127.0.0.1', } ], 436fb12b70Safresh1 [ [ '127.0.0.1:' ], { PeerHost => '127.0.0.1', } ], 446fb12b70Safresh1 [ [ 'localhost:80' ], { PeerHost => 'localhost', PeerService => '80' } ], 456fb12b70Safresh1 [ [ 'localhost:http' ], { PeerHost => 'localhost', PeerService => 'http' } ], 466fb12b70Safresh1 [ [ PeerHost => '[::1]:80' ], { PeerHost => '::1', PeerService => '80' } ], 476fb12b70Safresh1 [ [ PeerHost => '[::1]' ], { PeerHost => '::1' } ], 486fb12b70Safresh1 [ [ LocalHost => '[::1]:80' ], { LocalHost => '::1', LocalService => '80' } ], 496fb12b70Safresh1 [ [ LocalHost => undef ], { LocalHost => undef } ], 506fb12b70Safresh1 516fb12b70Safresh1 # IO::Socket::INET is happy to take port from the *Host argument even if a *Port argument 526fb12b70Safresh1 # exists 536fb12b70Safresh1 [ [ PeerHost => '127.0.0.1:80', PeerPort => '80' ], { PeerHost => '127.0.0.1', PeerService => '80' } ], 546fb12b70Safresh1 # *Host argument should take precedence over *Service if both exist 556fb12b70Safresh1 [ [ PeerHost => '127.0.0.1:443', PeerPort => '80' ], { PeerHost => '127.0.0.1', PeerService => '443' } ], 566fb12b70Safresh1); 576fb12b70Safresh1 586fb12b70Safresh1is_deeply( [ IO::Socket::IP->split_addr( "hostname:http" ) ], 596fb12b70Safresh1 [ "hostname", "http" ], 606fb12b70Safresh1 "split_addr hostname:http" ); 616fb12b70Safresh1 626fb12b70Safresh1is_deeply( [ IO::Socket::IP->split_addr( "192.0.2.1:80" ) ], 636fb12b70Safresh1 [ "192.0.2.1", "80" ], 646fb12b70Safresh1 "split_addr 192.0.2.1:80" ); 656fb12b70Safresh1 666fb12b70Safresh1is_deeply( [ IO::Socket::IP->split_addr( "[2001:db8::1]:80" ) ], 676fb12b70Safresh1 [ "2001:db8::1", "80" ], 686fb12b70Safresh1 "split_addr [2001:db8::1]:80" ); 696fb12b70Safresh1 706fb12b70Safresh1is_deeply( [ IO::Socket::IP->split_addr( "something.else" ) ], 716fb12b70Safresh1 [ "something.else", undef ], 726fb12b70Safresh1 "split_addr something.else" ); 736fb12b70Safresh1 746fb12b70Safresh1is( IO::Socket::IP->join_addr( "hostname", "http" ), 756fb12b70Safresh1 "hostname:http", 766fb12b70Safresh1 'join_addr hostname:http' ); 776fb12b70Safresh1 786fb12b70Safresh1is( IO::Socket::IP->join_addr( "192.0.2.1", 80 ), 796fb12b70Safresh1 "192.0.2.1:80", 806fb12b70Safresh1 'join_addr 192.0.2.1:80' ); 816fb12b70Safresh1 826fb12b70Safresh1is( IO::Socket::IP->join_addr( "2001:db8::1", 80 ), 836fb12b70Safresh1 "[2001:db8::1]:80", 846fb12b70Safresh1 'join_addr [2001:db8::1]:80' ); 856fb12b70Safresh1 866fb12b70Safresh1is( IO::Socket::IP->join_addr( "something.else", undef ), 876fb12b70Safresh1 "something.else", 886fb12b70Safresh1 'join_addr something.else' ); 896fb12b70Safresh1 906fb12b70Safresh1arguments_is(@$_) for @tests; 916fb12b70Safresh1 926fb12b70Safresh1done_testing; 93