xref: /openbsd-src/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/10args.t (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
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