
This prevents the `%builtinweb` or `%builtinfw` skip defaults from overriding a user's explicitly empty `--web-skip=` or `--fw-skip=` setting. This is technically a backwards-incompatible change: Any config that explicitly sets `--web-skip` or `--fw-skip` to the empty string but depends on the built-in skip behavior will fail. This is unlikely to affect many (if any) users; compatibility concerns are believed to be far less significant than the potential need to turn off the built-in skip.
167 lines
4.9 KiB
Perl
167 lines
4.9 KiB
Perl
use Test::More;
|
|
eval { require ddclient::Test::Fake::HTTPD; } or plan(skip_all => $@);
|
|
SKIP: { eval { require Test::Warnings; } or skip($@, 1); }
|
|
eval { require 'ddclient'; } or BAIL_OUT($@);
|
|
my $ipv6_supported = eval {
|
|
require IO::Socket::IP;
|
|
my $ipv6_socket = IO::Socket::IP->new(
|
|
Domain => 'PF_INET6',
|
|
LocalHost => '::1',
|
|
Listen => 1,
|
|
);
|
|
defined($ipv6_socket);
|
|
};
|
|
my $http_daemon_supports_ipv6 = eval {
|
|
require HTTP::Daemon;
|
|
HTTP::Daemon->VERSION(6.12);
|
|
};
|
|
|
|
sub run_httpd {
|
|
my ($ipv6) = @_;
|
|
return undef if $ipv6 && (!$ipv6_supported || !$http_daemon_supports_ipv6);
|
|
my $httpd = ddclient::Test::Fake::HTTPD->new(
|
|
host => $ipv6 ? '::1' : '127.0.0.1',
|
|
scheme => 'http',
|
|
daemon_args => {V6Only => 1},
|
|
);
|
|
my $out = $ipv6 ? '::1 skip ::2' : '127.0.0.1 skip 127.0.0.2';
|
|
$httpd->run(sub {
|
|
return [200, ['Content-Type' => 'text/plain'], [$out]];
|
|
});
|
|
diag(sprintf("started IPv%s SSL server running at %s", $ipv6 ? '6' : '4', $httpd->endpoint()));
|
|
return $httpd;
|
|
}
|
|
my %httpd = (
|
|
'4' => run_httpd(0),
|
|
'6' => run_httpd(1),
|
|
);
|
|
|
|
my $builtinwebv4 = 't/skip.pl webv4';
|
|
my $builtinwebv6 = 't/skip.pl webv6';
|
|
my $builtinfw = 't/skip.pl fw';
|
|
|
|
$ddclient::builtinweb{$builtinwebv4} = {'url' => $httpd{'4'}->endpoint(), 'skip' => 'skip'};
|
|
$ddclient::builtinweb{$builtinwebv6} = {'url' => $httpd{'6'}->endpoint(), 'skip' => 'skip'}
|
|
if $httpd{'6'};
|
|
$ddclient::builtinfw{$builtinfw} = {name => 'test', skip => 'skip'};
|
|
%ddclient::builtinfw if 0; # suppress spurious warning "Name used only once: possible typo"
|
|
|
|
sub run_test_case {
|
|
my %tc = @_;
|
|
SKIP: {
|
|
skip("IPv6 not supported on this system", 1) if $tc{ipv6} && !$ipv6_supported;
|
|
skip("HTTP::Daemon too old for IPv6 support", 1)
|
|
if $tc{ipv6} && !$http_daemon_supports_ipv6;
|
|
my $h = 't/skip.pl';
|
|
$ddclient::config{$h} = $tc{cfg};
|
|
%ddclient::config if 0; # suppress spurious warning "Name used only once: possible typo"
|
|
is(ddclient::get_ip($tc{cfg}{use}, $h), $tc{want}, $tc{desc}) if ($tc{cfg}{use});
|
|
is(ddclient::get_ipv4($tc{cfg}{usev4}, $h), $tc{want}, $tc{desc}) if ($tc{cfg}{usev4});
|
|
is(ddclient::get_ipv6($tc{cfg}{usev6}, $h), $tc{want}, $tc{desc}) if ($tc{cfg}{usev6});
|
|
}
|
|
}
|
|
|
|
subtest "use=web web='$builtinwebv4'" => sub {
|
|
run_test_case(
|
|
desc => "web-skip='' cancels built-in skip",
|
|
cfg => {
|
|
'use' => 'web',
|
|
'web' => $builtinwebv4,
|
|
'web-skip' => '',
|
|
},
|
|
want => '127.0.0.1',
|
|
);
|
|
run_test_case(
|
|
desc => 'web-skip=undef uses built-in skip',
|
|
cfg => {
|
|
'use' => 'web',
|
|
'web' => $builtinwebv4,
|
|
'web-skip' => undef,
|
|
},
|
|
want => '127.0.0.2',
|
|
);
|
|
};
|
|
subtest "usev4=webv4 webv4='$builtinwebv4'" => sub {
|
|
run_test_case(
|
|
desc => "webv4-skip='' cancels built-in skip",
|
|
cfg => {
|
|
'usev4' => 'webv4',
|
|
'webv4' => $builtinwebv4,
|
|
'webv4-skip' => '',
|
|
},
|
|
want => '127.0.0.1',
|
|
);
|
|
run_test_case(
|
|
desc => 'webv4-skip=undef uses built-in skip',
|
|
cfg => {
|
|
'usev4' => 'webv4',
|
|
'webv4' => $builtinwebv4,
|
|
'webv4-skip' => undef,
|
|
},
|
|
want => '127.0.0.2',
|
|
);
|
|
};
|
|
subtest "usev6=webv6 webv6='$builtinwebv6'" => sub {
|
|
run_test_case(
|
|
desc => "webv6-skip='' cancels built-in skip",
|
|
cfg => {
|
|
'usev6' => 'webv6',
|
|
'webv6' => $builtinwebv6,
|
|
'webv6-skip' => '',
|
|
},
|
|
ipv6 => 1,
|
|
want => '::1',
|
|
);
|
|
run_test_case(
|
|
desc => 'webv6-skip=undef uses built-in skip',
|
|
cfg => {
|
|
'usev6' => 'webv6',
|
|
'webv6' => $builtinwebv6,
|
|
'webv6-skip' => undef,
|
|
},
|
|
ipv6 => 1,
|
|
want => '::2',
|
|
);
|
|
};
|
|
subtest "use='$builtinfw'" => sub {
|
|
run_test_case(
|
|
desc => "fw-skip='' cancels built-in skip",
|
|
cfg => {
|
|
'fw' => $httpd{'4'}->endpoint(),
|
|
'fw-skip' => '',
|
|
'use' => $builtinfw,
|
|
},
|
|
want => '127.0.0.1',
|
|
);
|
|
run_test_case(
|
|
desc => 'fw-skip=undef uses built-in skip',
|
|
cfg => {
|
|
'fw' => $httpd{'4'}->endpoint(),
|
|
'fw-skip' => undef,
|
|
'use' => $builtinfw,
|
|
},
|
|
want => '127.0.0.2',
|
|
);
|
|
};
|
|
subtest "usev4='$builtinfw'" => sub {
|
|
run_test_case(
|
|
desc => "fwv4-skip='' cancels built-in skip",
|
|
cfg => {
|
|
'fwv4' => $httpd{'4'}->endpoint(),
|
|
'fwv4-skip' => '',
|
|
'usev4' => $builtinfw,
|
|
},
|
|
want => '127.0.0.1',
|
|
);
|
|
run_test_case(
|
|
desc => 'fwv4-skip=undef uses built-in skip',
|
|
cfg => {
|
|
'fwv4' => $httpd{'4'}->endpoint(),
|
|
'fwv4-skip' => undef,
|
|
'usev4' => $builtinfw,
|
|
},
|
|
want => '127.0.0.2',
|
|
);
|
|
};
|
|
|
|
done_testing();
|