Add GUI/ULA/LLA address groupings
This commit is contained in:
parent
29202f5bc1
commit
e89f8b1acd
1 changed files with 85 additions and 4 deletions
|
|
@ -5,6 +5,50 @@ SKIP: { eval { require Test::Warnings; } or skip($@, 1); }
|
||||||
eval { require 'ddclient'; } or BAIL_OUT($@);
|
eval { require 'ddclient'; } or BAIL_OUT($@);
|
||||||
|
|
||||||
|
|
||||||
|
# Note, for GUA addresses we use 2001:DB8::/32 as that is reserved for
|
||||||
|
# documentation per RFC 3849 and so not routable on public internet.
|
||||||
|
# But we do have to add some others starting in 3xxx:: because they
|
||||||
|
# are also valid GUA.
|
||||||
|
my @valid_ipv6_gua = (
|
||||||
|
"2000::",
|
||||||
|
"2001:DB8:4341:0781:1111:2222:3333:4444",
|
||||||
|
"2001:DB8:4341:0781::4444",
|
||||||
|
"2001:DB8:4341:0781:1111::",
|
||||||
|
"2001:DB8:4341:0781::100",
|
||||||
|
"2001:DB8:4341:0781::1",
|
||||||
|
"2001:DB8:4341:0781::0001",
|
||||||
|
"2fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
||||||
|
"3000::",
|
||||||
|
"3001:DB8:4341:0781:1111:2222:3333:4444",
|
||||||
|
"3001:DB8:4341:0781::4444",
|
||||||
|
"3001:DB8:4341:0781:1111::",
|
||||||
|
"3001:DB8:4341:0781::100",
|
||||||
|
"3001:DB8:4341:0781::1",
|
||||||
|
"3001:DB8:4341:0781::0001",
|
||||||
|
"3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
||||||
|
);
|
||||||
|
|
||||||
|
# For ULA addresses we randomly generated a /48 prefix per RFC 4193
|
||||||
|
# and are using subnet ID of 1 because why not.
|
||||||
|
my @valid_ipv6_ula = (
|
||||||
|
"fd00::",
|
||||||
|
"fdb6:1d86:d9bd:1:1111:2222:3333:4444",
|
||||||
|
"fdb6:1d86:d9bd:1::4444",
|
||||||
|
"fdb6:1d86:d9bd:1:1111::",
|
||||||
|
"fdb6:1d86:d9bd:1::100",
|
||||||
|
"fdb6:1d86:d9bd:1::1",
|
||||||
|
"fdb6:1d86:d9bd:1::0001",
|
||||||
|
"fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
||||||
|
);
|
||||||
|
|
||||||
|
my @valid_ipv6_lla = (
|
||||||
|
"fe80::",
|
||||||
|
"fe80::1111:2222:3333:4444",
|
||||||
|
"fe80::4444",
|
||||||
|
"fe80::1111",
|
||||||
|
"febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
|
||||||
|
);
|
||||||
|
|
||||||
my @valid_ipv6 = (
|
my @valid_ipv6 = (
|
||||||
"::abcd:efAB:CDEF", # case sensitivity
|
"::abcd:efAB:CDEF", # case sensitivity
|
||||||
"08:09:0a:0b:0c:0d:0e:0f", # leading zeros
|
"08:09:0a:0b:0c:0d:0e:0f", # leading zeros
|
||||||
|
|
@ -47,7 +91,10 @@ my @valid_ipv6 = (
|
||||||
"1111::3333:4444:5555:6666:7777:8888",
|
"1111::3333:4444:5555:6666:7777:8888",
|
||||||
"::3333:4444:5555:6666:7777:8888",
|
"::3333:4444:5555:6666:7777:8888",
|
||||||
"::2222:3333:4444:5555:6666:7777:8888",
|
"::2222:3333:4444:5555:6666:7777:8888",
|
||||||
# IPv4-mapped IPv6 addresses
|
);
|
||||||
|
|
||||||
|
my @valid_mixed_ipv6_non_gua = (
|
||||||
|
# with thanks to http://home.deds.nl/~aeron/regex/valid_ipv6.txt
|
||||||
"1111:2222:3333:4444:5555:6666:0.0.0.0",
|
"1111:2222:3333:4444:5555:6666:0.0.0.0",
|
||||||
"1111:2222:3333:4444:5555:6666:00.00.00.00",
|
"1111:2222:3333:4444:5555:6666:00.00.00.00",
|
||||||
"1111:2222:3333:4444:5555:6666:000.000.000.000",
|
"1111:2222:3333:4444:5555:6666:000.000.000.000",
|
||||||
|
|
@ -75,6 +122,25 @@ my @valid_ipv6 = (
|
||||||
"::2222:3333:4444:5555:6666:123.123.123.123",
|
"::2222:3333:4444:5555:6666:123.123.123.123",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
my @valid_mixed_ipv6_gua = (
|
||||||
|
"2111:2222:3333:4444:5555:6666:123.123.123.123",
|
||||||
|
"2111:2222:3333:4444:5555::123.123.123.123",
|
||||||
|
"2111:2222:3333:4444::123.123.123.123",
|
||||||
|
"2111:2222:3333::123.123.123.123",
|
||||||
|
"2111:2222::123.123.123.123",
|
||||||
|
"2111::123.123.123.123",
|
||||||
|
"2111:2222:3333:4444::6666:123.123.123.123",
|
||||||
|
"2111:2222:3333::6666:123.123.123.123",
|
||||||
|
"2111:2222::6666:123.123.123.123",
|
||||||
|
"2111::6666:123.123.123.123",
|
||||||
|
"2111:2222:3333::5555:6666:123.123.123.123",
|
||||||
|
"2111:2222::5555:6666:123.123.123.123",
|
||||||
|
"2111::5555:6666:123.123.123.123",
|
||||||
|
"2111:2222::4444:5555:6666:123.123.123.123",
|
||||||
|
"2111::4444:5555:6666:123.123.123.123",
|
||||||
|
"2111::3333:4444:5555:6666:123.123.123.123",
|
||||||
|
);
|
||||||
|
|
||||||
my @invalid_ipv6 = (
|
my @invalid_ipv6 = (
|
||||||
# Empty string and bogus text
|
# Empty string and bogus text
|
||||||
undef,
|
undef,
|
||||||
|
|
@ -361,6 +427,21 @@ my @invalid_ipv6 = (
|
||||||
"::2222:3333:4444:5555:6666:7777:8888:",
|
"::2222:3333:4444:5555:6666:7777:8888:",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
my @all_valid_ipv6 = (
|
||||||
|
@valid_ipv6_gua,
|
||||||
|
@valid_ipv6_ula,
|
||||||
|
@valid_ipv6_lla,
|
||||||
|
@valid_ipv6,
|
||||||
|
@valid_mixed_ipv6_non_gua,
|
||||||
|
@valid_mixed_ipv6_gua
|
||||||
|
);
|
||||||
|
|
||||||
|
my @short_valid_ipv6 = (
|
||||||
|
@valid_ipv6_gua,
|
||||||
|
@valid_ipv6_ula,
|
||||||
|
@valid_ipv6_lla,
|
||||||
|
);
|
||||||
|
|
||||||
my @if_samples = (
|
my @if_samples = (
|
||||||
# Sample output from:
|
# Sample output from:
|
||||||
# ip -6 -o addr show dev <interface> scope global
|
# ip -6 -o addr show dev <interface> scope global
|
||||||
|
|
@ -417,7 +498,7 @@ EOF
|
||||||
|
|
||||||
|
|
||||||
subtest "is_ipv6() with valid addresses" => sub {
|
subtest "is_ipv6() with valid addresses" => sub {
|
||||||
foreach my $ip (@valid_ipv6) {
|
foreach my $ip (@all_valid_ipv6) {
|
||||||
ok(ddclient::is_ipv6($ip), "is_ipv6('$ip')");
|
ok(ddclient::is_ipv6($ip), "is_ipv6('$ip')");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -431,7 +512,7 @@ subtest "is_ipv6() with invalid addresses" => sub {
|
||||||
subtest "is_ipv6() with char adjacent to valid address" => sub {
|
subtest "is_ipv6() with char adjacent to valid address" => sub {
|
||||||
foreach my $ch (split(//, '/.,:z @$#&%!^*()_-+'), "\n") {
|
foreach my $ch (split(//, '/.,:z @$#&%!^*()_-+'), "\n") {
|
||||||
subtest perlstring($ch) => sub {
|
subtest perlstring($ch) => sub {
|
||||||
foreach my $ip (@valid_ipv6) {
|
foreach my $ip (@short_valid_ipv6) {
|
||||||
subtest $ip => sub {
|
subtest $ip => sub {
|
||||||
my $test = $ch . $ip; # insert at front
|
my $test = $ch . $ip; # insert at front
|
||||||
ok(!ddclient::is_ipv6($test), "!is_ipv6('$test')");
|
ok(!ddclient::is_ipv6($test), "!is_ipv6('$test')");
|
||||||
|
|
@ -465,7 +546,7 @@ subtest "extract_ipv6() of valid addr with adjacent non-word char" => sub {
|
||||||
foreach my $wb (split(//, '/, @$#&%!^*()_-+'), "\n") {
|
foreach my $wb (split(//, '/, @$#&%!^*()_-+'), "\n") {
|
||||||
subtest perlstring($wb) => sub {
|
subtest perlstring($wb) => sub {
|
||||||
my $test = "";
|
my $test = "";
|
||||||
foreach my $ip (@valid_ipv6) {
|
foreach my $ip (@short_valid_ipv6) {
|
||||||
$test = "foo" . $wb . $ip . $wb . "bar"; # wrap front and end
|
$test = "foo" . $wb . $ip . $wb . "bar"; # wrap front and end
|
||||||
$ip =~ s/\b0+\B//g; ## remove embedded leading zeros for testing
|
$ip =~ s/\b0+\B//g; ## remove embedded leading zeros for testing
|
||||||
is(ddclient::extract_ipv6($test), $ip, perlstring($test));
|
is(ddclient::extract_ipv6($test), $ip, perlstring($test));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue