64 lines
2.7 KiB
Perl
64 lines
2.7 KiB
Perl
use Test::More;
|
|
use ddclient::t;
|
|
SKIP: { eval { require Test::Warnings; } or skip($@, 1); }
|
|
eval { require 'ddclient'; } or BAIL_OUT($@);
|
|
|
|
subtest "is_ipv6_global() with valid but non-globally-routable addresses" => sub {
|
|
foreach my $ip (
|
|
# The entirety of ::/16 is assumed to never contain globally routable addresses
|
|
"::",
|
|
"::1",
|
|
"0:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
|
# fc00::/7 unique local addresses (ULA)
|
|
"fc00::",
|
|
"fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
|
# fe80::/10 link-local unicast addresses
|
|
"fe80::",
|
|
"febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
|
# ff00::/8 multicast addresses
|
|
"ff00::",
|
|
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
|
# Case insensitivity of the negative lookahead
|
|
"FF00::",
|
|
) {
|
|
ok(!ddclient::is_ipv6_global($ip), "!is_ipv6_global('$ip')");
|
|
}
|
|
};
|
|
|
|
subtest "is_ipv6_global() with valid, globally routable addresses" => sub {
|
|
foreach my $ip (
|
|
"1::", # just after ::/16 assumed non-global block
|
|
"fbff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", # just before fc00::/7 ULA block
|
|
"fe00::", # just after fc00::/7 ULA block
|
|
"fe7f:ffff:ffff:ffff:ffff:ffff:ffff:ffff", # just before fe80::/10 link-local block
|
|
"fec0::", # just after fe80::/10 link-local block
|
|
"feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", # just before ff00::/8 multicast block
|
|
) {
|
|
ok(ddclient::is_ipv6_global($ip), "is_ipv6_global('$ip')");
|
|
}
|
|
};
|
|
|
|
subtest "extract_ipv6_global()" => sub {
|
|
my @test_cases = (
|
|
{name => "undef", text => undef, want => undef},
|
|
{name => "empty", text => "", want => undef},
|
|
{name => "only non-global", text => "foo fe80:: bar", want => undef},
|
|
{name => "single global", text => "foo 2000:: bar", want => "2000::"},
|
|
{name => "multiple globals", text => "2000:: 3000::", want => "2000::"},
|
|
{name => "global before non-global", text => "2000:: fe80::", want => "2000::"},
|
|
{name => "non-global before global", text => "fe80:: 2000::", want => "2000::"},
|
|
{name => "zero pad", text => "2001::0001", want => "2001::1"},
|
|
);
|
|
foreach my $tc (@test_cases) {
|
|
is(ddclient::extract_ipv6_global($tc->{text}), $tc->{want}, $tc->{name});
|
|
}
|
|
};
|
|
|
|
subtest "interface config samples" => sub {
|
|
for my $sample (@ddclient::t::interface_samples) {
|
|
my $got = ddclient::extract_ipv6_global($sample->{text});
|
|
is($got, $sample->{want_extract_ipv6_global}, $sample->{name});
|
|
}
|
|
};
|
|
|
|
done_testing();
|