xref: /openbsd/gnu/usr.bin/perl/cpan/Socket/t/ip_mreq.t (revision 256a93a4)
1use v5.6.1;
2use strict;
3use warnings;
4use Test::More;
5
6use Socket qw(
7    INADDR_ANY
8    pack_ip_mreq unpack_ip_mreq
9    pack_ip_mreq_source unpack_ip_mreq_source
10);
11
12# Check that pack/unpack_ip_mreq either croak with "Not implemented", or
13# roundtrip as identity
14
15my $packed;
16eval {
17    $packed = pack_ip_mreq "\xe0\0\0\1", INADDR_ANY;
18};
19if( !defined $packed ) {
20    plan skip_all => "No pack_ip_mreq" if $@ =~ m/ not implemented /;
21    die $@;
22}
23
24plan tests => 6;
25
26my @unpacked = unpack_ip_mreq $packed;
27
28is( $unpacked[0], "\xe0\0\0\1", 'unpack_ip_mreq multiaddr' );
29is( $unpacked[1], INADDR_ANY,   'unpack_ip_mreq interface' );
30
31is( (unpack_ip_mreq pack_ip_mreq "\xe0\0\0\1")[1], INADDR_ANY, 'pack_ip_mreq interface defaults to INADDR_ANY' );
32
33SKIP: {
34    my $mreq;
35    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 };
36
37    @unpacked = unpack_ip_mreq_source $mreq;
38
39    is( $unpacked[0], "\xe0\0\0\2", 'unpack_ip_mreq_source multiaddr' );
40    is( $unpacked[1], "\x0a\0\0\1", 'unpack_ip_mreq_source source' );
41    is( $unpacked[2], INADDR_ANY,   'unpack_ip_mreq_source interface' );
42}
43