The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl

use warnings;
use strict;

use Test::More tests => 16;

use Net::IP::XS qw(ip_is_valid_mask Error Errno);

my $res;
my @res;

$res = ip_is_valid_mask('', 0);
is($res, undef, 'No IP address version with empty mask');
is(Error(), 'Cannot determine IP version for ',
    'Got correct error');
is(Errno(), 101, 'Got correct error');

$res = ip_is_valid_mask('', 8);
is($res, 1, 'Bad IP address version with empty mask');

$res = ip_is_valid_mask('1'.('0' x 31), 4);
is($res, 1, 'IPv4 mask (1)');

$res = ip_is_valid_mask('1' x 32, 4);
is($res, 1, 'IPv4 mask (2)');

$res = ip_is_valid_mask('0' x 32, 4);
is($res, 1, 'IPv4 mask (3)');

$res = ip_is_valid_mask('asdf', 4);
is($res, undef, 'Invalid mask (contains letters, too short)');
is(Error(), "Invalid mask length for asdf", 'Got correct error');
is(Errno(), 150, 'Got correct errno');

$res = ip_is_valid_mask('asdf' x 8, 4);
is($res, undef, 'Invalid mask (contains letters, correct length)');
is(Error(), "Invalid mask ".('asdf' x 8), 'Got correct error');
is(Errno(), 151, 'Got correct errno');

$res = ip_is_valid_mask('asdf' x 500, 4);
is($res, undef, 'Invalid mask (contains letters, too long)');
is(Errno(), 150, 'Got correct errno');

$res = ip_is_valid_mask('0'.('1' x 31), 4);
is($res, undef, 'Invalid mask (0 then series of 1s)');

1;