This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / cpan / IO-Socket-IP / t / 17gai-flags.t
1 #!/usr/bin/perl
2
3 use v5.14;
4 use warnings;
5
6 use Test::More;
7
8 use IO::Socket::IP;
9 use Socket 1.95 qw(
10    PF_INET SOCK_STREAM IPPROTO_TCP pack_sockaddr_in INADDR_ANY
11    AI_PASSIVE AI_NUMERICSERV
12 );
13
14 my $AI_ADDRCONFIG = eval { Socket::AI_ADDRCONFIG() } || 0;
15
16 my @gai_args;
17 my @gai_rets;
18
19 no strict 'refs';
20 no warnings 'redefine';
21
22 *{"IO::Socket::IP::getaddrinfo"} = sub {
23    push @gai_args, [ @_ ];
24    return @{ shift @gai_rets };
25 };
26
27 @gai_args = ();
28 @gai_rets = (
29    [ "", {
30          family   => PF_INET,
31          socktype => SOCK_STREAM,
32          protocol => IPPROTO_TCP,
33          addr     => pack_sockaddr_in( 80, INADDR_ANY )
34       } ],
35 );
36 IO::Socket::IP->new( LocalPort => "80" );
37
38 is_deeply( \@gai_args,
39            [ 
40               [ undef, "80", { flags => AI_PASSIVE|$AI_ADDRCONFIG, socktype => SOCK_STREAM, protocol => IPPROTO_TCP } ],
41            ],
42            '@gai_args for LocalPort => "80"' );
43
44 SKIP: {
45    skip "No AI_NUMERICSERV", 1 unless defined eval { AI_NUMERICSERV() };
46
47    @gai_args = ();
48    @gai_rets = (
49       [ "", {
50             family   => PF_INET,
51             socktype => SOCK_STREAM,
52             protocol => IPPROTO_TCP,
53             addr     => pack_sockaddr_in( 80, INADDR_ANY )
54          } ],
55    );
56    IO::Socket::IP->new( LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV );
57
58    is_deeply( \@gai_args,
59               [ 
60                  [ undef, "80", { flags => AI_PASSIVE|AI_NUMERICSERV, socktype => SOCK_STREAM, protocol => IPPROTO_TCP } ],
61               ],
62               '@gai_args for LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV' );
63 }
64
65 done_testing;