This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
2ed76062c151e8e5a1a4bce4af9dfb3543b78d35
[perl5.git] / cpan / Socket / t / ip_mreq.t
1 use strict;
2 use warnings;
3 use Test::More;
4
5 use Socket qw(
6     INADDR_ANY
7     pack_ip_mreq unpack_ip_mreq
8     pack_ip_mreq_source unpack_ip_mreq_source
9 );
10
11 # Check that pack/unpack_ip_mreq either croak with "Not implemented", or
12 # roundtrip as identity
13
14 my $packed;
15 eval {
16     $packed = pack_ip_mreq "\xe0\0\0\1", INADDR_ANY;
17 };
18 if( !defined $packed ) {
19     plan skip_all => "No pack_ip_mreq" if $@ =~ m/ not implemented /;
20     die $@;
21 }
22
23 plan tests => 6;
24
25 my @unpacked = unpack_ip_mreq $packed;
26
27 is( $unpacked[0], "\xe0\0\0\1", 'unpack_ip_mreq multiaddr' );
28 is( $unpacked[1], INADDR_ANY,   'unpack_ip_mreq interface' );
29
30 is( (unpack_ip_mreq pack_ip_mreq "\xe0\0\0\1")[1], INADDR_ANY, 'pack_ip_mreq interface defaults to INADDR_ANY' );
31
32 SKIP: {
33     my $mreq;
34     skip "No pack_ip_mreq_source", 3 unless defined eval { $mreq = pack_ip_mreq_source "\xe0\0\0\2", "\x0a\0\0\1", INADDR_ANY };
35
36     @unpacked = unpack_ip_mreq_source $mreq;
37
38     is( $unpacked[0], "\xe0\0\0\2", 'unpack_ip_mreq_source multiaddr' );
39     is( $unpacked[1], "\x0a\0\0\1", 'unpack_ip_mreq_source source' );
40     is( $unpacked[2], INADDR_ANY,   'unpack_ip_mreq_source interface' );
41 }