feat: add full Zonemaster stack with Docker and Spanish UI
- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI) - Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend - Dockerfile.gui: Astro static build served via nginx - docker-compose.yml: backend (internal) + frontend (port 5353) - nginx.conf: root redirects to /es/, /api/ proxied to backend - zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
14
zonemaster-engine/t/00-load.t
Normal file
14
zonemaster-engine/t/00-load.t
Normal file
@@ -0,0 +1,14 @@
|
||||
use 5.014002;
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use Test::More;
|
||||
|
||||
plan tests => 1;
|
||||
|
||||
BEGIN {
|
||||
use_ok( 'Zonemaster::Engine' ) || print "Bail out!\n";
|
||||
}
|
||||
|
||||
diag( "Testing Zonemaster Engine $Zonemaster::Engine::VERSION, Perl $], $^X" );
|
||||
|
||||
done_testing;
|
||||
368
zonemaster-engine/t/Test-address.data
Normal file
368
zonemaster-engine/t/Test-address.data
Normal file
File diff suppressed because one or more lines are too long
108
zonemaster-engine/t/Test-address.t
Normal file
108
zonemaster-engine/t/Test-address.t
Normal file
@@ -0,0 +1,108 @@
|
||||
use Test::More;
|
||||
use File::Slurp;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Address} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-address.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die "Stored data file missing" if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my $json = read_file( "t/profiles/Test-address-all.json" );
|
||||
my $profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my @special_addresses = qw(0.255.255.255
|
||||
10.255.255.255
|
||||
192.168.255.255
|
||||
172.17.255.255
|
||||
100.65.255.255
|
||||
127.255.255.255
|
||||
169.254.255.255
|
||||
192.0.0.255
|
||||
192.0.0.7
|
||||
192.0.0.170
|
||||
192.0.0.171
|
||||
192.0.2.255
|
||||
198.51.100.255
|
||||
203.0.113.255
|
||||
192.88.99.255
|
||||
198.19.255.255
|
||||
240.255.255.255
|
||||
255.255.255.255
|
||||
::1
|
||||
::
|
||||
::ffff:cafe:cafe
|
||||
64:ff9b::cafe:cafe
|
||||
100::cafe:cafe:cafe:cafe
|
||||
2001:1ff:cafe:cafe:cafe:cafe:cafe:cafe
|
||||
2001::cafe:cafe:cafe:cafe:cafe:cafe
|
||||
2001:2::cafe:cafe:cafe:cafe:cafe
|
||||
2001:db8:cafe:cafe:cafe:cafe:cafe:cafe
|
||||
2001:1f::cafe:cafe:cafe:cafe:cafe
|
||||
2002:cafe:cafe:cafe:cafe:cafe:cafe:cafe
|
||||
fdff:cafe:cafe:cafe:cafe:cafe:cafe:cafe
|
||||
febf:cafe:cafe:cafe:cafe:cafe:cafe:cafe
|
||||
);
|
||||
|
||||
foreach my $addr ( @special_addresses ) {
|
||||
ok(
|
||||
defined(
|
||||
Zonemaster::Engine::Test::Address->_find_special_address(
|
||||
Net::IP::XS->new( $addr )
|
||||
)
|
||||
),
|
||||
"Special address: $addr"
|
||||
);
|
||||
}
|
||||
|
||||
###########
|
||||
# address
|
||||
###########
|
||||
|
||||
my %res;
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{address}, q{nic.fr} );
|
||||
|
||||
ok( $res{NAMESERVER_IP_PTR_MISMATCH}, q{Nameserver IP PTR mismatch} );
|
||||
ok( $res{A01_GLOBALLY_REACHABLE_ADDR}, q{All Nameserver addresses are in the routable public addressing space} );
|
||||
ok( $res{NAMESERVERS_IP_WITH_REVERSE}, q{Reverse DNS entry exist for all Nameserver IP addresses} );
|
||||
|
||||
###########
|
||||
# address01
|
||||
###########
|
||||
|
||||
# See t/Test-address01.t
|
||||
|
||||
###########
|
||||
# address02
|
||||
###########
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{address}, q{address02.zut-root.rd.nic.fr} );
|
||||
ok( $res{NAMESERVER_IP_WITHOUT_REVERSE}, q{Nameserver IP without PTR} );
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{torsas.se} );
|
||||
my @res = Zonemaster::Engine->test_method( q{Address}, q{address02}, $zone );
|
||||
ok( !( grep { $_->tag eq 'NAMESERVER_IP_WITHOUT_REVERSE' } @res ), 'Classless in-addr.arpa properly handled when querying PTR.' );
|
||||
|
||||
###########
|
||||
# address03
|
||||
###########
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{address}, q{is.se} );
|
||||
ok( $res{NAMESERVER_IP_PTR_MATCH}, q{All reverse DNS entry matches name server name} );
|
||||
|
||||
@res = Zonemaster::Engine->test_method( q{Address}, q{address03}, $zone );
|
||||
ok( !( grep { $_->tag eq 'NAMESERVER_IP_WITHOUT_REVERSE' } @res ), 'Classless in-addr.arpa properly handled when querying PTR.' );
|
||||
|
||||
###########
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
54
zonemaster-engine/t/Test-address01.data
Normal file
54
zonemaster-engine/t/Test-address01.data
Normal file
File diff suppressed because one or more lines are too long
158
zonemaster-engine/t/Test-address01.t
Normal file
158
zonemaster-engine/t/Test-address01.t
Normal file
@@ -0,0 +1,158 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Address} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# address01 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Address-TP/address01.md
|
||||
my $test_module = 'Address';
|
||||
my $test_case = 'address01';
|
||||
my @all_tags = qw(A01_ADDR_NOT_GLOBALLY_REACHABLE
|
||||
A01_DOCUMENTATION_ADDR
|
||||
A01_GLOBALLY_REACHABLE_ADDR
|
||||
A01_LOCAL_USE_ADDR
|
||||
A01_NO_GLOBALLY_REACHABLE_ADDR
|
||||
A01_NO_NAME_SERVERS_FOUND);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.1.0.1', 'fda1:b2:c3::127:1:0:1' ],
|
||||
'ns2' => [ '127.1.0.2', 'fda1:b2:c3::127:1:0:2' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'GOOD-1' => [
|
||||
1,
|
||||
q(good-1.address01.xa),
|
||||
[ qw(A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALL-NON-REACHABLE' => [
|
||||
1,
|
||||
q(all-non-reachable.address01.xa),
|
||||
[ qw(A01_ADDR_NOT_GLOBALLY_REACHABLE A01_LOCAL_USE_ADDR A01_DOCUMENTATION_ADDR A01_NO_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-LOCAL-DOC-1' => [
|
||||
1,
|
||||
q(mixed-local-doc-1.address01.xa),
|
||||
[ qw(A01_LOCAL_USE_ADDR A01_DOCUMENTATION_ADDR A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-LOCAL-DOC-2' => [
|
||||
1,
|
||||
q(mixed-local-doc-2.address01.xa),
|
||||
[ qw(A01_LOCAL_USE_ADDR A01_DOCUMENTATION_ADDR A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-LOCAL-OTHER-1' => [
|
||||
1,
|
||||
q(mixed-local-other-1.address01.xa),
|
||||
[ qw(A01_LOCAL_USE_ADDR A01_ADDR_NOT_GLOBALLY_REACHABLE A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-LOCAL-OTHER-2' => [
|
||||
1,
|
||||
q(mixed-local-other-2.address01.xa),
|
||||
[ qw(A01_LOCAL_USE_ADDR A01_ADDR_NOT_GLOBALLY_REACHABLE A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-DOC-OTHER-1' => [
|
||||
1,
|
||||
q(mixed-doc-other-1.address01.xa),
|
||||
[ qw(A01_DOCUMENTATION_ADDR A01_ADDR_NOT_GLOBALLY_REACHABLE A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-DOC-OTHER-2' => [
|
||||
1,
|
||||
q(mixed-doc-other-2.address01.xa),
|
||||
[ qw(A01_DOCUMENTATION_ADDR A01_ADDR_NOT_GLOBALLY_REACHABLE A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-ALL-1' => [
|
||||
1,
|
||||
q(mixed-all-1.address01.xa),
|
||||
[ qw(A01_ADDR_NOT_GLOBALLY_REACHABLE A01_DOCUMENTATION_ADDR A01_LOCAL_USE_ADDR A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-ALL-2' => [
|
||||
1,
|
||||
q(mixed-all-2.address01.xa),
|
||||
[ qw(A01_ADDR_NOT_GLOBALLY_REACHABLE A01_DOCUMENTATION_ADDR A01_LOCAL_USE_ADDR A01_GLOBALLY_REACHABLE_ADDR) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NO-NAME-SERVERS' => [
|
||||
1,
|
||||
q(no-name-servers.address01.xa),
|
||||
[ qw(A01_NO_NAME_SERVERS_FOUND) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
]
|
||||
);
|
||||
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
38
zonemaster-engine/t/Test-address03.data
Normal file
38
zonemaster-engine/t/Test-address03.data
Normal file
File diff suppressed because one or more lines are too long
58
zonemaster-engine/t/Test-address03.t
Normal file
58
zonemaster-engine/t/Test-address03.t
Normal file
@@ -0,0 +1,58 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
testing_test_case 'Address', 'address03';
|
||||
|
||||
all_tags qw(NAMESERVER_IP_PTR_MATCH
|
||||
NAMESERVER_IP_PTR_MISMATCH
|
||||
NAMESERVER_IP_WITHOUT_REVERSE
|
||||
NO_RESPONSE_PTR_QUERY);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
root_hints 'ns1' => [ qw(127.1.0.1 fda1:b2:c3::127:1:0:1) ],
|
||||
'ns2' => [ qw(127.1.0.2 fda1:b2:c3::127:1:0:2) ];
|
||||
|
||||
zone_name_template '{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
# Test zone scenarios
|
||||
scenario 'ALL-NS-HAVE-PTR-{1..2}' => sub {
|
||||
expect 'NAMESERVER_IP_PTR_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-NS-HAVE-PTR' => sub {
|
||||
expect 'NAMESERVER_IP_WITHOUT_REVERSE';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'INCOMPLETE-PTR-{1..2}' => sub {
|
||||
expect 'NAMESERVER_IP_WITHOUT_REVERSE';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NON-MATCHING-NAMES' => sub {
|
||||
expect 'NAMESERVER_IP_PTR_MISMATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'PTR-IS-GOOD-CNAME-{1..2}' => sub {
|
||||
expect 'NAMESERVER_IP_PTR_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'PTR-IS-DANGLING-CNAME' => sub {
|
||||
expect 'NAMESERVER_IP_WITHOUT_REVERSE';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'PTR-IS-ILLEGAL-CNAME' => sub {
|
||||
expect 'NAMESERVER_IP_WITHOUT_REVERSE';
|
||||
forbid 'NAMESERVER_IP_PTR_MATCH';
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
38
zonemaster-engine/t/Test-basic.data
Normal file
38
zonemaster-engine/t/Test-basic.data
Normal file
File diff suppressed because one or more lines are too long
101
zonemaster-engine/t/Test-basic.t
Normal file
101
zonemaster-engine/t/Test-basic.t
Normal file
@@ -0,0 +1,101 @@
|
||||
use Test::More;
|
||||
use File::Slurp;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Basic} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $checking_module = q{Basic};
|
||||
|
||||
sub name_gives {
|
||||
my ( $test, $name, $gives ) = @_;
|
||||
|
||||
my @res = Zonemaster::Engine->test_method( q{Basic}, $test, $name );
|
||||
|
||||
ok( ( grep { $_->tag eq $gives } @res ), "$name gives $gives" );
|
||||
}
|
||||
|
||||
sub name_gives_not {
|
||||
my ( $test, $name, $gives ) = @_;
|
||||
|
||||
my @res = Zonemaster::Engine->test_method( q{Basic}, $test, $name );
|
||||
|
||||
ok( !( grep { $_->tag eq $gives } @res ), "$name does not give $gives" );
|
||||
}
|
||||
|
||||
sub zone_gives {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = grep { $_->tag !~ /^TEST_CASE_(END|START)$/ } Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( ( grep { $_->tag eq $gives } @res ), $zone->name->string . " gives $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
sub zone_gives_not {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = grep { $_->tag !~ /^TEST_CASE_(END|START)$/ } Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( !( grep { $_->tag eq $gives } @res ), $zone->name->string . " does not give $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-basic.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
$json = read_file( 't/profiles/Test-basic-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my %res;
|
||||
my $zone;
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{basic}, q{nic.tf} );
|
||||
ok( $res{B02_AUTH_RESPONSE_SOA}, q{B02_AUTH_RESPONSE_SOA} );
|
||||
ok( $res{HAS_NAMESERVER_NO_WWW_A_TEST}, q{HAS_NAMESERVER_NO_WWW_A_TEST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{afnic.fr} );
|
||||
zone_gives( q{basic02}, $zone, [qw{NO_NETWORK}] );
|
||||
zone_gives_not( q{basic02}, $zone, [qw{IPV4_ENABLED}] );
|
||||
zone_gives_not( q{basic02}, $zone, [qw{IPV6_ENABLED}] );
|
||||
zone_gives_not( q{basic02}, $zone, [qw{IPV4_DISABLED}] );
|
||||
zone_gives_not( q{basic02}, $zone, [qw{IPV6_DISABLED}] );
|
||||
zone_gives( q{basic03}, $zone, [qw{NO_NETWORK}] );
|
||||
zone_gives_not( q{basic03}, $zone, [qw{IPV4_ENABLED}] );
|
||||
zone_gives_not( q{basic03}, $zone, [qw{IPV6_ENABLED}] );
|
||||
zone_gives_not( q{basic03}, $zone, [qw{IPV4_DISABLED}] );
|
||||
zone_gives_not( q{basic03}, $zone, [qw{IPV6_DISABLED}] );
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
|
||||
TODO: {
|
||||
local $TODO = "Need to find/create zones with that error";
|
||||
|
||||
#basic03
|
||||
ok( $tag{A_QUERY_NO_RESPONSES}, q{A_QUERY_NO_RESPONSES} );
|
||||
ok( $tag{HAS_A_RECORDS}, q{HAS_A_RECORDS} );
|
||||
ok( $tag{NO_A_RECORDS}, q{NO_A_RECORDS} );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
266
zonemaster-engine/t/Test-basic01.data
Normal file
266
zonemaster-engine/t/Test-basic01.data
Normal file
File diff suppressed because one or more lines are too long
126
zonemaster-engine/t/Test-basic01.t
Normal file
126
zonemaster-engine/t/Test-basic01.t
Normal file
@@ -0,0 +1,126 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
###########
|
||||
# basic01 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Basic-TP/basic01.md
|
||||
testing_test_case 'Basic', 'basic01';
|
||||
|
||||
all_tags qw(B01_CHILD_IS_ALIAS
|
||||
B01_CHILD_FOUND
|
||||
B01_INCONSISTENT_ALIAS
|
||||
B01_INCONSISTENT_DELEGATION
|
||||
B01_NO_CHILD
|
||||
B01_PARENT_DISREGARDED
|
||||
B01_PARENT_FOUND
|
||||
B01_PARENT_NOT_FOUND
|
||||
B01_PARENT_UNDETERMINED
|
||||
B01_ROOT_HAS_NO_PARENT
|
||||
B01_SERVER_ZONE_ERROR);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
root_hints 'ns1' => [ qw(127.1.0.1 fda1:b2:c3::127:1:0:1) ],
|
||||
'ns2' => [ qw(127.1.0.2 fda1:b2:c3::127:1:0:2) ];
|
||||
|
||||
# Test zone scenarios
|
||||
zone_name_template 'child.parent.{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
scenario qw(GOOD-1 GOOD-MIXED-{1..2} GOOD-PARENT-HOST-1 GOOD-GRANDPARENT-HOST-1) => sub {
|
||||
expect qw(B01_CHILD_FOUND B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario qw(GOOD-UNDEL-1 GOOD-MIXED-UNDEL-{1..2} NO-DEL-UNDEL-1 NO-DEL-MIXED-UNDEL-1) => sub {
|
||||
fake_ns 'ns3-undelegated-child.basic01.xa';
|
||||
fake_ns 'ns4-undelegated-child.basic01.xa';
|
||||
expect qw(B01_CHILD_FOUND B01_PARENT_DISREGARDED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-DEL-MIXED-UNDEL-2' => sub {
|
||||
zone 'child.w.x.parent.y.z.{SCENARIO}.{TESTCASE}.xa';
|
||||
fake_ns 'ns3-undelegated-child.basic01.xa';
|
||||
fake_ns 'ns4-undelegated-child.basic01.xa';
|
||||
expect qw(B01_CHILD_FOUND B01_PARENT_DISREGARDED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-CHILD-{1..2}' => sub {
|
||||
expect qw(B01_NO_CHILD B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-CHLD-PAR-UNDETER-1' => sub {
|
||||
expect qw(B01_NO_CHILD B01_PARENT_FOUND B01_PARENT_UNDETERMINED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHLD-FOUND-PAR-UNDET-1' => sub {
|
||||
expect qw(B01_CHILD_FOUND B01_PARENT_FOUND B01_PARENT_UNDETERMINED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHLD-FOUND-INCONSIST-{1..3}' => sub {
|
||||
expect qw(B01_CHILD_FOUND B01_INCONSISTENT_DELEGATION B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHLD-FOUND-INCONSIST-4' => sub {
|
||||
expect qw(B01_CHILD_IS_ALIAS B01_CHILD_FOUND B01_INCONSISTENT_DELEGATION B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHLD-FOUND-INCONSIST-{5..8}' => sub {
|
||||
expect qw(B01_CHILD_FOUND B01_INCONSISTENT_DELEGATION B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHLD-FOUND-INCONSIST-9' => sub {
|
||||
expect qw(B01_CHILD_IS_ALIAS B01_CHILD_FOUND B01_INCONSISTENT_DELEGATION B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHLD-FOUND-INCONSIST-10' => sub {
|
||||
expect qw(B01_CHILD_FOUND B01_INCONSISTENT_DELEGATION B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario qw(NO-DEL-UNDEL-NO-PAR-1 NO-DEL-UNDEL-PAR-UND-1) => sub {
|
||||
fake_ns 'ns3-undelegated-child.basic01.xa';
|
||||
fake_ns 'ns4-undelegated-child.basic01.xa';
|
||||
expect qw(B01_CHILD_FOUND B01_PARENT_DISREGARDED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-CHLD-NO-PAR-1' => sub {
|
||||
expect qw(B01_NO_CHILD B01_PARENT_NOT_FOUND B01_SERVER_ZONE_ERROR);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHILD-ALIAS-1' => sub {
|
||||
expect qw(B01_CHILD_IS_ALIAS B01_NO_CHILD B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHILD-ALIAS-2' => sub {
|
||||
expect qw(B01_CHILD_IS_ALIAS B01_NO_CHILD B01_INCONSISTENT_ALIAS
|
||||
B01_PARENT_FOUND);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ZONE-ERR-GRANDPARENT-{1..3}' => sub {
|
||||
expect qw(B01_CHILD_FOUND B01_PARENT_FOUND B01_SERVER_ZONE_ERROR);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ROOT-ZONE' => sub {
|
||||
zone '.';
|
||||
expect qw(B01_CHILD_FOUND B01_ROOT_HAS_NO_PARENT);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
121
zonemaster-engine/t/Test-basic02.data
Normal file
121
zonemaster-engine/t/Test-basic02.data
Normal file
File diff suppressed because one or more lines are too long
161
zonemaster-engine/t/Test-basic02.t
Normal file
161
zonemaster-engine/t/Test-basic02.t
Normal file
@@ -0,0 +1,161 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
###########
|
||||
# basic02 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Basic-TP/basic02.md
|
||||
testing_test_case 'Basic', 'basic02';
|
||||
|
||||
all_tags qw(B02_AUTH_RESPONSE_SOA
|
||||
B02_NO_DELEGATION
|
||||
B02_NO_WORKING_NS
|
||||
B02_NS_BROKEN
|
||||
B02_NS_NOT_AUTH
|
||||
B02_NS_NO_IP_ADDR
|
||||
B02_NS_NO_RESPONSE
|
||||
B02_UNEXPECTED_RCODE);
|
||||
|
||||
# Specific hint file (test-zone-data/Basic-TP/basic02/hintfile.zone)
|
||||
root_hints 'root-ns1.xa' => [ qw(127.12.2.23 fda1:b2:c3::127:12:2:23) ],
|
||||
'root-ns2.xa' => [ qw(127.12.2.24 fda1:b2:c3::127:12:2:24) ];
|
||||
|
||||
zone_name_template '{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
scenario 'GOOD-{1..2}' => sub {
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-1' => sub {
|
||||
fake_ns 'ns1.good-undel-1.basic02.xa' => '127.12.2.31', 'fda1:b2:c3:0:127:12:2:31';
|
||||
fake_ns 'ns2.good-undel-1.basic02.xa' => '127.12.2.32', 'fda1:b2:c3:0:127:12:2:32';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-2' => sub {
|
||||
fake_ns 'ns1.good-undel-2.basic02.xb';
|
||||
fake_ns 'ns2.good-undel-2.basic02.xb';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-3' => sub {
|
||||
fake_ns 'ns3.good-undel-3.basic02.xb';
|
||||
fake_ns 'ns4.good-undel-3.basic02.xb';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-4' => sub {
|
||||
fake_ns 'ns1.good-undel-4.basic02.xb';
|
||||
fake_ns 'ns2.good-undel-4.basic02.xb';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-5' => sub {
|
||||
fake_ns 'ns1.good-undel-5.basic02.xa' => '127.12.2.31', 'fda1:b2:c3:0:127:12:2:31';
|
||||
fake_ns 'ns2.good-undel-5.basic02.xa' => '127.12.2.32', 'fda1:b2:c3:0:127:12:2:32';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-6' => sub {
|
||||
fake_ns 'ns3.good-undel-6.basic02.xa' => '127.12.2.33', 'fda1:b2:c3:0:127:12:2:33';
|
||||
fake_ns 'ns4.good-undel-6.basic02.xa' => '127.12.2.34', 'fda1:b2:c3:0:127:12:2:34';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-7' => sub {
|
||||
fake_ns 'ns3.good-undel-7.basic02.xb' => '127.12.2.33', 'fda1:b2:c3:0:127:12:2:33';
|
||||
fake_ns 'ns4.good-undel-7.basic02.xb' => '127.12.2.34';
|
||||
fake_ns 'ns5.good-undel-7.basic02.xb' => 'fda1:b2:c3:0:127:12:2:34';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-8' => sub {
|
||||
fake_ns 'dns1.good-undel-8.basic02.xa' => '127.12.2.33', 'fda1:b2:c3:0:127:12:2:33';
|
||||
fake_ns 'dns2.good-undel-8.basic02.xa' => '127.12.2.34', 'fda1:b2:c3:0:127:12:2:34';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-9' => sub {
|
||||
fake_ns 'dns1.good-undel-9.basic02.xb' => '127.12.2.33', 'fda1:b2:c3:0:127:12:2:33';
|
||||
fake_ns 'dns2.good-undel-9.basic02.xb' => '127.12.2.34', 'fda1:b2:c3:0:127:12:2:34';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-10' => sub {
|
||||
fake_ns 'ns3.good-undel-10.basic02.xb' => '127.12.2.33', 'fda1:b2:c3:0:127:12:2:33';
|
||||
fake_ns 'ns4.good-undel-10.basic02.xb' => '127.12.2.34', 'fda1:b2:c3:0:127:12:2:34';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-UNDEL-11' => sub {
|
||||
fake_ns 'ns3.good-undel-11.basic02.xb';
|
||||
fake_ns 'ns4.good-undel-11.basic02.xb';
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MIXED-1' => sub {
|
||||
expect 'B02_AUTH_RESPONSE_SOA';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-DELEGATION-1' => sub {
|
||||
zone 'no-delegation.{TESTCASE}.xa';
|
||||
expect 'B02_NO_DELEGATION';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NS-BROKEN-1' => sub {
|
||||
expect qw(B02_NS_BROKEN B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NS-NOT-AUTH-1' => sub {
|
||||
expect qw(B02_NS_NOT_AUTH B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NS-NO-IP-{1..3}' => sub {
|
||||
expect qw(B02_NS_NO_IP_ADDR B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NS-NO-IP-UNDEL-1' => sub {
|
||||
fake_ns 'ns1.ns-no-ip-undel-1.basic02.xa';
|
||||
fake_ns 'ns2.ns-no-ip-undel-1.basic02.xa';
|
||||
expect qw(B02_NS_NO_IP_ADDR B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NS-NO-IP-UNDEL-2' => sub {
|
||||
fake_ns 'ns1.ns-no-ip-undel-2.basic02.xb';
|
||||
fake_ns 'ns2.ns-no-ip-undel-2.basic02.xb';
|
||||
expect qw(B02_NS_NO_IP_ADDR B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NS-NO-RESPONSE-1' => sub {
|
||||
expect qw(B02_NS_NO_RESPONSE B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'UNEXPECTED-RCODE-1' => sub {
|
||||
expect qw(B02_UNEXPECTED_RCODE B02_NO_WORKING_NS);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
70
zonemaster-engine/t/Test-connectivity.data
Normal file
70
zonemaster-engine/t/Test-connectivity.data
Normal file
File diff suppressed because one or more lines are too long
143
zonemaster-engine/t/Test-connectivity.t
Normal file
143
zonemaster-engine/t/Test-connectivity.t
Normal file
@@ -0,0 +1,143 @@
|
||||
use Test::More;
|
||||
use Test::Differences;
|
||||
use File::Slurp;
|
||||
|
||||
use List::MoreUtils qw[uniq none any];
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Connectivity} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-connectivity.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
foreach my $testcase ( qw{connectivity01 connectivity02 connectivity03 connectivity04} ) {
|
||||
$json = read_file( 't/profiles/Test-'.$testcase.'-only.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
my %testcases;
|
||||
foreach my $result ( Zonemaster::Engine->test_module( q{connectivity}, q{afnic.fr} ) ) {
|
||||
if ( $result->testcase && $result->testcase ne 'Unspecified' ) {
|
||||
$testcases{$result->testcase} = 1;
|
||||
}
|
||||
}
|
||||
eq_or_diff( [ map { lc $_ } keys %testcases ], [ $testcase ], 'expected test-case ('. $testcase .')' );
|
||||
}
|
||||
|
||||
$json = read_file( 't/profiles/Test-connectivity-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my @res;
|
||||
my %res;
|
||||
my %should_emit;
|
||||
|
||||
my $metadata = Zonemaster::Engine::Test::Connectivity->metadata();
|
||||
my $test_levels = Zonemaster::Engine::Profile->effective->{profile}->{test_levels}->{CONNECTIVITY};
|
||||
|
||||
sub check_output_connectivity_testcase {
|
||||
my ( $testcase, $res, $should_emit ) = @_;
|
||||
|
||||
return if ( $testcase !~ q/connectivity0[1-4]/ );
|
||||
|
||||
for my $key ( @{ $metadata->{$testcase} } ) {
|
||||
next if ( $test_levels->{$key} =~ q/DEBUG/ );
|
||||
if ( $should_emit->{$key} ) {
|
||||
ok( $res->{$key}, "Should emit $key" );
|
||||
} else {
|
||||
ok( !$res->{$key}, "Should NOT emit $key" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub check_output_connectivity_all {
|
||||
my ( $res, $should_emit ) = @_;
|
||||
|
||||
check_output_connectivity_testcase( 'connectivity01', $res, $should_emit );
|
||||
check_output_connectivity_testcase( 'connectivity02', $res, $should_emit );
|
||||
check_output_connectivity_testcase( 'connectivity03', $res, $should_emit );
|
||||
check_output_connectivity_testcase( 'connectivity04', $res, $should_emit );
|
||||
}
|
||||
|
||||
subtest 'All good' => sub {
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{connectivity}, q{afnic.fr} );
|
||||
ok( !$res{MODULE_ERROR}, q{Test module completes normally} );
|
||||
%should_emit = (
|
||||
IPV4_DIFFERENT_ASN => 1,
|
||||
IPV6_DIFFERENT_ASN => 1,
|
||||
CN04_IPV4_DIFFERENT_PREFIX => 1,
|
||||
CN04_IPV6_DIFFERENT_PREFIX => 1
|
||||
);
|
||||
check_output_connectivity_all( \%res, \%should_emit );
|
||||
};
|
||||
|
||||
subtest 'No IPv6 (profile with IPv4 only)' => sub {
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 1 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{connectivity}, q{afnic.fr} );
|
||||
|
||||
subtest 'UDP' => sub {
|
||||
%should_emit = (
|
||||
CN01_IPV6_DISABLED => 1
|
||||
);
|
||||
check_output_connectivity_testcase( 'connectivity01', \%res, \%should_emit );
|
||||
};
|
||||
|
||||
subtest 'TCP (no messages)' => sub {
|
||||
%should_emit = ();
|
||||
check_output_connectivity_testcase( 'connectivity02', \%res, \%should_emit );
|
||||
};
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 1 );
|
||||
};
|
||||
|
||||
subtest 'No IPv4 (profile with IPv6 only)' => sub {
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 1 );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{connectivity}, q{afnic.fr} );
|
||||
|
||||
subtest 'UDP' => sub {
|
||||
%should_emit = (
|
||||
CN01_IPV4_DISABLED => 1
|
||||
);
|
||||
check_output_connectivity_testcase( 'connectivity01', \%res, \%should_emit );
|
||||
};
|
||||
|
||||
subtest 'TCP (no messages)' => sub {
|
||||
%should_emit = ();
|
||||
check_output_connectivity_testcase( 'connectivity02', \%res, \%should_emit );
|
||||
};
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 1 );
|
||||
};
|
||||
|
||||
subtest 'No network' => sub {
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
|
||||
%res = map{ $_->tag => 1 } Zonemaster::Engine->test_module( q{connectivity}, q{afnic.fr} );
|
||||
ok( $res{NO_NETWORK}, 'IPv6 and IPv4 disabled' );
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 1 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 1 );
|
||||
};
|
||||
|
||||
# connectivity03 -- See t/Test-connectivity03.t instead.
|
||||
|
||||
# connectivity04 -- See t/Test-connectivity04.t instead.
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
119
zonemaster-engine/t/Test-connectivity03.data
Normal file
119
zonemaster-engine/t/Test-connectivity03.data
Normal file
File diff suppressed because one or more lines are too long
74
zonemaster-engine/t/Test-connectivity03.t
Normal file
74
zonemaster-engine/t/Test-connectivity03.t
Normal file
@@ -0,0 +1,74 @@
|
||||
use Test::More;
|
||||
use File::Slurp;
|
||||
use File::Basename;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Connectivity} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $checking_module = q{Connectivity};
|
||||
my $testcase = 'connectivity03';
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
sub zone_gives {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = grep { $_->tag !~ /^TEST_CASE_(END|START)$/ } Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( ( grep { $_->tag eq $gives } @res ), $zone->name->string . " gives $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
sub zone_gives_not {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = grep { $_->tag !~ /^TEST_CASE_(END|START)$/ } Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( !( grep { $_->tag eq $gives } @res ), $zone->name->string . " does not give $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
$json = qq({ "test_cases": [ "$testcase" ] });
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
###
|
||||
my $zone = Zonemaster::Engine->zone( q{001.tf} );
|
||||
zone_gives( $testcase, $zone, [qw{IPV4_ONE_ASN IPV6_ONE_ASN}] );
|
||||
zone_gives_not( $testcase, $zone, [qw{EMPTY_ASN_SET ERROR_ASN_DATABASE IPV4_DIFFERENT_ASN IPV4_SAME_ASN IPV6_DIFFERENT_ASN IPV6_SAME_ASN}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zonemaster.net} );
|
||||
zone_gives( $testcase, $zone, [qw{IPV4_DIFFERENT_ASN IPV6_DIFFERENT_ASN}] );
|
||||
zone_gives_not( $testcase, $zone, [qw{EMPTY_ASN_SET ERROR_ASN_DATABASE IPV4_SAME_ASN IPV6_SAME_ASN IPV4_ONE_ASN IPV6_ONE_ASN}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zut-root.rd.nic.fr} );
|
||||
zone_gives( $testcase, $zone, [qw{IPV4_ONE_ASN}] );
|
||||
zone_gives_not( $testcase, $zone, [qw{EMPTY_ASN_SET ERROR_ASN_DATABASE IPV4_DIFFERENT_ASN IPV4_SAME_ASN IPV6_DIFFERENT_ASN IPV6_ONE_ASN IPV6_SAME_ASN}] );
|
||||
|
||||
TODO: {
|
||||
my @missing = qw( EMPTY_ASN_SET ERROR_ASN_DATABASE IPV4_SAME_ASN IPV6_SAME_ASN );
|
||||
local $TODO = "Need to find/create zones with those errors: ";
|
||||
warn $TODO, "\n\t", join("\n\t", @missing), "\n";
|
||||
}
|
||||
###
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
61
zonemaster-engine/t/Test-connectivity04.data
Normal file
61
zonemaster-engine/t/Test-connectivity04.data
Normal file
File diff suppressed because one or more lines are too long
129
zonemaster-engine/t/Test-connectivity04.t
Normal file
129
zonemaster-engine/t/Test-connectivity04.t
Normal file
@@ -0,0 +1,129 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
###########
|
||||
# connectivity04 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Connectivity-TP/connectivity04.md
|
||||
testing_test_case 'Connectivity', 'connectivity04';
|
||||
|
||||
all_tags qw(CN04_EMPTY_PREFIX_SET
|
||||
CN04_ERROR_PREFIX_DATABASE
|
||||
CN04_IPV4_DIFFERENT_PREFIX
|
||||
CN04_IPV4_SAME_PREFIX
|
||||
CN04_IPV4_SINGLE_PREFIX
|
||||
CN04_IPV6_DIFFERENT_PREFIX
|
||||
CN04_IPV6_SAME_PREFIX
|
||||
CN04_IPV6_SINGLE_PREFIX);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/Connectivity-TP/connectivity04/hintfile.zone)
|
||||
root_hints 'root-ns1.xa' => [ qw(127.13.4.23 fda1:b2:c3::127:13:4:23) ],
|
||||
'root-ns2.xa' => [ qw(127.13.4.24 fda1:b2:c3::127:13:4:24) ];
|
||||
|
||||
# Test zone scenarios
|
||||
zone_name_template '{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
scenario 'GOOD-1' => sub {
|
||||
expect qw(CN04_IPV4_DIFFERENT_PREFIX CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-2' => sub {
|
||||
expect qw(CN04_IPV4_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'GOOD-3' => sub {
|
||||
expect qw(CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'EMPTY-PREFIX-SET-{1..2}' => sub {
|
||||
expect qw(CN04_EMPTY_PREFIX_SET);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ERROR-PREFIX-DATABASE-{1..2}' => sub {
|
||||
expect qw(CN04_ERROR_PREFIX_DATABASE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
# scenario 'ERROR-PREFIX-DATABASE-3' => tested out of order; see end of file.
|
||||
|
||||
# scenario 'ERROR-PREFIX-DATABASE-{4..5}' => do not exist
|
||||
|
||||
scenario 'ERROR-PREFIX-DATABASE-6' => sub {
|
||||
expect qw(CN04_IPV4_DIFFERENT_PREFIX CN04_IPV6_DIFFERENT_PREFIX CN04_ERROR_PREFIX_DATABASE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ERROR-PREFIX-DATABASE-{7..8}' => sub {
|
||||
expect qw(CN04_ERROR_PREFIX_DATABASE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'HAS-NON-ASN-TXT-1' => sub {
|
||||
expect qw(CN04_IPV4_DIFFERENT_PREFIX CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'HAS-NON-ASN-TXT-2' => sub {
|
||||
expect qw(CN04_EMPTY_PREFIX_SET);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV4-ONE-PREFIX-1' => sub {
|
||||
expect qw(CN04_IPV4_SAME_PREFIX CN04_IPV4_SINGLE_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV4-TWO-PREFIXES-1' => sub {
|
||||
expect qw(CN04_IPV4_SAME_PREFIX CN04_IPV4_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV6-ONE-PREFIX-1' => sub {
|
||||
expect qw(CN04_IPV6_SAME_PREFIX CN04_IPV6_SINGLE_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV6-TWO-PREFIXES-1' => sub {
|
||||
expect qw(CN04_IPV6_SAME_PREFIX CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV4-SINGLE-NS-1' => sub {
|
||||
expect qw(CN04_IPV4_SINGLE_PREFIX CN04_IPV4_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV6-SINGLE-NS-1' => sub {
|
||||
expect qw(CN04_IPV6_SINGLE_PREFIX CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'DOUBLE-PREFIX-1' => sub {
|
||||
expect qw(CN04_IPV4_DIFFERENT_PREFIX CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'DOUBLE-PREFIX-2' => sub {
|
||||
expect qw(CN04_IPV4_DIFFERENT_PREFIX CN04_IPV6_DIFFERENT_PREFIX);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
# The scenario below needs to be tested out of order, and with an empty cache,
|
||||
# because a previously cached non-response from the ASN lookup zone (which was
|
||||
# intentional) causes negative side effects when testing this scenario.
|
||||
|
||||
clear_cache;
|
||||
|
||||
scenario 'ERROR-PREFIX-DATABASE-3' => sub {
|
||||
expect qw(CN04_ERROR_PREFIX_DATABASE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
115
zonemaster-engine/t/Test-consistency.data
Normal file
115
zonemaster-engine/t/Test-consistency.data
Normal file
File diff suppressed because one or more lines are too long
141
zonemaster-engine/t/Test-consistency.t
Normal file
141
zonemaster-engine/t/Test-consistency.t
Normal file
@@ -0,0 +1,141 @@
|
||||
use Test::More;
|
||||
use Test::Differences;
|
||||
use File::Slurp;
|
||||
|
||||
use List::MoreUtils qw[uniq none any];
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Consistency} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-consistency.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
foreach my $testcase ( qw{consistency01 consistency02 consistency03 consistency04} ) {
|
||||
$json = read_file( 't/profiles/Test-'.$testcase.'-only.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
my %testcases;
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
foreach my $result ( Zonemaster::Engine->test_module( q{consistency}, q{afnic.fr} ) ) {
|
||||
if ( $result->testcase && $result->testcase ne 'Unspecified' ) {
|
||||
$testcases{$result->testcase} = 1;
|
||||
}
|
||||
}
|
||||
eq_or_diff( [ map { lc $_ } keys %testcases ], [ $testcase ], 'expected test-case ('. $testcase .')' );
|
||||
}
|
||||
|
||||
$json = read_file( 't/profiles/Test-consistency-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my @res;
|
||||
my %res;
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{consistency}, q{consistency01.zut-root.rd.nic.fr} );
|
||||
ok( $res{SOA_SERIAL_VARIATION}, q{Big variation between multiple SOA serials} );
|
||||
ok( $res{MULTIPLE_SOA_SERIALS}, q{Multiple SOA serials} );
|
||||
ok( $res{SOA_SERIAL}, q{SOA serial details} );
|
||||
ok( $res{ONE_NS_SET}, q{A unique NS set was seen} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{consistency}, q{consistency02.zut-root.rd.nic.fr} );
|
||||
ok( $res{MULTIPLE_SOA_RNAMES}, q{Multiple SOA rname} );
|
||||
ok( $res{SOA_RNAME}, q{SOA rname details} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{consistency}, q{consistency03.zut-root.rd.nic.fr} );
|
||||
ok( $res{MULTIPLE_SOA_TIME_PARAMETER_SET}, q{Multiple SOA time parameters} );
|
||||
ok( $res{SOA_TIME_PARAMETER_SET}, q{SOA time parameters details} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{consistency}, q{consistency04.zut-root.rd.nic.fr} );
|
||||
ok( $res{MULTIPLE_NS_SET}, q{Saw several NS set} );
|
||||
ok( $res{NS_SET}, q{NS set details} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{consistency}, q{afnic.fr} );
|
||||
ok( $res{ONE_SOA_SERIAL}, q{One SOA serial} );
|
||||
ok( $res{ONE_SOA_RNAME}, q{One SOA rname} );
|
||||
ok( $res{ONE_SOA_TIME_PARAMETER_SET}, q{One SOA time parameters set} );
|
||||
ok( $res{ADDRESSES_MATCH}, q{Addresses IP match} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency01', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
ok( ( any { $_->tag eq 'NO_NETWORK' } @res ), 'IPv6 and IPv4 disabled' );
|
||||
ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'No network' );
|
||||
ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'No network' );
|
||||
@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency02', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
ok( ( any { $_->tag eq 'NO_NETWORK' } @res ), 'IPv6 and IPv4 disabled' );
|
||||
ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'No network' );
|
||||
ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'No network' );
|
||||
@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency03', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
ok( ( any { $_->tag eq 'NO_NETWORK' } @res ), 'IPv6 and IPv4 disabled' );
|
||||
ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'No network' );
|
||||
ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'No network' );
|
||||
@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency04', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
ok( ( any { $_->tag eq 'NO_NETWORK' } @res ), 'IPv6 and IPv4 disabled' );
|
||||
ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'No network' );
|
||||
ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'No network' );
|
||||
|
||||
#Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 1 );
|
||||
#Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
#@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency01', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
#ok( ( any { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 disabled' );
|
||||
#ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
#@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency02', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
#ok( ( any { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 disabled' );
|
||||
#ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
#@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency03', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
#ok( ( any { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 disabled' );
|
||||
#ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
#@res = Zonemaster::Engine->test_method( 'Consistency', 'consistency04', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
#ok( ( any { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 disabled' );
|
||||
#ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
#
|
||||
#if ( Zonemaster::Engine::Util::supports_ipv6() ) {
|
||||
#
|
||||
# Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
# Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 1 );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency01', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( any { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 disabled' );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency02', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( any { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 disabled' );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency03', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( any { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 disabled' );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency04', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( any { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 disabled' );
|
||||
#
|
||||
# Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 1 );
|
||||
# Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 1 );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency01', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency02', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency03', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
# @res = Zonemaster::Engine->test_method( 'Consistency', 'consistency04', Zonemaster::Engine->zone( q{afnic.fr} ) );
|
||||
# ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'IPv6 not disabled' );
|
||||
# ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'IPv4 not disabled' );
|
||||
#
|
||||
#}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
|
||||
done_testing;
|
||||
118
zonemaster-engine/t/Test-consistency05.data
Normal file
118
zonemaster-engine/t/Test-consistency05.data
Normal file
File diff suppressed because one or more lines are too long
130
zonemaster-engine/t/Test-consistency05.t
Normal file
130
zonemaster-engine/t/Test-consistency05.t
Normal file
@@ -0,0 +1,130 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
###########
|
||||
# consistency05 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Consistency-TP/consistency05.md
|
||||
|
||||
testing_test_case 'Consistency', 'consistency05';
|
||||
|
||||
all_tags qw(ADDRESSES_MATCH
|
||||
IN_BAILIWICK_ADDR_MISMATCH
|
||||
OUT_OF_BAILIWICK_ADDR_MISMATCH
|
||||
EXTRA_ADDRESS_CHILD
|
||||
CHILD_ZONE_LAME
|
||||
CHILD_NS_FAILED
|
||||
NO_RESPONSE);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
root_hints 'ns1' => [ qw(127.1.0.1 fda1:b2:c3::127:1:0:1) ],
|
||||
'ns2' => [ qw(127.1.0.2 fda1:b2:c3::127:1:0:2) ];
|
||||
|
||||
# Test zone scenarios
|
||||
zone_name_template '{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
scenario 'ADDRESSES-MATCH-{1..2}' => sub {
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDRESSES-MATCH-{3..4}' => sub {
|
||||
expect qw(ADDRESSES_MATCH CHILD_NS_FAILED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDRESSES-MATCH-5' => sub {
|
||||
expect qw(ADDRESSES_MATCH NO_RESPONSE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDRESSES-MATCH-6' => sub {
|
||||
zone 'child.{SCENARIO}.{TESTCASE}.xa';
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDRESSES-MATCH-7' => sub {
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDR-MATCH-DEL-UNDEL-1' => sub {
|
||||
fake_ns 'ns3.addr-match-del-undel-1.consistency05.xa' => '127.14.5.33', 'fda1:b2:c3:0:127:14:5:33';
|
||||
fake_ns 'ns4.addr-match-del-undel-1.consistency05.xa' => '127.14.5.34', 'fda1:b2:c3:0:127:14:5:34';
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDR-MATCH-DEL-UNDEL-2' => sub {
|
||||
fake_ns 'ns3.addr-match-del-undel-2.consistency05.xb';
|
||||
fake_ns 'ns4.addr-match-del-undel-2.consistency05.xb';
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDR-MATCH-NO-DEL-UNDEL-1' => sub {
|
||||
fake_ns 'ns1.addr-match-no-del-undel-1.consistency05.xa' => '127.14.5.31', 'fda1:b2:c3:0:127:14:5:31';
|
||||
fake_ns 'ns2.addr-match-no-del-undel-1.consistency05.xa' => '127.14.5.32', 'fda1:b2:c3:0:127:14:5:32';
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ADDR-MATCH-NO-DEL-UNDEL-2' => sub {
|
||||
fake_ns 'ns3.addr-match-no-del-undel-2.consistency05.xb';
|
||||
fake_ns 'ns4.addr-match-no-del-undel-2.consistency05.xb';
|
||||
expect 'ADDRESSES_MATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHILD-ZONE-LAME-1' => sub {
|
||||
todo 'see https://github.com/zonemaster/zonemaster-engine/issues/1301';
|
||||
|
||||
expect qw(CHILD_ZONE_LAME NO_RESPONSE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'CHILD-ZONE-LAME-2' => sub {
|
||||
expect qw(CHILD_ZONE_LAME CHILD_NS_FAILED);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IB-ADDR-MISMATCH-1' => sub {
|
||||
expect qw(IN_BAILIWICK_ADDR_MISMATCH EXTRA_ADDRESS_CHILD);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IB-ADDR-MISMATCH-2' => sub {
|
||||
expect 'IN_BAILIWICK_ADDR_MISMATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IB-ADDR-MISMATCH-3' => sub {
|
||||
todo 'see https://github.com/zonemaster/zonemaster-engine/issues/1301';
|
||||
|
||||
expect qw(IN_BAILIWICK_ADDR_MISMATCH NO_RESPONSE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IB-ADDR-MISMATCH-4' => sub {
|
||||
todo 'see https://github.com/zonemaster/zonemaster-engine/issues/1349';
|
||||
|
||||
expect 'IN_BAILIWICK_ADDR_MISMATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'OOB-ADDR-MISMATCH' => sub {
|
||||
zone 'child.{SCENARIO}.{TESTCASE}.xa';
|
||||
expect 'OUT_OF_BAILIWICK_ADDR_MISMATCH';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'EXTRA-ADDRESS-CHILD' => sub {
|
||||
expect 'EXTRA_ADDRESS_CHILD';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
60
zonemaster-engine/t/Test-consistency06.data
Normal file
60
zonemaster-engine/t/Test-consistency06.data
Normal file
File diff suppressed because one or more lines are too long
80
zonemaster-engine/t/Test-consistency06.t
Normal file
80
zonemaster-engine/t/Test-consistency06.t
Normal file
@@ -0,0 +1,80 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
###########
|
||||
# consistency06 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Consistency-TP/consistency06.md
|
||||
|
||||
testing_test_case 'Consistency', 'consistency06';
|
||||
|
||||
all_tags qw(ONE_SOA_MNAME
|
||||
NO_RESPONSE
|
||||
NO_RESPONSE_SOA_QUERY
|
||||
MULTIPLE_SOA_MNAMES);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
root_hints 'ns1' => [ qw(127.1.0.1 fda1:b2:c3::127:1:0:1) ],
|
||||
'ns2' => [ qw(127.1.0.2 fda1:b2:c3::127:1:0:2) ];
|
||||
|
||||
zone_name_template '{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
scenario 'ONE-SOA-MNAME-1' => sub {
|
||||
expect 'ONE_SOA_MNAME';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ONE-SOA-MNAME-2' => sub {
|
||||
expect qw(ONE_SOA_MNAME NO_RESPONSE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ONE-SOA-MNAME-3' => sub {
|
||||
expect qw(ONE_SOA_MNAME NO_RESPONSE_SOA_QUERY);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ONE-SOA-MNAME-4' => sub {
|
||||
todo 'see https://github.com/zonemaster/zonemaster-engine/issues/1300';
|
||||
|
||||
expect qw(ONE_SOA_MNAME NO_RESPONSE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MULTIPLE-SOA-MNAMES-1' => sub {
|
||||
expect 'MULTIPLE_SOA_MNAMES';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MULTIPLE-SOA-MNAMES-2' => sub {
|
||||
expect qw(MULTIPLE_SOA_MNAMES NO_RESPONSE);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MULT-SOA-MNAMES-NO-DEL-UNDEL-1' => sub {
|
||||
fake_ns 'ns1.mult-soa-mnames-no-del-undel-1.consistency06.xa' => '127.14.6.31', 'fda1:b2:c3:0:127:14:6:31';
|
||||
fake_ns 'ns2.mult-soa-mnames-no-del-undel-1.consistency06.xa' => '127.14.6.32', 'fda1:b2:c3:0:127:14:6:32';
|
||||
|
||||
expect 'MULTIPLE_SOA_MNAMES';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MULT-SOA-MNAMES-NO-DEL-UNDEL-2' => sub {
|
||||
fake_ns 'ns3.mult-soa-mnames-no-del-undel-2.consistency06.xb';
|
||||
fake_ns 'ns4.mult-soa-mnames-no-del-undel-2.consistency06.xb';
|
||||
|
||||
expect 'MULTIPLE_SOA_MNAMES';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-RESPONSE' => sub {
|
||||
todo 'see https://github.com/zonemaster/zonemaster-engine/issues/1300';
|
||||
|
||||
expect 'NO_RESPONSE';
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
122
zonemaster-engine/t/Test-delegation.data
Normal file
122
zonemaster-engine/t/Test-delegation.data
Normal file
File diff suppressed because one or more lines are too long
71
zonemaster-engine/t/Test-delegation.t
Normal file
71
zonemaster-engine/t/Test-delegation.t
Normal file
@@ -0,0 +1,71 @@
|
||||
use Test::More;
|
||||
use File::Slurp;
|
||||
|
||||
use List::MoreUtils qw[uniq none any];
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Delegation} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-delegation.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
$json = read_file( 't/profiles/Test-delegation-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my @res;
|
||||
my %res;
|
||||
|
||||
my $iis = Zonemaster::Engine->zone( q{iis.se} );
|
||||
%res = map { $_->tag => $_ } Zonemaster::Engine::Test::Delegation->all( $iis );
|
||||
ok( $res{NAMES_MATCH}, q{NAMES_MATCH} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{delegation}, q{crystone.se} );
|
||||
ok( $res{EXTRA_NAME_PARENT}, q{EXTRA_NAME_PARENT} );
|
||||
ok( $res{EXTRA_NAME_CHILD}, q{EXTRA_NAME_CHILD} );
|
||||
ok( $res{TOTAL_NAME_MISMATCH}, q{TOTAL_NAME_MISMATCH} );
|
||||
ok( $res{NO_NS_CNAME}, q{NO_NS_CNAME} );
|
||||
ok( $res{SOA_EXISTS}, q{SOA_EXISTS} );
|
||||
ok( $res{ARE_AUTHORITATIVE}, q{ARE_AUTHORITATIVE} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{delegation}, q{woli.se} );
|
||||
ok( $res{SOA_NOT_EXISTS}, q{SOA_NOT_EXISTS} );
|
||||
|
||||
TODO: {
|
||||
local $TODO = "Need to find domain name with that error";
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{delegation}, q{elsine.se} );
|
||||
ok( $res{IS_NOT_AUTHORITATIVE}, q{IS_NOT_AUTHORITATIVE} );
|
||||
|
||||
ok( $res{NS_IS_CNAME}, q{NS_IS_CNAME} );
|
||||
|
||||
}
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
@res = Zonemaster::Engine->test_method( 'Delegation', 'delegation04', Zonemaster::Engine->zone( q{iis.se} ) );
|
||||
ok( ( any { $_->tag eq 'NO_NETWORK' } @res ), 'IPv6 and IPv4 disabled' );
|
||||
ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'No network' );
|
||||
ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'No network' );
|
||||
@res = Zonemaster::Engine->test_method( 'Delegation', 'delegation06', Zonemaster::Engine->zone( q{iis.se} ) );
|
||||
ok( ( any { $_->tag eq 'NO_NETWORK' } @res ), 'IPv6 and IPv4 disabled' );
|
||||
ok( ( none { $_->tag eq 'IPV6_DISABLED' } @res ), 'No network' );
|
||||
ok( ( none { $_->tag eq 'IPV4_DISABLED' } @res ), 'No network' );
|
||||
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
|
||||
done_testing;
|
||||
64
zonemaster-engine/t/Test-delegation01.data
Normal file
64
zonemaster-engine/t/Test-delegation01.data
Normal file
File diff suppressed because one or more lines are too long
137
zonemaster-engine/t/Test-delegation01.t
Normal file
137
zonemaster-engine/t/Test-delegation01.t
Normal file
@@ -0,0 +1,137 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
use TestUtil::DSL;
|
||||
|
||||
###########
|
||||
# Delegation01 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Delegation-TP/delegation01.md
|
||||
testing_test_case 'Delegation', 'delegation01';
|
||||
|
||||
all_tags qw(ENOUGH_IPV4_NS_CHILD
|
||||
ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_IPV6_NS_CHILD
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL
|
||||
NOT_ENOUGH_IPV4_NS_CHILD
|
||||
NOT_ENOUGH_IPV4_NS_DEL
|
||||
NOT_ENOUGH_IPV6_NS_CHILD
|
||||
NOT_ENOUGH_IPV6_NS_DEL
|
||||
NOT_ENOUGH_NS_CHILD
|
||||
NOT_ENOUGH_NS_DEL
|
||||
NO_IPV4_NS_CHILD
|
||||
NO_IPV4_NS_DEL
|
||||
NO_IPV6_NS_CHILD
|
||||
NO_IPV6_NS_DEL);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/Delegation-TP/delegation01/hintfile.zone)
|
||||
root_hints 'root-ns1.xa' => [ qw(127.16.1.27 fda1:b2:c3::127:16:1:27) ],
|
||||
'root-ns2.xa' => [ qw(127.16.1.28 fda1:b2:c3::127:16:1:28) ];
|
||||
|
||||
zone_name_template '{SCENARIO}.{TESTCASE}.xa';
|
||||
|
||||
# Test zone scenarios
|
||||
scenario 'ENOUGH-{1..3}' => sub {
|
||||
expect qw(ENOUGH_IPV4_NS_CHILD
|
||||
ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_IPV6_NS_CHILD
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ENOUGH-DEL-NOT-CHILD' => sub {
|
||||
todo; # FIXME: why?
|
||||
|
||||
expect qw(ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_DEL
|
||||
NOT_ENOUGH_IPV4_NS_CHILD
|
||||
NOT_ENOUGH_IPV6_NS_CHILD
|
||||
NOT_ENOUGH_NS_CHILD);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'ENOUGH-CHILD-NOT-DEL' => sub {
|
||||
expect qw(ENOUGH_IPV4_NS_CHILD
|
||||
ENOUGH_IPV6_NS_CHILD
|
||||
ENOUGH_NS_CHILD
|
||||
NOT_ENOUGH_IPV4_NS_DEL
|
||||
NOT_ENOUGH_IPV6_NS_DEL
|
||||
NOT_ENOUGH_NS_DEL);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV6-AND-DEL-OK-NO-IPV4-CHILD' => sub {
|
||||
todo; # FIXME: why?
|
||||
|
||||
expect qw(ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_IPV6_NS_CHILD
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL
|
||||
NO_IPV4_NS_CHILD);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'IPV4-AND-DEL-OK-NO-IPV6-CHILD' => sub {
|
||||
todo; # FIXME: why?
|
||||
|
||||
expect qw(ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_IPV4_NS_CHILD
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL
|
||||
NO_IPV6_NS_CHILD);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-IPV4-{1..3}' => sub {
|
||||
expect qw(ENOUGH_IPV6_NS_CHILD
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL
|
||||
NO_IPV4_NS_CHILD
|
||||
NO_IPV4_NS_DEL);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'NO-IPV6-{1..3}' => sub {
|
||||
expect qw(ENOUGH_IPV4_NS_CHILD
|
||||
ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL
|
||||
NO_IPV6_NS_CHILD
|
||||
NO_IPV6_NS_DEL);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MISMATCH-DELEGATION-CHILD-1' => sub {
|
||||
todo; # FIXME: why?
|
||||
|
||||
expect qw(ENOUGH_IPV4_NS_CHILD
|
||||
NOT_ENOUGH_IPV4_NS_DEL
|
||||
ENOUGH_IPV6_NS_CHILD
|
||||
NOT_ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
scenario 'MISMATCH-DELEGATION-CHILD-2' => sub {
|
||||
todo; # FIXME: why?
|
||||
|
||||
expect qw(NOT_ENOUGH_IPV4_NS_CHILD
|
||||
ENOUGH_IPV4_NS_DEL
|
||||
NOT_ENOUGH_IPV6_NS_CHILD
|
||||
ENOUGH_IPV6_NS_DEL
|
||||
ENOUGH_NS_CHILD
|
||||
ENOUGH_NS_DEL);
|
||||
forbid_others;
|
||||
};
|
||||
|
||||
no_more_scenarios;
|
||||
63
zonemaster-engine/t/Test-delegation02.data
Normal file
63
zonemaster-engine/t/Test-delegation02.data
Normal file
File diff suppressed because one or more lines are too long
170
zonemaster-engine/t/Test-delegation02.t
Normal file
170
zonemaster-engine/t/Test-delegation02.t
Normal file
@@ -0,0 +1,170 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Delegation} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# Delegation02 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Delegation-TP/delegation02.md
|
||||
my $test_module = 'Delegation';
|
||||
my $test_case = 'delegation02';
|
||||
my @all_tags = qw(
|
||||
DEL_DISTINCT_NS_IP
|
||||
CHILD_DISTINCT_NS_IP
|
||||
DEL_NS_SAME_IP
|
||||
CHILD_NS_SAME_IP
|
||||
);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/Delegation-TP/delegation02/hintfile.zone)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'root-ns1.xa' => [ '127.16.2.27', 'fda1:b2:c3::127:16:2:27' ],
|
||||
'root-ns2.xa' => [ '127.16.2.28', 'fda1:b2:c3::127:16:2:28' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'ALL-DISTINCT-1' =>
|
||||
[
|
||||
1,
|
||||
q(all-distinct-1.delegation02.xa),
|
||||
[ qw( DEL_DISTINCT_NS_IP CHILD_DISTINCT_NS_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALL-DISTINCT-2' =>
|
||||
[
|
||||
1,
|
||||
q(all-distinct-2.delegation02.xa),
|
||||
[ qw( DEL_DISTINCT_NS_IP CHILD_DISTINCT_NS_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALL-DISTINCT-3' =>
|
||||
[
|
||||
1,
|
||||
q(all-distinct-3.delegation02.xa),
|
||||
[ qw( DEL_DISTINCT_NS_IP CHILD_DISTINCT_NS_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'DEL-NON-DISTINCT' =>
|
||||
[
|
||||
0,
|
||||
q(del-non-distinct.delegation02.xa),
|
||||
[ qw( DEL_NS_SAME_IP CHILD_DISTINCT_NS_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'DEL-NON-DISTINCT-UND' =>
|
||||
[
|
||||
1,
|
||||
q(del-non-distinct.delegation02.xa),
|
||||
[ qw( DEL_NS_SAME_IP CHILD_DISTINCT_NS_IP ) ],
|
||||
undef,
|
||||
[ qw(
|
||||
ns1a.del-non-distinct-und.delegation02.xa/127.16.2.31
|
||||
ns1a.del-non-distinct-und.delegation02.xa/fda1:b2:c3:0:127:16:2:31
|
||||
ns1b.del-non-distinct-und.delegation02.xa/127.16.2.31
|
||||
ns1b.del-non-distinct-und.delegation02.xa/fda1:b2:c3:0:127:16:2:31
|
||||
)
|
||||
],
|
||||
[],
|
||||
],
|
||||
'CHILD-NON-DISTINCT' =>
|
||||
[
|
||||
0,
|
||||
q(child-non-distinct.delegation02.xa),
|
||||
[ qw( DEL_DISTINCT_NS_IP CHILD_NS_SAME_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'CHILD-NON-DISTINCT-UND' =>
|
||||
[
|
||||
1,
|
||||
q(child-non-distinct.delegation02.xa),
|
||||
[ qw( DEL_DISTINCT_NS_IP CHILD_NS_SAME_IP ) ],
|
||||
undef,
|
||||
[ qw(
|
||||
ns1a.child-non-distinct-und.delegation02.xa/127.16.2.31
|
||||
ns1a.child-non-distinct-und.delegation02.xa/fda1:b2:c3:0:127:16:2:31
|
||||
ns1b.child-non-distinct-und.delegation02.xa/127.16.2.32
|
||||
ns1b.child-non-distinct-und.delegation02.xa/fda1:b2:c3:0:127:16:2:32
|
||||
)
|
||||
],
|
||||
[],
|
||||
],
|
||||
'NON-DISTINCT-1' =>
|
||||
[
|
||||
1,
|
||||
q(non-distinct-1.delegation02.xa),
|
||||
[ qw( DEL_NS_SAME_IP CHILD_NS_SAME_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NON-DISTINCT-2' =>
|
||||
[
|
||||
1,
|
||||
q(non-distinct-2.delegation02.xa),
|
||||
[ qw( DEL_NS_SAME_IP CHILD_NS_SAME_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NON-DISTINCT-3' =>
|
||||
[
|
||||
1,
|
||||
q(non-distinct-3.delegation02.xa),
|
||||
[ qw( DEL_NS_SAME_IP CHILD_NS_SAME_IP ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
28
zonemaster-engine/t/Test-delegation03.data
Normal file
28
zonemaster-engine/t/Test-delegation03.data
Normal file
File diff suppressed because one or more lines are too long
103
zonemaster-engine/t/Test-delegation03.t
Normal file
103
zonemaster-engine/t/Test-delegation03.t
Normal file
@@ -0,0 +1,103 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Delegation} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# Delegation03 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Delegation-TP/delegation03.md
|
||||
my $test_module = 'Delegation';
|
||||
my $test_case = 'delegation03';
|
||||
my @all_tags = qw(
|
||||
REFERRAL_SIZE_OK
|
||||
REFERRAL_SIZE_TOO_LARGE
|
||||
);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/Delegation-TP/delegation03/hintfile.zone)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'root-ns1.xa' => [ '127.16.3.27', 'fda1:b2:c3::127:16:3:27' ],
|
||||
'root-ns2.xa' => [ '127.16.3.28', 'fda1:b2:c3::127:16:3:28' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'REFERRAL-SIZE-OK-1' =>
|
||||
[
|
||||
1,
|
||||
q(referral-size-ok-1.delegation03.xa.),
|
||||
[ qw( REFERRAL_SIZE_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'REFERRAL-SIZE-OK-2' =>
|
||||
[
|
||||
1,
|
||||
q(referral-size-ok-2.delegation03.xa.),
|
||||
[ qw( REFERRAL_SIZE_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'REFERRAL-SIZE-TOO-LARGE-1' =>
|
||||
[
|
||||
1,
|
||||
q(referral-size-too-large-1.delegation03.xa),
|
||||
[ qw( REFERRAL_SIZE_TOO_LARGE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'REFERRAL-SIZE-TOO-LARGE-2' =>
|
||||
[
|
||||
1,
|
||||
q(referral-size-too-large-2.delegation03.xa),
|
||||
[ qw( REFERRAL_SIZE_TOO_LARGE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
|
||||
155
zonemaster-engine/t/Test-dnssec-more.data
Normal file
155
zonemaster-engine/t/Test-dnssec-more.data
Normal file
File diff suppressed because one or more lines are too long
80
zonemaster-engine/t/Test-dnssec-more.t
Normal file
80
zonemaster-engine/t/Test-dnssec-more.t
Normal file
@@ -0,0 +1,80 @@
|
||||
use Test::More;
|
||||
use File::Slurp;
|
||||
|
||||
BEGIN {
|
||||
use_ok( 'Zonemaster::Engine' );
|
||||
use_ok( 'Zonemaster::Engine::Test::DNSSEC' );
|
||||
}
|
||||
|
||||
my $checking_module = q{DNSSEC};
|
||||
|
||||
sub zone_gives {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( ( grep { $_->tag eq $gives } @res ), $zone->name->string . " gives $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
sub zone_gives_not {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( !( grep { $_->tag eq $gives } @res ), $zone->name->string . " does not give $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
my $datafile = 't/Test-dnssec-more.data';
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die "Stored data file missing" if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
$json = read_file( 't/profiles/Test-dnssec-more-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my $zone;
|
||||
my @res;
|
||||
my %tag;
|
||||
|
||||
SKIP: {
|
||||
skip "dnssec01 tests are now in a separate file.", 1;
|
||||
@res = Zonemaster::Engine->test_module( 'DNSSEC', 'loopia.se' );
|
||||
%tag = map { $_->tag => 1 } @res;
|
||||
ok( $tag{NO_RESPONSE_DS}, 'NO_RESPONSE_DS' );
|
||||
}
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'rsa4096.nxdomain.se' );
|
||||
zone_gives_not( 'dnssec03', $zone, ['TOO_MANY_ITERATIONS'] );
|
||||
|
||||
# dnssec10
|
||||
SKIP: {
|
||||
skip "Need to configure another zone for this test cases.", 3;
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'wwwyahoo.se' );
|
||||
zone_gives( 'dnssec10', $zone, ['INVALID_NAME_RCODE']);
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'denki.se' );
|
||||
zone_gives( 'dnssec10', $zone, ['NSEC3_COVERS_NOT']);
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'retailacademicsconsulting.se' );
|
||||
zone_gives( 'dnssec10', $zone, ['NSEC3_SIG_VERIFY_ERROR']);
|
||||
}
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'y.nu' );
|
||||
zone_gives_not( 'dnssec03', $zone, ['TOO_MANY_ITERATIONS'] );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
115
zonemaster-engine/t/Test-dnssec.data
Normal file
115
zonemaster-engine/t/Test-dnssec.data
Normal file
File diff suppressed because one or more lines are too long
386
zonemaster-engine/t/Test-dnssec.t
Normal file
386
zonemaster-engine/t/Test-dnssec.t
Normal file
@@ -0,0 +1,386 @@
|
||||
use Test::More;
|
||||
use Test::Differences;
|
||||
use File::Slurp;
|
||||
|
||||
use List::MoreUtils qw[uniq none any];
|
||||
|
||||
use Zonemaster::Engine;
|
||||
use Zonemaster::Engine::Nameserver;
|
||||
use Zonemaster::Engine::Profile;
|
||||
|
||||
use strict;
|
||||
|
||||
BEGIN {
|
||||
use_ok( 'Zonemaster::Engine' );
|
||||
use_ok( 'Zonemaster::Engine::Test::DNSSEC' );
|
||||
}
|
||||
|
||||
my $checking_module = q{DNSSEC};
|
||||
|
||||
use Data::Dumper;
|
||||
|
||||
sub zone_gives {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = grep { $_->tag !~ /^TEST_CASE_(END|START)$/ } Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( ( grep { $_->tag eq $gives } @res ), $zone->name->string . " gives $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
sub zone_gives_not {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = grep { $_->tag !~ /^TEST_CASE_(END|START)$/ } Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( !( grep { $_->tag eq $gives } @res ), $zone->name->string . " does not give $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
my $datafile = 't/Test-dnssec.data';
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die "Stored data file missing" if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
# Find a way for dnssec06 which has a dependence...
|
||||
my ($json, $profile_test);
|
||||
foreach my $testcase ( qw{dnssec01 dnssec02 dnssec04 dnssec05 dnssec07 dnssec08 dnssec09 dnssec10 dnssec11 dnssec13 dnssec14 dnssec15 dnssec17 dnssec18} ) {
|
||||
$json = read_file( 't/profiles/Test-'.$testcase.'-only.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
my %testcases;
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
foreach my $result ( Zonemaster::Engine->test_module( q{dnssec}, q{se} ) ) {
|
||||
if ( $result->testcase && $result->testcase ne 'Unspecified' ) {
|
||||
$testcases{$result->testcase} = 1;
|
||||
}
|
||||
}
|
||||
eq_or_diff( [ map { lc $_ } keys %testcases ], [ $testcase ], 'expected test-case ('. $testcase .')' );
|
||||
}
|
||||
|
||||
$json = read_file( 't/profiles/Test-dnssec-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( 'nic.se' );
|
||||
|
||||
my @res = Zonemaster::Engine->test_method( 'DNSSEC', 'dnssec04', $zone );
|
||||
my %tag = map { $_->tag => 1 } @res;
|
||||
ok( ( $tag{DURATION_OK} || $tag{REMAINING_SHORT} || $tag{RRSIG_EXPIRED} ), 'DURATION_OK (sort of)' );
|
||||
|
||||
my $zone4 = Zonemaster::Engine->zone( 'nic.fr' );
|
||||
zone_gives( 'dnssec06', $zone, [q{EXTRA_PROCESSING_OK}] );
|
||||
|
||||
###########
|
||||
# dnssec01 -- See t/Test-dnssec01.t instead.
|
||||
###########
|
||||
|
||||
###########
|
||||
# dnssec02
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec02-dnskey-ksk-not-sep.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec02', $zone, [qw{DS02_DNSKEY_NOT_SEP}] );
|
||||
zone_gives_not( 'dnssec02', $zone, [qw{DS02_ALGO_NOT_SUPPORTED_BY_ZM DS02_DNSKEY_NOT_FOR_ZONE_SIGNING DS02_NO_DNSKEY_FOR_DS DS02_NO_MATCHING_DNSKEY_RRSIG DS02_NO_MATCH_DS_DNSKEY DS02_RRSIG_NOT_VALID_BY_DNSKEY DS02_NO_VALID_DNSKEY_FOR_ANY_DS DS02_DNSKEY_NOT_SIGNED_BY_ANY_DS}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec02-no-common-keytags.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec02', $zone, [qw{DS02_NO_DNSKEY_FOR_DS DS02_NO_VALID_DNSKEY_FOR_ANY_DS}] );
|
||||
zone_gives_not( 'dnssec02', $zone, [qw{DS02_ALGO_NOT_SUPPORTED_BY_ZM DS02_DNSKEY_NOT_FOR_ZONE_SIGNING DS02_DNSKEY_NOT_SEP DS02_NO_MATCHING_DNSKEY_RRSIG DS02_NO_MATCH_DS_DNSKEY DS02_RRSIG_NOT_VALID_BY_DNSKEY DS02_DNSKEY_NOT_SIGNED_BY_ANY_DS}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-dnskey-not-signed.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec02', $zone, [qw{DS02_NO_MATCHING_DNSKEY_RRSIG DS02_DNSKEY_NOT_SIGNED_BY_ANY_DS}] );
|
||||
zone_gives_not( 'dnssec02', $zone, [qw{DS02_ALGO_NOT_SUPPORTED_BY_ZM DS02_DNSKEY_NOT_FOR_ZONE_SIGNING DS02_DNSKEY_NOT_SEP DS02_NO_DNSKEY_FOR_DS DS02_NO_MATCH_DS_DNSKEY DS02_RRSIG_NOT_VALID_BY_DNSKEY DS02_NO_VALID_DNSKEY_FOR_ANY_DS}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec02-ds-does-not-match-dnskey.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec02', $zone, [qw{DS02_NO_MATCH_DS_DNSKEY}] );
|
||||
zone_gives_not( 'dnssec02', $zone, [qw{DS02_ALGO_NOT_SUPPORTED_BY_ZM DS02_DNSKEY_NOT_FOR_ZONE_SIGNING DS02_DNSKEY_NOT_SEP DS02_NO_DNSKEY_FOR_DS DS02_NO_MATCHING_DNSKEY_RRSIG DS02_RRSIG_NOT_VALID_BY_DNSKEY DS02_NO_VALID_DNSKEY_FOR_ANY_DS DS02_DNSKEY_NOT_SIGNED_BY_ANY_DS}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-dnskey-signature-not-ok-broken.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec02', $zone, [qw{DS02_RRSIG_NOT_VALID_BY_DNSKEY DS02_NO_MATCHING_DNSKEY_RRSIG DS02_DNSKEY_NOT_SIGNED_BY_ANY_DS}] );
|
||||
zone_gives_not( 'dnssec02', $zone, [qw{DS02_ALGO_NOT_SUPPORTED_BY_ZM DS02_DNSKEY_NOT_FOR_ZONE_SIGNING DS02_DNSKEY_NOT_SEP DS02_NO_DNSKEY_FOR_DS DS02_NO_MATCH_DS_DNSKEY DS02_NO_VALID_DNSKEY_FOR_ANY_DS}] );
|
||||
|
||||
###########
|
||||
# dnssec04
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec04-duration-long.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec04', $zone, [q{DURATION_LONG}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec04-remaining-long.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec04', $zone, [q{REMAINING_LONG}] );
|
||||
|
||||
###########
|
||||
# dnssec05 -- See t/Test-dnssec05.t instead.
|
||||
###########
|
||||
|
||||
###########
|
||||
# dnssec06
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec06-extra-processing-broken-1.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec06', $zone, [q{EXTRA_PROCESSING_BROKEN}] );
|
||||
zone_gives_not( 'dnssec06', $zone, [q{EXTRA_PROCESSING_OK}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec06-extra-processing-broken-2.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec06', $zone, [q{EXTRA_PROCESSING_BROKEN}] );
|
||||
zone_gives_not( 'dnssec06', $zone, [q{EXTRA_PROCESSING_OK}] );
|
||||
|
||||
###########
|
||||
# dnssec07 -- See t/Test-dnssec07.t instead.
|
||||
###########
|
||||
|
||||
###########
|
||||
# dnssec08
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-dnskey-signature-not-ok-broken.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec08', $zone, [qw{DS08_DNSKEY_RRSIG_EXPIRED DS08_RRSIG_NOT_VALID_BY_DNSKEY}] );
|
||||
zone_gives_not( 'dnssec08', $zone, [qw{DS08_ALGO_NOT_SUPPORTED_BY_ZM DS08_DNSKEY_RRSIG_NOT_YET_VALID DS08_MISSING_RRSIG_IN_RESPONSE DS08_NO_MATCHING_DNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-dnskey-signature-not-ok.zut-root.rd.nic.fr' );
|
||||
zone_gives_not( 'dnssec08', $zone, [qw{DS08_DNSKEY_RRSIG_EXPIRED DS08_ALGO_NOT_SUPPORTED_BY_ZM DS08_DNSKEY_RRSIG_NOT_YET_VALID DS08_MISSING_RRSIG_IN_RESPONSE DS08_NO_MATCHING_DNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-dnskey-not-signed.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec08', $zone, [q{DS08_MISSING_RRSIG_IN_RESPONSE}] );
|
||||
zone_gives_not( 'dnssec08', $zone, [qw{DS08_ALGO_NOT_SUPPORTED_BY_ZM DS08_DNSKEY_RRSIG_EXPIRED DS08_DNSKEY_RRSIG_NOT_YET_VALID DS08_NO_MATCHING_DNSKEY DS08_RRSIG_NOT_VALID_BY_DNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-dnskey-rrsig-not-yet-valid.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec08', $zone, [q{DS08_DNSKEY_RRSIG_NOT_YET_VALID}] );
|
||||
zone_gives_not( 'dnssec08', $zone, [qw{DS08_ALGO_NOT_SUPPORTED_BY_ZM DS08_DNSKEY_RRSIG_EXPIRED DS08_MISSING_RRSIG_IN_RESPONSE DS08_NO_MATCHING_DNSKEY DS08_RRSIG_NOT_VALID_BY_DNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec08-rrsig-no-matching-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec08', $zone, [qw{DS08_NO_MATCHING_DNSKEY DS08_RRSIG_NOT_VALID_BY_DNSKEY}] );
|
||||
zone_gives_not( 'dnssec08', $zone, [qw{DS08_ALGO_NOT_SUPPORTED_BY_ZM DS08_DNSKEY_RRSIG_EXPIRED DS08_DNSKEY_RRSIG_NOT_YET_VALID DS08_MISSING_RRSIG_IN_RESPONSE}] );
|
||||
|
||||
###########
|
||||
# dnssec09
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec09-soa-rrsig-not-yet-valid.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec09', $zone, [qw{DS09_SOA_RRSIG_NOT_YET_VALID}] );
|
||||
zone_gives_not( 'dnssec09', $zone, [qw{DS09_ALGO_NOT_SUPPORTED_BY_ZM DS09_MISSING_RRSIG_IN_RESPONSE DS09_NO_MATCHING_DNSKEY DS09_RRSIG_NOT_VALID_BY_DNSKEY DS09_SOA_RRSIG_EXPIRED}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec09-rrsig-no-matching-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec09', $zone, [qw{DS09_NO_MATCHING_DNSKEY}] );
|
||||
zone_gives_not( 'dnssec09', $zone, [qw{DS09_ALGO_NOT_SUPPORTED_BY_ZM DS09_MISSING_RRSIG_IN_RESPONSE DS09_RRSIG_NOT_VALID_BY_DNSKEY DS09_SOA_RRSIG_EXPIRED DS09_SOA_RRSIG_NOT_YET_VALID}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec09-soa-not-signed.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec09', $zone, [qw{DS09_MISSING_RRSIG_IN_RESPONSE}] );
|
||||
zone_gives_not( 'dnssec09', $zone, [qw{DS09_ALGO_NOT_SUPPORTED_BY_ZM DS09_NO_MATCHING_DNSKEY DS09_RRSIG_NOT_VALID_BY_DNSKEY DS09_SOA_RRSIG_EXPIRED DS09_SOA_RRSIG_NOT_YET_VALID}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec09-soa-rrsig-expired.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec09', $zone, [qw{DS09_SOA_RRSIG_EXPIRED}] );
|
||||
zone_gives_not( 'dnssec09', $zone, [qw{DS09_ALGO_NOT_SUPPORTED_BY_ZM DS09_MISSING_RRSIG_IN_RESPONSE DS09_NO_MATCHING_DNSKEY DS09_RRSIG_NOT_VALID_BY_DNSKEY DS09_SOA_RRSIG_NOT_YET_VALID}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec09-rrsig-not-valid-by-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec09', $zone, [qw{DS09_RRSIG_NOT_VALID_BY_DNSKEY}] );
|
||||
zone_gives_not( 'dnssec09', $zone, [qw{DS09_ALGO_NOT_SUPPORTED_BY_ZM DS09_MISSING_RRSIG_IN_RESPONSE DS09_NO_MATCHING_DNSKEY DS09_SOA_RRSIG_EXPIRED DS09_SOA_RRSIG_NOT_YET_VALID}] );
|
||||
|
||||
###########
|
||||
# dnssec10 -- See t/Test-dnssec10.t instead.
|
||||
###########
|
||||
|
||||
# GOST
|
||||
#$zone = Zonemaster::Engine->zone( 'caint.su' );
|
||||
#@res = Zonemaster::Engine->test_method( 'DNSSEC', 'dnssec08', $zone );
|
||||
#ok( ( grep { $_->string =~ /error=no GOST support/s } @res ), $zone->name->string . " no GOST support" );
|
||||
#@res = Zonemaster::Engine->test_method( 'DNSSEC', 'dnssec09', $zone );
|
||||
#ok( ( grep { $_->string =~ /error=no GOST support/s } @res ), $zone->name->string . " no GOST support" );
|
||||
#@res = Zonemaster::Engine->test_method( 'DNSSEC', 'dnssec10', $zone );
|
||||
#ok( ( grep { $_->string =~ /error=no GOST support/s } @res ), $zone->name->string . " no GOST support" );
|
||||
|
||||
###########
|
||||
# dnssec11
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'zone-does-not-exist.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec11', $zone, [qw{DS11_UNDETERMINED_DS}] );
|
||||
zone_gives_not( 'dnssec11', $zone, [qw{DS11_INCONSISTENT_DS DS11_INCONSISTENT_SIGNED_ZONE DS11_UNDETERMINED_SIGNED_ZONE DS11_PARENT_WITHOUT_DS DS11_PARENT_WITH_DS DS11_NS_WITH_SIGNED_ZONE DS11_NS_WITH_UNSIGNED_ZONE DS11_DS_BUT_UNSIGNED_ZONE}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec11-inconsistent-ds.dnssec11-parent.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec11', $zone, [qw{DS11_INCONSISTENT_DS DS11_PARENT_WITHOUT_DS DS11_PARENT_WITH_DS}] );
|
||||
zone_gives_not( 'dnssec11', $zone, [qw{DS11_INCONSISTENT_SIGNED_ZONE DS11_UNDETERMINED_DS DS11_UNDETERMINED_SIGNED_ZONE DS11_NS_WITH_SIGNED_ZONE DS11_NS_WITH_UNSIGNED_ZONE DS11_DS_BUT_UNSIGNED_ZONE}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec11-ds-but-unsigned.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec11', $zone, [qw{DS11_DS_BUT_UNSIGNED_ZONE}] );
|
||||
zone_gives_not( 'dnssec11', $zone, [qw{DS11_INCONSISTENT_DS DS11_INCONSISTENT_SIGNED_ZONE DS11_UNDETERMINED_DS DS11_UNDETERMINED_SIGNED_ZONE DS11_PARENT_WITHOUT_DS DS11_PARENT_WITH_DS DS11_NS_WITH_SIGNED_ZONE DS11_NS_WITH_UNSIGNED_ZONE}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec11-inconsistent-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec11', $zone, [qw{DS11_INCONSISTENT_SIGNED_ZONE DS11_NS_WITH_UNSIGNED_ZONE DS11_NS_WITH_SIGNED_ZONE}] );
|
||||
zone_gives_not( 'dnssec11', $zone, [qw{DS11_INCONSISTENT_DS DS11_UNDETERMINED_DS DS11_UNDETERMINED_SIGNED_ZONE DS11_PARENT_WITHOUT_DS DS11_PARENT_WITH_DS DS11_DS_BUT_UNSIGNED_ZONE}] );
|
||||
|
||||
###########
|
||||
# dnssec13
|
||||
###########
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec13-algo-not-signed-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives_not('dnssec13', $zone, [qw{DS13_ALGO_NOT_SIGNED_NS DS13_ALGO_NOT_SIGNED_SOA}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec13-algo-not-signed-ns.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec13', $zone, [qw{DS13_ALGO_NOT_SIGNED_NS}] );
|
||||
zone_gives_not('dnssec13', $zone, [qw{DS13_ALGO_NOT_SIGNED_DNSKEY DS13_ALGO_NOT_SIGNED_SOA}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec13-algo-not-signed-soa.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec13', $zone, [qw{DS13_ALGO_NOT_SIGNED_SOA}] );
|
||||
zone_gives_not('dnssec13', $zone, [qw{DS13_ALGO_NOT_SIGNED_DNSKEY DS13_ALGO_NOT_SIGNED_NS}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'afnic.fr' );
|
||||
zone_gives_not('dnssec13', $zone, [qw{DS13_ALGO_NOT_SIGNED_DNSKEY DS13_ALGO_NOT_SIGNED_NS DS13_ALGO_NOT_SIGNED_SOA}] );
|
||||
|
||||
###########
|
||||
# dnssec15
|
||||
###########
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-no-cds-no-cdnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [q{DS15_NO_CDS_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_AND_CDNSKEY DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-cds-no-cdnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [q{DS15_HAS_CDS_NO_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_AND_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-cdnskey-no-cds.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [q{DS15_HAS_CDNSKEY_NO_CDS}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDS_AND_CDNSKEY DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-cds-cdnskey-01.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [q{DS15_HAS_CDS_AND_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-cds-cdnskey-02.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [q{DS15_HAS_CDS_AND_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-cds-cdnskey-03.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [q{DS15_HAS_CDS_AND_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cds-01.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_AND_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cds-02.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_AND_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cds-03.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_AND_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cds-04.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_AND_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cdnskey-01.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_INCONSISTENT_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDS_AND_CDNSKEY DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cdnskey-02.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_INCONSISTENT_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDS_AND_CDNSKEY DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cdnskey-03.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_INCONSISTENT_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDS_AND_CDNSKEY DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-inconsistent-cdnskey-04.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_INCONSISTENT_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDS_AND_CDNSKEY DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDS DS15_MISMATCH_CDS_CDNSKEY DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec15-mismatch-cds-cdnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec15', $zone, [qw{DS15_HAS_CDS_AND_CDNSKEY DS15_MISMATCH_CDS_CDNSKEY}] );
|
||||
zone_gives_not('dnssec15', $zone, [qw{DS15_HAS_CDNSKEY_NO_CDS DS15_HAS_CDS_NO_CDNSKEY DS15_INCONSISTENT_CDNSKEY DS15_INCONSISTENT_CDS DS15_NO_CDS_CDNSKEY}] );
|
||||
|
||||
###########
|
||||
# dnssec16 -- See t/Test-dnssec16.t instead.
|
||||
###########
|
||||
|
||||
###########
|
||||
# dnssec17
|
||||
###########
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec16-cds-cdnskey-signed.zft-root.rd.nic.fr' );
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec16-cds-cdnskey-unsigned.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [qw{DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec16-cds-cdnskey-invalid-rrsig-01.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [q{DS17_CDNSKEY_INVALID_RRSIG}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec16-cds-cdnskey-invalid-rrsig-02.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [q{DS17_CDNSKEY_INVALID_RRSIG}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec17-cdnskey-unsigned.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [qw{DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_UNSIGNED}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec16-cds-without-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [q{DS17_CDNSKEY_WITHOUT_DNSKEY}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec17-cdnskey-signed-by-unknown-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec17-cdnskey-matches-no-dnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [qw{DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_IS_NON_SEP}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec17-delete-cdnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [q{DS17_DELETE_CDNSKEY}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec17-mixed-delete-cdnskey.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [q{DS17_MIXED_DELETE_CDNSKEY}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_IS_NON_ZONE DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec17-cdnskey-is-non-zone.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec17', $zone, [q{DS17_CDNSKEY_IS_NON_ZONE}]);
|
||||
zone_gives_not('dnssec17', $zone, [qw{DS17_CDNSKEY_INVALID_RRSIG DS17_CDNSKEY_IS_NON_SEP DS17_CDNSKEY_MATCHES_NO_DNSKEY DS17_CDNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY DS17_CDNSKEY_UNSIGNED DS17_CDNSKEY_WITHOUT_DNSKEY DS17_DELETE_CDNSKEY DS17_DNSKEY_NOT_SIGNED_BY_CDNSKEY DS17_MIXED_DELETE_CDNSKEY}] );
|
||||
|
||||
###########
|
||||
# dnssec18
|
||||
###########
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec18-no-match-cds-rrsig-ds.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec18', $zone, [q{DS18_NO_MATCH_CDS_RRSIG_DS}]);
|
||||
zone_gives_not( 'dnssec18', $zone, [q{DS18_NO_MATCH_CDNSKEY_RRSIG_DS}]);
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'dnssec18-no-match-cdnskey-rrsig-ds.zft-root.rd.nic.fr' );
|
||||
zone_gives( 'dnssec18', $zone, [q{DS18_NO_MATCH_CDNSKEY_RRSIG_DS}]);
|
||||
zone_gives_not( 'dnssec18', $zone, [q{DS18_NO_MATCH_CDS_RRSIG_DS}]);
|
||||
|
||||
TODO: {
|
||||
local $TODO = "Need to find/create zones with that error";
|
||||
|
||||
# dnssec02
|
||||
ok( $tag{DS02_ALGO_NOT_SUPPORTED_BY_ZM}, q{DS02_ALGO_NOT_SUPPORTED_BY_ZM} );
|
||||
ok( $tag{DS02_DNSKEY_NOT_FOR_ZONE_SIGNING}, q{DS02_DNSKEY_NOT_FOR_ZONE_SIGNING} );
|
||||
# dnssec06
|
||||
ok( $tag{EXTRA_PROCESSING_BROKEN}, q{EXTRA_PROCESSING_BROKEN} );
|
||||
|
||||
local $TODO = "Need to check these zones with that error";
|
||||
|
||||
# dnssec08: dnssec08-dnskey-signature-not-ok.zut-root.rd.nic.fr
|
||||
# Commented out for now because zone doesn't give this message tag anymore. Reason unknown, investigation required. See https://github.com/zonemaster/zonemaster-engine/pull/1147#issuecomment-1318896623
|
||||
ok( $tag{DS08_RRSIG_NOT_VALID_BY_DNSKEY}, q{DS08_RRSIG_NOT_VALID_BY_DNSKEY});
|
||||
|
||||
# dnssec13: dnssec13-algo-not-signed-dnskey.zft-root.rd.nic.fr
|
||||
# Commented out for now because zone doesn't give this message tag anymore. Reason unknown, investigation required. See https://github.com/zonemaster/zonemaster-engine/pull/1147#issuecomment-1318896623
|
||||
ok( $tag{DS13_ALGO_NOT_SIGNED_DNSKEY}, q{DS13_ALGO_NOT_SIGNED_DNSKEY} );
|
||||
|
||||
# dnssec17: dnssec17-cdnskey-signed-by-unknown-dnskey.zft-root.rd.nic.fr
|
||||
# Commented out for now because zone doesn't give these message tags anymore. Reason unknown, investigation required. See https://github.com/zonemaster/zonemaster-engine/pull/1147#issuecomment-1318896623
|
||||
ok( $tag{DS17_CDNSKEY_IS_NON_SEP}, q{DS17_CDNSKEY_IS_NON_SEP} );
|
||||
ok( $tag{DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY}, q{DS17_CDNSKEY_SIGNED_BY_UNKNOWN_DNSKEY} );
|
||||
|
||||
|
||||
}
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
124
zonemaster-engine/t/Test-dnssec01.data
Normal file
124
zonemaster-engine/t/Test-dnssec01.data
Normal file
File diff suppressed because one or more lines are too long
284
zonemaster-engine/t/Test-dnssec01.t
Normal file
284
zonemaster-engine/t/Test-dnssec01.t
Normal file
@@ -0,0 +1,284 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::DNSSEC} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# DNSSEC01 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/DNSSEC-TP/dnssec01.md
|
||||
my $test_module = 'DNSSEC';
|
||||
my $test_case = 'dnssec01';
|
||||
my @all_tags = qw(
|
||||
DS01_DS_ALGO_2_MISSING
|
||||
DS01_DS_ALGO_DEPRECATED
|
||||
DS01_DS_ALGO_NOT_DS
|
||||
DS01_DS_ALGO_OK
|
||||
DS01_DS_ALGO_PRIVATE
|
||||
DS01_DS_ALGO_RESERVED
|
||||
DS01_DS_ALGO_UNASSIGNED
|
||||
DS01_NO_RESPONSE
|
||||
DS01_PARENT_SERVER_NO_DS
|
||||
DS01_PARENT_ZONE_NO_DS
|
||||
DS01_ROOT_N_NO_UNDEL_DS
|
||||
DS01_UNDEL_N_NO_UNDEL_DS
|
||||
);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/DNSSEC-TP/dnssec01/hintfile.zone)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'root-ns1.xa' => [ '127.15.1.27', 'fda1:b2:c3::127:15:1:27' ],
|
||||
'root-ns2.xa' => [ '127.15.1.28', 'fda1:b2:c3::127:15:1:28' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'ALGO-DEPRECATED-1' => [
|
||||
1,
|
||||
q(algo-deprecated-1.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_DEPRECATED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-DEPRECATED-3' => [
|
||||
1,
|
||||
q(algo-deprecated-3.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_DEPRECATED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-DS-0' => [
|
||||
1,
|
||||
q(algo-not-ds-0.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_NOT_DS DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-2' => [
|
||||
1,
|
||||
q(algo-ok-2.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-4' => [
|
||||
1,
|
||||
q(algo-ok-4.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-5' => [
|
||||
1,
|
||||
q(algo-ok-5.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-6' => [
|
||||
1,
|
||||
q(algo-ok-6.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-PRIVATE-253' => [
|
||||
1,
|
||||
q(algo-private-253.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_PRIVATE DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-PRIVATE-254' => [
|
||||
1,
|
||||
q(algo-private-254.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_PRIVATE DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-128' => [
|
||||
1,
|
||||
q(algo-reserved-128.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_RESERVED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-188' => [
|
||||
1,
|
||||
q(algo-reserved-188.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_RESERVED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-252' => [
|
||||
1,
|
||||
q(algo-reserved-252.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_RESERVED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-UNASSIGNED-7' => [
|
||||
1,
|
||||
q(algo-unassigned-7.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_UNASSIGNED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-UNASSIGNED-67' => [
|
||||
1,
|
||||
q(algo-unassigned-67.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_UNASSIGNED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-UNASSIGNED-127' => [
|
||||
1,
|
||||
q(algo-unassigned-127.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_UNASSIGNED DS01_DS_ALGO_2_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-ALGO-1' => [
|
||||
1,
|
||||
q(mixed-algo-1.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_DEPRECATED DS01_DS_ALGO_PRIVATE DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SHARED-IP-1' => [
|
||||
1,
|
||||
q(child.shared-ip-1.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SHARED-IP-2' => [
|
||||
1,
|
||||
q(child.shared-ip-2.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NO-RESPONSE-1' => [
|
||||
1,
|
||||
q(child.no-response-1.dnssec01.xa),
|
||||
[ qw( DS01_NO_RESPONSE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NO-VALID-RESPONSE-1' => [
|
||||
1,
|
||||
q(child.no-valid-response-1.dnssec01.xa),
|
||||
[ qw( DS01_NO_RESPONSE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'PARENT-SERVER-NO-DS-1' => [
|
||||
1,
|
||||
q(child.parent-server-no-ds-1.dnssec01.xa),
|
||||
[ qw( DS01_PARENT_SERVER_NO_DS DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'PARENT-ZONE-NO-DS-1' => [
|
||||
1,
|
||||
q(parent-zone-no-ds-1.dnssec01.xa),
|
||||
[ qw( DS01_PARENT_ZONE_NO_DS ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'UNDEL-NO-UNDEL-DS-1' => [
|
||||
1,
|
||||
q(undel-no-undel-ds-1.dnssec01.xa),
|
||||
[ qw( DS01_UNDEL_N_NO_UNDEL_DS ) ],
|
||||
undef,
|
||||
[ qw( ns1.undel-no-undel-ds-1.dnssec01.xa/127.15.1.41 ns1.undel-no-undel-ds-1.dnssec01.xa/fda1:b2:c3:0:127:15:1:41 ns2.undel-no-undel-ds-1.dnssec01.xa/127.15.1.42 ns2.undel-no-undel-ds-1.dnssec01.xa/fda1:b2:c3:0:127:15:1:42 ) ],
|
||||
[],
|
||||
],
|
||||
'UNDEL-WITH-UNDEL-DS-1' => [
|
||||
1,
|
||||
q(undel-with-undel-ds-1.dnssec01.xa),
|
||||
[ qw( DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[ '42581,13,2,F28391C1ED4DC0F151EDD251A3103DCE0B9A5A251ACF6E24073771D71F3C40F9' ],
|
||||
],
|
||||
'ROOT-NO-UNDEL-DS-1' => [
|
||||
1,
|
||||
q(.),
|
||||
[ qw( DS01_ROOT_N_NO_UNDEL_DS ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ROOT-WITH-UNDEL-DS-1' => [
|
||||
1,
|
||||
q(.),
|
||||
[ qw( DS01_DS_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[ '42581,13,2,F28391C1ED4DC0F151EDD251A3103DCE0B9A5A251ACF6E24073771D71F3C40F9' ],
|
||||
],
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
64
zonemaster-engine/t/Test-dnssec03.data
Normal file
64
zonemaster-engine/t/Test-dnssec03.data
Normal file
File diff suppressed because one or more lines are too long
188
zonemaster-engine/t/Test-dnssec03.t
Normal file
188
zonemaster-engine/t/Test-dnssec03.t
Normal file
@@ -0,0 +1,188 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::DNSSEC} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# dnssec03 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/DNSSEC-TP/dnssec03.md
|
||||
my $test_module = q{DNSSEC};
|
||||
my $test_case = 'dnssec03';
|
||||
my @all_tags = qw(DS03_NO_DNSSEC_SUPPORT
|
||||
DS03_ERR_MULT_NSEC3
|
||||
DS03_ILLEGAL_HASH_ALGO
|
||||
DS03_ILLEGAL_ITERATION_VALUE
|
||||
DS03_ILLEGAL_SALT_LENGTH
|
||||
DS03_INCONSISTENT_HASH_ALGO
|
||||
DS03_INCONSISTENT_ITERATION
|
||||
DS03_INCONSISTENT_NSEC3_FLAGS
|
||||
DS03_INCONSISTENT_SALT_LENGTH
|
||||
DS03_LEGAL_EMPTY_SALT
|
||||
DS03_LEGAL_HASH_ALGO
|
||||
DS03_LEGAL_ITERATION_VALUE
|
||||
DS03_NO_NSEC3
|
||||
DS03_NSEC3_OPT_OUT_DISABLED
|
||||
DS03_NSEC3_OPT_OUT_ENABLED_NON_TLD
|
||||
DS03_NSEC3_OPT_OUT_ENABLED_TLD
|
||||
DS03_SERVER_NO_DNSSEC_SUPPORT
|
||||
DS03_SERVER_NO_NSEC3
|
||||
DS03_UNASSIGNED_FLAG_USED
|
||||
DS03_ERROR_RESPONSE_NSEC_QUERY
|
||||
DS03_NO_RESPONSE_NSEC_QUERY);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.1.0.1', 'fda1:b2:c3::127:1:0:1' ],
|
||||
'ns2' => [ '127.1.0.2', 'fda1:b2:c3::127:1:0:2' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'NO-DNSSEC-SUPPORT' => [
|
||||
1,
|
||||
q(no-dnssec-support.dnssec03.xa),
|
||||
[ qw(DS03_NO_DNSSEC_SUPPORT) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-NSEC3' => [
|
||||
1,
|
||||
q(no-nsec3.dnssec03.xa),
|
||||
[ qw(DS03_NO_NSEC3) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'GOOD-VALUES' => [
|
||||
1,
|
||||
q(good-values.dnssec03.xa),
|
||||
[ qw(DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'ERR-MULT-NSEC3' => [
|
||||
1,
|
||||
q(err-mult-nsec3.dnssec03.xa),
|
||||
[ qw(DS03_ERR_MULT_NSEC3 DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'BAD-VALUES' => [
|
||||
1,
|
||||
q(bad-values.dnssec03.xa),
|
||||
[ qw(DS03_ILLEGAL_HASH_ALGO DS03_ILLEGAL_ITERATION_VALUE DS03_ILLEGAL_SALT_LENGTH DS03_NSEC3_OPT_OUT_ENABLED_NON_TLD) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'INCONSISTENT-VALUES' => [
|
||||
1,
|
||||
q(inconsistent-values.dnssec03.xa),
|
||||
undef,
|
||||
[ qw(DS03_ERR_MULT_NSEC3 DS03_NO_DNSSEC_SUPPORT DS03_NO_NSEC3 DS03_NSEC3_OPT_OUT_ENABLED_TLD DS03_SERVER_NO_DNSSEC_SUPPORT DS03_SERVER_NO_NSEC3 DS03_UNASSIGNED_FLAG_USED DS03_ERROR_RESPONSE_NSEC_QUERY DS03_NO_RESPONSE_NSEC_QUERY) ],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NSEC3-OPT-OUT-ENABLED-TLD' => [
|
||||
1,
|
||||
q(nsec3-opt-out-enabled-tld-dnssec03),
|
||||
[ qw(DS03_NSEC3_OPT_OUT_ENABLED_TLD DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'SERVER-NO-DNSSEC-SUPPORT' => [
|
||||
1,
|
||||
q(server-no-dnssec-support.dnssec03.xa),
|
||||
[ qw(DS03_SERVER_NO_DNSSEC_SUPPORT DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'SERVER-NO-NSEC3' => [
|
||||
1,
|
||||
q(server-no-nsec3.dnssec03.xa),
|
||||
[ qw(DS03_SERVER_NO_NSEC3 DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'UNASSIGNED-FLAG-USED' => [
|
||||
1,
|
||||
q(unassigned-flag-used.dnssec03.xa),
|
||||
[ qw(DS03_UNASSIGNED_FLAG_USED DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'ERROR-RESPONSE-NSEC-QUERY' => [
|
||||
1,
|
||||
q(error-response-nsec-query.dnssec03.xa),
|
||||
[ qw(DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED DS03_ERROR_RESPONSE_NSEC_QUERY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-RESPONSE-NSEC-QUERY' => [
|
||||
1,
|
||||
q(no-response-nsec-query.dnssec03.xa),
|
||||
[ qw(DS03_LEGAL_EMPTY_SALT DS03_LEGAL_HASH_ALGO DS03_LEGAL_ITERATION_VALUE DS03_NSEC3_OPT_OUT_DISABLED DS03_NO_RESPONSE_NSEC_QUERY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'ERROR-NSEC-QUERY' => [
|
||||
1,
|
||||
q(error-nsec-query.dnssec03.xa),
|
||||
[ qw(DS03_ERROR_RESPONSE_NSEC_QUERY DS03_NO_RESPONSE_NSEC_QUERY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
15
zonemaster-engine/t/Test-dnssec05.data
Normal file
15
zonemaster-engine/t/Test-dnssec05.data
Normal file
File diff suppressed because one or more lines are too long
338
zonemaster-engine/t/Test-dnssec05.t
Normal file
338
zonemaster-engine/t/Test-dnssec05.t
Normal file
@@ -0,0 +1,338 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::DNSSEC} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# DNSSEC05 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/DNSSEC-TP/dnssec05.md
|
||||
my $test_module = 'DNSSEC';
|
||||
my $test_case = 'dnssec05';
|
||||
my @all_tags = qw(
|
||||
DS05_ALGO_DEPRECATED
|
||||
DS05_ALGO_NOT_RECOMMENDED
|
||||
DS05_ALGO_NOT_ZONE_SIGN
|
||||
DS05_ALGO_OK
|
||||
DS05_ALGO_PRIVATE
|
||||
DS05_ALGO_RESERVED
|
||||
DS05_ALGO_UNASSIGNED
|
||||
DS05_NO_RESPONSE
|
||||
DS05_SERVER_NO_DNSSEC
|
||||
DS05_ZONE_NO_DNSSEC
|
||||
);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/DNSSEC-TP/dnssec05/hintfile.zone)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'root-ns1.xa' => [ '127.15.5.27', 'fda1:b2:c3::127:15:5:27' ],
|
||||
'root-ns2.xa' => [ '127.15.5.28', 'fda1:b2:c3::127:15:5:28' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'ALGO-DEPRECATED-1' => [
|
||||
1,
|
||||
q(algo-deprecated-1.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-DEPRECATED-3' => [
|
||||
1,
|
||||
q(algo-deprecated-3.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-DEPRECATED-5' => [
|
||||
1,
|
||||
q(algo-deprecated-5.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-DEPRECATED-6' => [
|
||||
1,
|
||||
q(algo-deprecated-6.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-DEPRECATED-7' => [
|
||||
1,
|
||||
q(algo-deprecated-7.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-DEPRECATED-12' => [
|
||||
1,
|
||||
q(algo-deprecated-12.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-RECOMMENDED-10' => [
|
||||
1,
|
||||
q(algo-not-recommended-10.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_NOT_RECOMMENDED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-ZONE-SIGN-0' => [
|
||||
1,
|
||||
q(algo-not-zone-sign-0.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_NOT_ZONE_SIGN ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-ZONE-SIGN-2' => [
|
||||
1,
|
||||
q(algo-not-zone-sign-2.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_NOT_ZONE_SIGN ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-ZONE-SIGN-252' => [
|
||||
1,
|
||||
q(algo-not-zone-sign-252.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_NOT_ZONE_SIGN ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-8' => [
|
||||
1,
|
||||
q(algo-ok-8.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-13' => [
|
||||
1,
|
||||
q(algo-ok-13.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-14' => [
|
||||
1,
|
||||
q(algo-ok-14.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-15' => [
|
||||
1,
|
||||
q(algo-ok-15.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-16' => [
|
||||
1,
|
||||
q(algo-ok-16.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-17' => [
|
||||
1,
|
||||
q(algo-ok-17.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-OK-23' => [
|
||||
1,
|
||||
q(algo-ok-23.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-PRIVATE-253' => [
|
||||
1,
|
||||
q(algo-private-253.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_PRIVATE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-PRIVATE-254' => [
|
||||
1,
|
||||
q(algo-private-254.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_PRIVATE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-4' => [
|
||||
1,
|
||||
q(algo-reserved-4.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_RESERVED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-9' => [
|
||||
1,
|
||||
q(algo-reserved-9.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_RESERVED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-11' => [
|
||||
1,
|
||||
q(algo-reserved-11.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_RESERVED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-123' => [
|
||||
1,
|
||||
q(algo-reserved-123.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_RESERVED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-251' => [
|
||||
1,
|
||||
q(algo-reserved-251.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_RESERVED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-RESERVED-255' => [
|
||||
1,
|
||||
q(algo-reserved-255.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_RESERVED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-UNASSIGNED-20' => [
|
||||
1,
|
||||
q(algo-unassigned-20.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_UNASSIGNED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-UNASSIGNED-122' => [
|
||||
1,
|
||||
q(algo-unassigned-122.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_UNASSIGNED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-ALGO-1' => [
|
||||
1,
|
||||
q(mixed-algo-1.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_DEPRECATED DS05_ALGO_NOT_RECOMMENDED DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NO-RESPONSE-1' => [
|
||||
1,
|
||||
q(no-response-1.dnssec05.xa),
|
||||
[ qw( DS05_NO_RESPONSE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NO-RESPONSE-2' => [
|
||||
1,
|
||||
q(no-response-2.dnssec05.xa),
|
||||
[ qw( DS05_NO_RESPONSE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SERVER-NO-DNSSEC-1' => [
|
||||
1,
|
||||
q(server-no-dnssec-1.dnssec05.xa),
|
||||
[ qw( DS05_SERVER_NO_DNSSEC DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SHARED-IP-1' => [
|
||||
1,
|
||||
q(shared-ip-1.dnssec05.xa),
|
||||
[ qw( DS05_ALGO_OK ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ZONE-NO-DNSSEC-1' => [
|
||||
1,
|
||||
q(zone-no-dnssec-1.dnssec05.xa),
|
||||
[ qw( DS05_ZONE_NO_DNSSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
53
zonemaster-engine/t/Test-dnssec07.data
Normal file
53
zonemaster-engine/t/Test-dnssec07.data
Normal file
File diff suppressed because one or more lines are too long
157
zonemaster-engine/t/Test-dnssec07.t
Normal file
157
zonemaster-engine/t/Test-dnssec07.t
Normal file
@@ -0,0 +1,157 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::DNSSEC} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# DNSSEC07 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/DNSSEC-TP/dnssec07.md
|
||||
my $test_module = 'DNSSEC';
|
||||
my $test_case = 'dnssec07';
|
||||
my @all_tags = qw(
|
||||
DS07_DS_FOR_SIGNED_ZONE
|
||||
DS07_DS_ON_PARENT_SERVER
|
||||
DS07_INCONSISTENT_DS
|
||||
DS07_INCONSISTENT_SIGNED
|
||||
DS07_NON_AUTH_RESPONSE_DNSKEY
|
||||
DS07_NOT_SIGNED
|
||||
DS07_NOT_SIGNED_ON_SERVER
|
||||
DS07_NO_DS_ON_PARENT_SERVER
|
||||
DS07_NO_DS_FOR_SIGNED_ZONE
|
||||
DS07_NO_RESPONSE_DNSKEY
|
||||
DS07_SIGNED
|
||||
DS07_SIGNED_ON_SERVER
|
||||
DS07_UNEXP_RCODE_RESP_DNSKEY
|
||||
);
|
||||
|
||||
# Specific hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/DNSSEC-TP/dnssec07/hintfile.zone)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'root-ns1.xa' => [ '127.15.7.27', 'fda1:b2:c3::127:15:7:27' ],
|
||||
'root-ns2.xa' => [ '127.15.7.28', 'fda1:b2:c3::127:15:7:28' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'SIGNED-AND-DS-1' => [
|
||||
1,
|
||||
q(signed-and-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_DS_FOR_SIGNED_ZONE DS07_DS_ON_PARENT_SERVER DS07_SIGNED DS07_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SIGNED-NO-DS-1' => [
|
||||
1,
|
||||
q(signed-no-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_NO_DS_ON_PARENT_SERVER DS07_NO_DS_FOR_SIGNED_ZONE DS07_SIGNED DS07_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'INCONSIST-SIGNED-AND-DS-1' => [
|
||||
1,
|
||||
q(inconsist-signed-and-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_DS_ON_PARENT_SERVER DS07_INCONSISTENT_SIGNED DS07_NOT_SIGNED_ON_SERVER DS07_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'INCONSIST-SIGNED-NO-DS-1' => [
|
||||
1,
|
||||
q(inconsist-signed-no-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_INCONSISTENT_SIGNED DS07_NOT_SIGNED_ON_SERVER DS07_NO_DS_ON_PARENT_SERVER DS07_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SIGNED-AND-INCONSIST-DS-1' => [
|
||||
1,
|
||||
q(child.signed-and-inconsist-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_DS_ON_PARENT_SERVER DS07_INCONSISTENT_DS DS07_NO_DS_ON_PARENT_SERVER DS07_SIGNED DS07_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'UNSIGNED-AND-DS-1' => [
|
||||
1,
|
||||
q(unsigned-and-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_NOT_SIGNED DS07_NOT_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'UNSIGNED-NO-DS-1' => [
|
||||
1,
|
||||
q(unsigned-no-ds-1.dnssec07.xa),
|
||||
[ qw( DS07_NOT_SIGNED DS07_NOT_SIGNED_ON_SERVER ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NON-AUTH-RESPONSE-DNSKEY-1' => [
|
||||
1,
|
||||
q(non-auth-response-dnskey-1.dnssec07.xa),
|
||||
[ qw( DS07_NON_AUTH_RESPONSE_DNSKEY DS07_SIGNED DS07_SIGNED_ON_SERVER DS07_DS_ON_PARENT_SERVER DS07_DS_FOR_SIGNED_ZONE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NO-RESPONSE-DNSKEY-1' => [
|
||||
1,
|
||||
q(no-response-dnskey-1.dnssec07.xa),
|
||||
[ qw( DS07_SIGNED DS07_SIGNED_ON_SERVER DS07_NO_RESPONSE_DNSKEY DS07_DS_ON_PARENT_SERVER DS07_DS_FOR_SIGNED_ZONE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'UNEXP-RCODE-RESP-DNSKEY-1' => [
|
||||
1,
|
||||
q(unexp-rcode-resp-dnskey-1.dnssec07.xa),
|
||||
[ qw( DS07_SIGNED DS07_SIGNED_ON_SERVER DS07_UNEXP_RCODE_RESP_DNSKEY DS07_DS_ON_PARENT_SERVER DS07_DS_FOR_SIGNED_ZONE ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
242
zonemaster-engine/t/Test-dnssec10.data
Normal file
242
zonemaster-engine/t/Test-dnssec10.data
Normal file
File diff suppressed because one or more lines are too long
542
zonemaster-engine/t/Test-dnssec10.t
Normal file
542
zonemaster-engine/t/Test-dnssec10.t
Normal file
@@ -0,0 +1,542 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::DNSSEC} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# DNSSEC10 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/DNSSEC-TP/dnssec10.md
|
||||
my $test_module = 'DNSSEC';
|
||||
my $test_case = 'dnssec10';
|
||||
my @all_tags = qw(
|
||||
DS10_ALGO_NOT_SUPPORTED_BY_ZM
|
||||
DS10_ERR_MULT_NSEC
|
||||
DS10_ERR_MULT_NSEC3
|
||||
DS10_ERR_MULT_NSEC3PARAM
|
||||
DS10_EXPECTED_NSEC_NSEC3_MISSING
|
||||
DS10_HAS_NSEC
|
||||
DS10_HAS_NSEC3
|
||||
DS10_INCONSISTENT_NSEC
|
||||
DS10_INCONSISTENT_NSEC3
|
||||
DS10_INCONSISTENT_NSEC_NSEC3
|
||||
DS10_MIXED_NSEC_NSEC3
|
||||
DS10_NSEC3PARAM_GIVES_ERR_ANSWER
|
||||
DS10_NSEC3PARAM_MISMATCHES_APEX
|
||||
DS10_NSEC3PARAM_QUERY_RESPONSE_ERR
|
||||
DS10_NSEC3_ERR_TYPE_LIST
|
||||
DS10_NSEC3_MISMATCHES_APEX
|
||||
DS10_NSEC3_MISSING_SIGNATURE
|
||||
DS10_NSEC3_NODATA_MISSING_SOA
|
||||
DS10_NSEC3_NODATA_WRONG_SOA
|
||||
DS10_NSEC3_NO_VERIFIED_SIGNATURE
|
||||
DS10_NSEC3_RRSIG_EXPIRED
|
||||
DS10_NSEC3_RRSIG_NOT_YET_VALID
|
||||
DS10_NSEC3_RRSIG_NO_DNSKEY
|
||||
DS10_NSEC3_RRSIG_VERIFY_ERROR
|
||||
DS10_NSEC_ERR_TYPE_LIST
|
||||
DS10_NSEC_GIVES_ERR_ANSWER
|
||||
DS10_NSEC_MISMATCHES_APEX
|
||||
DS10_NSEC_MISSING_SIGNATURE
|
||||
DS10_NSEC_NODATA_MISSING_SOA
|
||||
DS10_NSEC_NODATA_WRONG_SOA
|
||||
DS10_NSEC_NO_VERIFIED_SIGNATURE
|
||||
DS10_NSEC_QUERY_RESPONSE_ERR
|
||||
DS10_NSEC_RRSIG_EXPIRED
|
||||
DS10_NSEC_RRSIG_NOT_YET_VALID
|
||||
DS10_NSEC_RRSIG_NO_DNSKEY
|
||||
DS10_NSEC_RRSIG_VERIFY_ERROR
|
||||
DS10_SERVER_NO_DNSSEC
|
||||
DS10_ZONE_NO_DNSSEC
|
||||
);
|
||||
|
||||
# Common hint file (https://github.com/zonemaster/zonemaster/blob/master/test-zone-data/COMMON/hintfile.zone)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.1.0.1', 'fda1:b2:c3::127:1:0:1' ],
|
||||
'ns2' => [ '127.1.0.2', 'fda1:b2:c3::127:1:0:2' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'GOOD-NSEC-1' => [
|
||||
1,
|
||||
q(good-nsec-1.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'GOOD-NSEC-2' => [
|
||||
1,
|
||||
q(good-nsec-2.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'GOOD-NSEC-3' => [
|
||||
1,
|
||||
q(good-nsec-3.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'GOOD-NSEC3-1' => [
|
||||
1,
|
||||
q(good-nsec3-1.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'GOOD-NSEC3-2' => [
|
||||
1,
|
||||
q(good-nsec3-2.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'GOOD-NSEC3-3' => [
|
||||
1,
|
||||
q(good-nsec3-3.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-SUPP-BY-ZM-1' => [
|
||||
1,
|
||||
q(algo-not-supp-by-zm-1.dnssec10.xa),
|
||||
[ qw( DS10_ALGO_NOT_SUPPORTED_BY_ZM DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ALGO-NOT-SUPP-BY-ZM-2' => [
|
||||
1,
|
||||
q(algo-not-supp-by-zm-2.dnssec10.xa),
|
||||
[ qw( DS10_ALGO_NOT_SUPPORTED_BY_ZM DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'BAD-SERVERS-BUT-GOOD-NSEC-1' => [
|
||||
1,
|
||||
q(bad-servers-but-good-nsec-1.dnssec10.xa),
|
||||
[ qw( DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ERR-MULT-NSEC-1' => [
|
||||
1,
|
||||
q(err-mult-nsec-1.dnssec10.xa),
|
||||
[ qw( DS10_ERR_MULT_NSEC DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ERR-MULT-NSEC-2' => [
|
||||
1,
|
||||
q(err-mult-nsec-2.dnssec10.xa),
|
||||
[ qw( DS10_ERR_MULT_NSEC DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ERR-MULT-NSEC3-1' => [
|
||||
1,
|
||||
q(err-mult-nsec3-1.dnssec10.xa),
|
||||
[ qw( DS10_ERR_MULT_NSEC3 DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ERR-MULT-NSEC3PARAM-1' => [
|
||||
1,
|
||||
q(err-mult-nsec3param-1.dnssec10.xa),
|
||||
[ qw( DS10_ERR_MULT_NSEC3PARAM DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'EXP-NSEC-NSEC3-MISS-1' => [
|
||||
1,
|
||||
q(exp-nsec-nsec3-miss-1.dnssec10.xa),
|
||||
[ qw( DS10_EXPECTED_NSEC_NSEC3_MISSING ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'INCONSISTENT-NSEC-1' => [
|
||||
1,
|
||||
q(inconsistent-nsec-1.dnssec10.xa),
|
||||
[ qw( DS10_INCONSISTENT_NSEC DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'INCONSISTENT-NSEC3-1' => [
|
||||
1,
|
||||
q(inconsistent-nsec3-1.dnssec10.xa),
|
||||
[ qw( DS10_INCONSISTENT_NSEC3 DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'INCONSIST-NSEC-NSEC3-1' => [
|
||||
1,
|
||||
q(inconsist-nsec-nsec3-1.dnssec10.xa),
|
||||
[ qw( DS10_INCONSISTENT_NSEC_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'INCONSIST-NSEC-NSEC3-2' => [
|
||||
1,
|
||||
q(inconsist-nsec-nsec3-2.dnssec10.xa),
|
||||
[ qw( DS10_INCONSISTENT_NSEC_NSEC3 DS10_INCONSISTENT_NSEC DS10_INCONSISTENT_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-NSEC-NSEC3-1' => [
|
||||
1,
|
||||
q(mixed-nsec-nsec3-1.dnssec10.xa),
|
||||
[ qw( DS10_MIXED_NSEC_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'MIXED-NSEC-NSEC3-2' => [
|
||||
1,
|
||||
q(mixed-nsec-nsec3-2.dnssec10.xa),
|
||||
[ qw( DS10_MIXED_NSEC_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3PARAM-GIVES-ERR-ANSWER-1' => [
|
||||
1,
|
||||
q(nsec3param-gives-err-answer-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3PARAM_GIVES_ERR_ANSWER DS10_HAS_NSEC3 DS10_INCONSISTENT_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3PARAM-GIVES-ERR-ANSWER-2' => [
|
||||
1,
|
||||
q(nsec3param-gives-err-answer-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3PARAM_GIVES_ERR_ANSWER DS10_EXPECTED_NSEC_NSEC3_MISSING DS10_INCONSISTENT_NSEC3 DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3PARAM-MISMATCHES-APEX-1' => [
|
||||
1,
|
||||
q(nsec3param-mismatches-apex-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3PARAM_MISMATCHES_APEX DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3PARAM-Q-RESPONSE-ERR-1' => [
|
||||
1,
|
||||
q(nsec3param-q-response-err-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3PARAM_QUERY_RESPONSE_ERR DS10_HAS_NSEC3 DS10_INCONSISTENT_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3PARAM-Q-RESPONSE-ERR-2' => [
|
||||
1,
|
||||
q(nsec3param-q-response-err-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3PARAM_QUERY_RESPONSE_ERR DS10_HAS_NSEC3 DS10_INCONSISTENT_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3PARAM-Q-RESPONSE-ERR-3' => [
|
||||
0,
|
||||
q(nsec3param-q-response-err-3.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3PARAM_QUERY_RESPONSE_ERR DS10_EXPECTED_NSEC_NSEC3_MISSING DS10_INCONSISTENT_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-ERR-TYPE-LIST-1' => [
|
||||
1,
|
||||
q(nsec3-err-type-list-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_ERR_TYPE_LIST DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-ERR-TYPE-LIST-2' => [
|
||||
1,
|
||||
q(nsec3-err-type-list-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_ERR_TYPE_LIST DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-MISMATCHES-APEX-1' => [
|
||||
1,
|
||||
q(nsec3-mismatches-apex-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_MISMATCHES_APEX DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-MISSING-SIGNATURE-1' => [
|
||||
1,
|
||||
q(nsec3-missing-signature-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_MISSING_SIGNATURE DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-NODATA-MISSING-SOA-1' => [
|
||||
1,
|
||||
q(nsec3-nodata-missing-soa-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_NODATA_MISSING_SOA DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-NODATA-WRONG-SOA-1' => [
|
||||
1,
|
||||
q(nsec3-nodata-wrong-soa-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_NODATA_WRONG_SOA DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-NO-VERIFIED-SIGNATURE-1' => [
|
||||
1,
|
||||
q(nsec3-no-verified-signature-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC3 DS10_NSEC3_RRSIG_NO_DNSKEY ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-NO-VERIFIED-SIGNATURE-2' => [
|
||||
1,
|
||||
q(nsec3-no-verified-signature-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC3 DS10_NSEC3_RRSIG_EXPIRED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-NO-VERIFIED-SIGNATURE-3' => [
|
||||
1,
|
||||
q(nsec3-no-verified-signature-3.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC3 DS10_NSEC3_RRSIG_NOT_YET_VALID ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC3-NO-VERIFIED-SIGNATURE-4' => [
|
||||
1,
|
||||
q(nsec3-no-verified-signature-4.dnssec10.xa),
|
||||
[ qw( DS10_NSEC3_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC3 DS10_NSEC3_RRSIG_VERIFY_ERROR ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-ERR-TYPE-LIST-1' => [
|
||||
1,
|
||||
q(nsec-err-type-list-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_ERR_TYPE_LIST DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-ERR-TYPE-LIST-2' => [
|
||||
1,
|
||||
q(nsec-err-type-list-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_ERR_TYPE_LIST DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-GIVES-ERR-ANSWER-1' => [
|
||||
1,
|
||||
q(nsec-gives-err-answer-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_GIVES_ERR_ANSWER DS10_HAS_NSEC DS10_INCONSISTENT_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-GIVES-ERR-ANSWER-2' => [
|
||||
1,
|
||||
q(nsec-gives-err-answer-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_GIVES_ERR_ANSWER DS10_EXPECTED_NSEC_NSEC3_MISSING DS10_INCONSISTENT_NSEC DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-MISMATCHES-APEX-1' => [
|
||||
1,
|
||||
q(nsec-mismatches-apex-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_MISMATCHES_APEX DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-MISMATCHES-APEX-2' => [
|
||||
1,
|
||||
q(nsec-mismatches-apex-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_MISMATCHES_APEX DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-MISSING-SIGNATURE-1' => [
|
||||
1,
|
||||
q(nsec-missing-signature-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_MISSING_SIGNATURE DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-NODATA-MISSING-SOA-1' => [
|
||||
1,
|
||||
q(nsec-nodata-missing-soa-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_NODATA_MISSING_SOA DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-NODATA-WRONG-SOA-1' => [
|
||||
1,
|
||||
q(nsec-nodata-wrong-soa-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_NODATA_WRONG_SOA DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-NO-VERIFIED-SIGNATURE-1' => [
|
||||
1,
|
||||
q(nsec-no-verified-signature-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC DS10_NSEC_RRSIG_NO_DNSKEY ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-NO-VERIFIED-SIGNATURE-2' => [
|
||||
1,
|
||||
q(nsec-no-verified-signature-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC DS10_NSEC_RRSIG_EXPIRED ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-NO-VERIFIED-SIGNATURE-3' => [
|
||||
1,
|
||||
q(nsec-no-verified-signature-3.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC DS10_NSEC_RRSIG_NOT_YET_VALID ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-NO-VERIFIED-SIGNATURE-4' => [
|
||||
1,
|
||||
q(nsec-no-verified-signature-4.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_NO_VERIFIED_SIGNATURE DS10_HAS_NSEC DS10_NSEC_RRSIG_VERIFY_ERROR ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-QUERY-RESPONSE-ERR-1' => [
|
||||
1,
|
||||
q(nsec-query-response-err-1.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_QUERY_RESPONSE_ERR DS10_HAS_NSEC DS10_INCONSISTENT_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-QUERY-RESPONSE-ERR-2' => [
|
||||
1,
|
||||
q(nsec-query-response-err-2.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_QUERY_RESPONSE_ERR DS10_HAS_NSEC DS10_INCONSISTENT_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'NSEC-QUERY-RESPONSE-ERR-3' => [
|
||||
0,
|
||||
q(nsec-query-response-err-3.dnssec10.xa),
|
||||
[ qw( DS10_NSEC_QUERY_RESPONSE_ERR DS10_EXPECTED_NSEC_NSEC3_MISSING DS10_INCONSISTENT_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SERVER-NO-DNSSEC-1' => [
|
||||
1,
|
||||
q(server-no-dnssec-1.dnssec10.xa),
|
||||
[ qw( DS10_SERVER_NO_DNSSEC DS10_HAS_NSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'SERVER-NO-DNSSEC-2' => [
|
||||
1,
|
||||
q(server-no-dnssec-2.dnssec10.xa),
|
||||
[ qw( DS10_SERVER_NO_DNSSEC DS10_HAS_NSEC3 ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
'ZONE-NO-DNSSEC-1' => [
|
||||
1,
|
||||
q(zone-no-dnssec-1.dnssec10.xa),
|
||||
[ qw( DS10_ZONE_NO_DNSSEC ) ],
|
||||
undef,
|
||||
[],
|
||||
[],
|
||||
],
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
68
zonemaster-engine/t/Test-dnssec16.data
Normal file
68
zonemaster-engine/t/Test-dnssec16.data
Normal file
File diff suppressed because one or more lines are too long
186
zonemaster-engine/t/Test-dnssec16.t
Normal file
186
zonemaster-engine/t/Test-dnssec16.t
Normal file
@@ -0,0 +1,186 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::DNSSEC} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# dnssec16 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/DNSSEC-TP/dnssec16.md
|
||||
my $test_module = q{DNSSEC};
|
||||
my $test_case = 'dnssec16';
|
||||
my @all_tags = qw(DS16_CDS_INVALID_RRSIG
|
||||
DS16_CDS_MATCHES_NON_SEP_DNSKEY
|
||||
DS16_CDS_MATCHES_NON_ZONE_DNSKEY
|
||||
DS16_CDS_MATCHES_NO_DNSKEY
|
||||
DS16_CDS_NOT_SIGNED_BY_CDS
|
||||
DS16_CDS_SIGNED_BY_UNKNOWN_DNSKEY
|
||||
DS16_CDS_UNSIGNED
|
||||
DS16_CDS_WITHOUT_DNSKEY
|
||||
DS16_DELETE_CDS
|
||||
DS16_DNSKEY_NOT_SIGNED_BY_CDS
|
||||
DS16_MIXED_DELETE_CDS);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.1.0.1', 'fda1:b2:c3::127:1:0:1' ],
|
||||
'ns2' => [ '127.1.0.2', 'fda1:b2:c3::127:1:0:2' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'CDS-INVALID-RRSIG' => [
|
||||
1,
|
||||
q(cds-invalid-rrsig.dnssec16.xa),
|
||||
[ qw(DS16_CDS_INVALID_RRSIG) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-MATCHES-NO-DNSKEY' => [
|
||||
1,
|
||||
q(cds-matches-no-dnskey.dnssec16.xa),
|
||||
[ qw(DS16_CDS_MATCHES_NO_DNSKEY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-MATCHES-NON-SEP-DNSKEY' => [
|
||||
1,
|
||||
q(cds-matches-non-sep-dnskey.dnssec16.xa),
|
||||
[ qw(DS16_CDS_MATCHES_NON_SEP_DNSKEY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-MATCHES-NON-ZONE-DNSKEY' => [
|
||||
1,
|
||||
q(cds-matches-non-zone-dnskey.dnssec16.xa),
|
||||
[ qw(DS16_CDS_MATCHES_NON_ZONE_DNSKEY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-NOT-SIGNED-BY-CDS' => [
|
||||
1,
|
||||
q(cds-not-signed-by-cds.dnssec16.xa),
|
||||
[ qw(DS16_CDS_NOT_SIGNED_BY_CDS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-SIGNED-BY-UNKNOWN-DNSKEY' => [
|
||||
1,
|
||||
q(cds-signed-by-unknown-dnskey.dnssec16.xa),
|
||||
[ qw(DS16_CDS_SIGNED_BY_UNKNOWN_DNSKEY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-UNSIGNED' => [
|
||||
1,
|
||||
q(cds-unsigned.dnssec16.xa),
|
||||
[ qw(DS16_CDS_UNSIGNED DS16_CDS_NOT_SIGNED_BY_CDS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'CDS-WITHOUT-DNSKEY' => [
|
||||
1,
|
||||
q(cds-without-dnskey.dnssec16.xa),
|
||||
[ qw(DS16_CDS_WITHOUT_DNSKEY) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'DELETE-CDS' => [
|
||||
1,
|
||||
q(delete-cds.dnssec16.xa),
|
||||
[ qw(DS16_DELETE_CDS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'DNSKEY-NOT-SIGNED-BY-CDS' => [
|
||||
1,
|
||||
q(dnskey-not-signed-by-cds.dnssec16.xa),
|
||||
[ qw(DS16_DNSKEY_NOT_SIGNED_BY_CDS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'MIXED-DELETE-CDS' => [
|
||||
1,
|
||||
q(mixed-delete-cds.dnssec16.xa),
|
||||
[ qw(DS16_MIXED_DELETE_CDS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-CDS' => [
|
||||
1,
|
||||
q(no-cds.dnssec16.xa),
|
||||
[],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NOT-AA' => [
|
||||
1,
|
||||
q(not-aa.dnssec16.xa),
|
||||
[],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'VALID-CDS' => [
|
||||
1,
|
||||
q(valid-cds.dnssec16.xa),
|
||||
[],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
170
zonemaster-engine/t/Test-nameserver.data
Normal file
170
zonemaster-engine/t/Test-nameserver.data
Normal file
File diff suppressed because one or more lines are too long
192
zonemaster-engine/t/Test-nameserver.t
Normal file
192
zonemaster-engine/t/Test-nameserver.t
Normal file
@@ -0,0 +1,192 @@
|
||||
use Test::More;
|
||||
use Test::Differences;
|
||||
use File::Slurp;
|
||||
|
||||
use List::MoreUtils qw[uniq none any];
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $checking_module = q{Nameserver};
|
||||
|
||||
sub zone_gives {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( ( grep { $_->tag eq $gives } @res ), $zone->name->string . " gives $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
sub zone_gives_not {
|
||||
my ( $test, $zone, $gives_ref ) = @_;
|
||||
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
my @res = Zonemaster::Engine->test_method( $checking_module, $test, $zone );
|
||||
foreach my $gives ( @{$gives_ref} ) {
|
||||
ok( !( grep { $_->tag eq $gives } @res ), $zone->name->string . " does not give $gives" );
|
||||
}
|
||||
return scalar( @res );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-nameserver.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
my @testcases_with_network = (qw{nameserver01 nameserver02 nameserver06 nameserver07 nameserver08 nameserver09});
|
||||
foreach my $testcase ( qw{nameserver01 nameserver02 nameserver03 nameserver04 nameserver05 nameserver06 nameserver07 nameserver08 nameserver09} ) {
|
||||
next if grep { $_ eq $testcase } @testcases_with_network;
|
||||
$json = read_file( 't/profiles/Test-'.$testcase.'-only.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
my %testcases;
|
||||
Zonemaster::Engine->logger->clear_history();
|
||||
foreach my $result ( Zonemaster::Engine->test_module( q{nameserver}, q{afnic.fr} ) ) {
|
||||
if ( $result->testcase && $result->testcase ne 'Unspecified' ) {
|
||||
$testcases{$result->testcase} = 1;
|
||||
}
|
||||
}
|
||||
eq_or_diff( [ map { lc $_ } keys %testcases ], [ $testcase ], 'expected test-case ('. $testcase .')' );
|
||||
}
|
||||
|
||||
$json = read_file( 't/profiles/Test-nameserver-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my $zone;
|
||||
my @res;
|
||||
my %tag;
|
||||
|
||||
# nameserver01
|
||||
$zone = Zonemaster::Engine->zone( 'fr' );
|
||||
zone_gives( 'nameserver01', $zone, [q{NO_RECURSOR}] );
|
||||
zone_gives_not( 'nameserver01', $zone, [q{IS_A_RECURSOR}] );
|
||||
|
||||
# nameserver02
|
||||
$zone = Zonemaster::Engine->zone( 'flagday.rootcanary.net' );
|
||||
zone_gives( 'nameserver02', $zone, ['BREAKS_ON_EDNS']);
|
||||
$zone = Zonemaster::Engine->zone( 'dyad.se' );
|
||||
zone_gives( 'nameserver02', $zone, ['EDNS0_SUPPORT'] );
|
||||
|
||||
# nameserver03
|
||||
$zone = Zonemaster::Engine->zone( 'nameserver03-axfr-failure.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'nameserver03', $zone, [q{AXFR_FAILURE}] );
|
||||
zone_gives_not( 'nameserver03', $zone, [q{AXFR_AVAILABLE}] );
|
||||
|
||||
# nameserver04
|
||||
$zone = Zonemaster::Engine->zone( 'afnic.fr' );
|
||||
zone_gives( 'nameserver04', $zone, [q{SAME_SOURCE_IP}] );
|
||||
|
||||
# nameserver05
|
||||
$zone = Zonemaster::Engine->zone( 'afnic.fr' );
|
||||
zone_gives( 'nameserver05', $zone, [q{AAAA_WELL_PROCESSED}] );
|
||||
|
||||
SKIP: {
|
||||
skip "Zone does not actually have tested problem", 1,
|
||||
$zone = Zonemaster::Engine->zone( 'uddevallafiber.se' );
|
||||
zone_gives( 'nameserver05', $zone, ['QUERY_DROPPED'] );
|
||||
}
|
||||
|
||||
# nameserver06
|
||||
$zone = Zonemaster::Engine->zone( 'nameserver06-can-not-be-resolved.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'nameserver06', $zone, [q{CAN_NOT_BE_RESOLVED}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'nameserver06-no-resolution.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'nameserver06', $zone, [q{NO_RESOLUTION}] );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'nameserver06-can-be-resolved.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'nameserver06', $zone, [q{CAN_BE_RESOLVED}] );
|
||||
|
||||
# nameserver07
|
||||
$zone = Zonemaster::Engine->zone( '.' );
|
||||
zone_gives( 'nameserver07', $zone, [q{UPWARD_REFERRAL_IRRELEVANT}] );
|
||||
zone_gives_not( 'nameserver07', $zone, [qw{UPWARD_REFERRAL NO_UPWARD_REFERRAL}] );
|
||||
|
||||
# nameserver{08,09,10} -- no unit tests yet, see https://github.com/zonemaster/zonemaster-engine/issues/1146
|
||||
|
||||
# nameserver11
|
||||
$zone = Zonemaster::Engine->zone( 'bemacom.se' );
|
||||
zone_gives( 'nameserver11', $zone, [q{N11_UNEXPECTED_RCODE}] );
|
||||
zone_gives_not( 'nameserver11', $zone, [qw{N11_NO_EDNS N11_NO_RESPONSE N11_RETURNS_UNKNOWN_OPTION_CODE N11_UNEXPECTED_ANSWER_SECTION N11_UNSET_AA}] );
|
||||
|
||||
# nameserver{12,13,14} -- no unit tests yet, see https://github.com/zonemaster/zonemaster-engine/issues/1146
|
||||
|
||||
# nameserver15 -- see t/Test-nameserver15.t instead.
|
||||
|
||||
SKIP: {
|
||||
skip "Zone does not actually have tested problem", 1,
|
||||
$zone = Zonemaster::Engine->zone( 'escargot.se' );
|
||||
zone_gives( 'nameserver05', $zone, ['AAAA_UNEXPECTED_RCODE'] );
|
||||
}
|
||||
|
||||
TODO: {
|
||||
local $TODO = "Need to find/create zones with that error";
|
||||
|
||||
# nameserver04
|
||||
ok( $tag{DIFFERENT_SOURCE_IP}, q{DIFFERENT_SOURCE_IP} );
|
||||
|
||||
# nameserver07
|
||||
ok( $tag{UPWARD_REFERRAL}, q{UPWARD_REFERRAL} );
|
||||
ok( $tag{NO_UPWARD_REFERRAL}, q{NO_UPWARD_REFERRAL} );
|
||||
|
||||
# nameserver08
|
||||
ok( $tag{QNAME_CASE_INSENSITIVE}, q{QNAME_CASE_INSENSITIVE} );
|
||||
ok( $tag{QNAME_CASE_SENSITIVE}, q{QNAME_CASE_SENSITIVE} );
|
||||
}
|
||||
|
||||
SKIP: {
|
||||
# Default behaviour changed. It's always skipped unless we have network
|
||||
# available.
|
||||
skip 'no network', 2 if not $ENV{ZONEMASTER_RECORD};
|
||||
|
||||
# AXFR results not well cached. Cannot test cases where AXFR is available
|
||||
# without network, even in case of ZONEMASTER_RECORD is not set.
|
||||
# $zone = Zonemaster::Engine->zone( 'nameserver03-axfr-available.zut-root.rd.nic.fr' );
|
||||
# zone_gives( 'nameserver03', $zone, [q{AXFR_AVAILABLE}] );
|
||||
$zone = Zonemaster::Engine->zone( 'arpa' );
|
||||
zone_gives( 'nameserver03', $zone, [q{AXFR_AVAILABLE}] );
|
||||
zone_gives( 'nameserver03', $zone, [q{AXFR_FAILURE}] );
|
||||
}
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 0 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
$zone = Zonemaster::Engine->zone( 'fr' );
|
||||
zone_gives( 'nameserver01', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver01', $zone, [qw{NO_RECURSOR IS_A_RECURSOR}] );
|
||||
$zone = Zonemaster::Engine->zone( 'perennaguiden.se' );
|
||||
zone_gives( 'nameserver02', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver02', $zone, [qw{EDNS0_BAD_ANSWER EDNS0_BAD_QUERY EDNS0_SUPPORT}] );
|
||||
$zone = Zonemaster::Engine->zone( 'nameserver03-axfr-failure.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'nameserver03', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver03', $zone, [qw{AXFR_FAILURE AXFR_AVAILABLE}] );
|
||||
$zone = Zonemaster::Engine->zone( 'afnic.fr' );
|
||||
zone_gives( 'nameserver04', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver04', $zone, [qw{SAME_SOURCE_IP DIFFERENT_SOURCE_IP}] );
|
||||
zone_gives( 'nameserver05', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver05', $zone, [qw{IPV6_DISABLED IPV4_DISABLED}] );
|
||||
$zone = Zonemaster::Engine->zone( 'nameserver06-can-not-be-resolved.zut-root.rd.nic.fr' );
|
||||
zone_gives( 'nameserver06', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver06', $zone, [qw{CAN_NOT_BE_RESOLVED NO_RESOLUTION CAN_BE_RESOLVED}] );
|
||||
$zone = Zonemaster::Engine->zone( '.' );
|
||||
zone_gives( 'nameserver07', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver07', $zone, [qw{UPWARD_REFERRAL_IRRELEVANT UPWARD_REFERRAL NO_UPWARD_REFERRAL}] );
|
||||
zone_gives( 'nameserver08', $zone, [q{NO_NETWORK}] );
|
||||
zone_gives_not( 'nameserver08', $zone, [qw{QNAME_CASE_INSENSITIVE QNAME_CASE_SENSITIVE}] );
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
|
||||
done_testing;
|
||||
88
zonemaster-engine/t/Test-nameserver01-A.data
Normal file
88
zonemaster-engine/t/Test-nameserver01-A.data
Normal file
File diff suppressed because one or more lines are too long
37
zonemaster-engine/t/Test-nameserver01-A.t
Normal file
37
zonemaster-engine/t/Test-nameserver01-A.t
Normal file
@@ -0,0 +1,37 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-nameserver01-A.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'a.nameserver01.exempelvis.se' => {
|
||||
'ns1.a.nameserver01.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.a.nameserver01.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{a.nameserver01.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Nameserver->nameserver01( $zone );
|
||||
|
||||
ok( $res{NO_RESPONSE}, q{should emit NO_RESPONSE} );
|
||||
ok( !$res{IS_A_RECURSOR}, q{should not emit IS_A_RECURSOR} );
|
||||
ok( $res{NO_RECURSOR}, q{should emit NO_RECURSOR} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
88
zonemaster-engine/t/Test-nameserver01-B.data
Normal file
88
zonemaster-engine/t/Test-nameserver01-B.data
Normal file
File diff suppressed because one or more lines are too long
37
zonemaster-engine/t/Test-nameserver01-B.t
Normal file
37
zonemaster-engine/t/Test-nameserver01-B.t
Normal file
@@ -0,0 +1,37 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-nameserver01-B.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'b.nameserver01.exempelvis.se' => {
|
||||
'ns1.b.nameserver01.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.b.nameserver01.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{b.nameserver01.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Nameserver->nameserver01( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( $res{IS_A_RECURSOR}, q{should emit IS_A_RECURSOR} );
|
||||
ok( $res{NO_RECURSOR}, q{should emit NO_RECURSOR} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
87
zonemaster-engine/t/Test-nameserver01-C.data
Normal file
87
zonemaster-engine/t/Test-nameserver01-C.data
Normal file
File diff suppressed because one or more lines are too long
37
zonemaster-engine/t/Test-nameserver01-C.t
Normal file
37
zonemaster-engine/t/Test-nameserver01-C.t
Normal file
@@ -0,0 +1,37 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-nameserver01-C.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'c.nameserver01.exempelvis.se' => {
|
||||
'ns1.c.nameserver01.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.c.nameserver01.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{c.nameserver01.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Nameserver->nameserver01( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{IS_A_RECURSOR}, q{should not emit IS_A_RECURSOR} );
|
||||
ok( $res{NO_RECURSOR}, q{should emit NO_RECURSOR} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
65
zonemaster-engine/t/Test-nameserver01-D.data
Normal file
65
zonemaster-engine/t/Test-nameserver01-D.data
Normal file
File diff suppressed because one or more lines are too long
37
zonemaster-engine/t/Test-nameserver01-D.t
Normal file
37
zonemaster-engine/t/Test-nameserver01-D.t
Normal file
@@ -0,0 +1,37 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-nameserver01-D.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'd.nameserver01.exempelvis.se' => {
|
||||
'resolver1.exempelvis.se' => ['8.8.8.8'],
|
||||
'resolver2.exempelvis.se' => ['9.9.9.9'],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{d.nameserver01.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Nameserver->nameserver01( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( $res{IS_A_RECURSOR}, q{should emit IS_A_RECURSOR} );
|
||||
ok( !$res{NO_RECURSOR}, q{should not emit NO_RECURSOR} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
36
zonemaster-engine/t/Test-nameserver15.data
Normal file
36
zonemaster-engine/t/Test-nameserver15.data
Normal file
File diff suppressed because one or more lines are too long
163
zonemaster-engine/t/Test-nameserver15.t
Normal file
163
zonemaster-engine/t/Test-nameserver15.t
Normal file
@@ -0,0 +1,163 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Nameserver} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# nameserver15 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Nameserver-TP/nameserver15.md
|
||||
my $test_module = 'Nameserver';
|
||||
my $test_case = 'nameserver15';
|
||||
my @all_tags = qw(N15_NO_VERSION_REVEALED
|
||||
N15_ERROR_ON_VERSION_QUERY
|
||||
N15_SOFTWARE_VERSION
|
||||
N15_WRONG_CLASS);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.1.0.1', 'fda1:b2:c3::127:1:0:1' ],
|
||||
'ns2' => [ '127.1.0.2', 'fda1:b2:c3::127:1:0:2' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'NO-VERSION-REVEALED-1' => [
|
||||
1,
|
||||
q(no-version-revealed-1.nameserver15.xa),
|
||||
[ qw(N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-VERSION-REVEALED-2' => [
|
||||
1,
|
||||
q(no-version-revealed-2.nameserver15.xa),
|
||||
[ qw(N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-VERSION-REVEALED-3' => [
|
||||
1,
|
||||
q(no-version-revealed-3.nameserver15.xa),
|
||||
[ qw(N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-VERSION-REVEALED-4' => [
|
||||
1,
|
||||
q(no-version-revealed-4.nameserver15.xa),
|
||||
[ qw(N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-VERSION-REVEALED-5' => [
|
||||
1,
|
||||
q(no-version-revealed-5.nameserver15.xa),
|
||||
[ qw(N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-VERSION-REVEALED-6' => [
|
||||
1,
|
||||
q(no-version-revealed-6.nameserver15.xa),
|
||||
[ qw(N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'ERROR-ON-VERSION-QUERY-1' => [
|
||||
1,
|
||||
q(error-on-version-query-1.nameserver15.xa),
|
||||
[ qw(N15_ERROR_ON_VERSION_QUERY N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'ERROR-ON-VERSION-QUERY-2' => [
|
||||
1,
|
||||
q(error-on-version-query-2.nameserver15.xa),
|
||||
[ qw(N15_ERROR_ON_VERSION_QUERY N15_NO_VERSION_REVEALED) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'SOFTWARE-VERSION-1' => [
|
||||
1,
|
||||
q(software-version-1.nameserver15.xa),
|
||||
[ qw(N15_SOFTWARE_VERSION) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'SOFTWARE-VERSION-2' => [
|
||||
1,
|
||||
q(software-version-2.nameserver15.xa),
|
||||
[ qw(N15_SOFTWARE_VERSION) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'WRONG-CLASS-1' => [
|
||||
1,
|
||||
q(wrong-class-1.nameserver15.xa),
|
||||
[ qw(N15_SOFTWARE_VERSION N15_WRONG_CLASS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'WRONG-CLASS-2' => [
|
||||
1,
|
||||
q(wrong-class-2.nameserver15.xa),
|
||||
[ qw(N15_SOFTWARE_VERSION N15_WRONG_CLASS) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
79
zonemaster-engine/t/Test-syntax.data
Normal file
79
zonemaster-engine/t/Test-syntax.data
Normal file
File diff suppressed because one or more lines are too long
144
zonemaster-engine/t/Test-syntax.t
Normal file
144
zonemaster-engine/t/Test-syntax.t
Normal file
@@ -0,0 +1,144 @@
|
||||
use Test::More;
|
||||
use Test::Differences;
|
||||
use File::Slurp;
|
||||
|
||||
use List::MoreUtils qw[uniq none any];
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::DNSName} );
|
||||
use_ok( q{Zonemaster::Engine::Zone} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
}
|
||||
|
||||
sub zone_gives {
|
||||
my ( $test, $zone, $gives ) = @_;
|
||||
|
||||
my @res = Zonemaster::Engine->test_method( q{Syntax}, $test, $zone );
|
||||
ok( ( grep { $_->tag eq $gives } @res ), $zone->name->string . " gives $gives" );
|
||||
}
|
||||
|
||||
sub zone_gives_not {
|
||||
my ( $test, $zone, $gives ) = @_;
|
||||
|
||||
my @res = Zonemaster::Engine->test_method( q{Syntax}, $test, $zone );
|
||||
ok( !( grep { $_->tag eq $gives } @res ), $zone->name->string . " does not give $gives" );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
# Find a way with dependences for syntax04 syntax05 syntax06 syntax07 syntax08
|
||||
my ($json, $profile_test);
|
||||
foreach my $testcase ( qw{syntax01 syntax02 syntax03} ) {
|
||||
$json = read_file( 't/profiles/Test-'.$testcase.'-only.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
my %testcases;
|
||||
foreach my $result ( Zonemaster::Engine->test_module( q{syntax}, q{afnic.fr} ) ) {
|
||||
if ( $result->testcase && $result->testcase ne 'Unspecified' ) {
|
||||
$testcases{$result->testcase} = 1;
|
||||
}
|
||||
}
|
||||
eq_or_diff( [ map { lc $_ } keys %testcases ], [ $testcase ], 'expected test-case ('. $testcase .')' );
|
||||
}
|
||||
|
||||
$json = read_file( 't/profiles/Test-syntax-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my $ns_ok = Zonemaster::Engine->zone( q{ns1.nic.fr} );
|
||||
my $dn_ok = Zonemaster::Engine->zone( q{www.nic.se} );
|
||||
my $dn_ko = Zonemaster::Engine->zone( q{www.nic&nac.se} );
|
||||
zone_gives( q{syntax01}, $dn_ok, q{ONLY_ALLOWED_CHARS} );
|
||||
zone_gives_not( q{syntax01}, $dn_ko, q{ONLY_ALLOWED_CHARS} );
|
||||
zone_gives( q{syntax01}, $dn_ko, q{NON_ALLOWED_CHARS} );
|
||||
zone_gives_not( q{syntax01}, $dn_ok, q{NON_ALLOWED_CHARS} );
|
||||
|
||||
$dn_ko = Zonemaster::Engine->zone( q{www.-nic.se} );
|
||||
zone_gives( q{syntax02}, $dn_ko, q{INITIAL_HYPHEN} );
|
||||
zone_gives_not( q{syntax02}, $dn_ko, q{NO_ENDING_HYPHENS} );
|
||||
zone_gives_not( q{syntax02}, $dn_ok, q{INITIAL_HYPHEN} );
|
||||
zone_gives( q{syntax02}, $dn_ok, q{NO_ENDING_HYPHENS} );
|
||||
|
||||
$dn_ko = Zonemaster::Engine->zone( q{www.nic-.se} );
|
||||
zone_gives( q{syntax02}, $dn_ko, q{TERMINAL_HYPHEN} );
|
||||
zone_gives_not( q{syntax02}, $dn_ko, q{NO_ENDING_HYPHENS} );
|
||||
zone_gives_not( q{syntax02}, $dn_ok, q{TERMINAL_HYPHEN} );
|
||||
|
||||
my $dn_idn_ok = Zonemaster::Engine->zone( q{www.xn--nic.se} );
|
||||
$dn_ko = Zonemaster::Engine->zone( q{www.ni--c.se} );
|
||||
zone_gives( q{syntax03}, $dn_ko, q{DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax03}, $dn_ko, q{NO_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax03}, $dn_ok, q{DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax03}, $dn_idn_ok, q{DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives( q{syntax03}, $dn_ok, q{NO_DOUBLE_DASH} );
|
||||
zone_gives( q{syntax03}, $dn_idn_ok, q{NO_DOUBLE_DASH} );
|
||||
|
||||
my $zone_double_dash = Zonemaster::Engine->zone( q{ns1.ns--nic.fr} );
|
||||
zone_gives_not( q{syntax04}, $ns_ok, q{NAMESERVER_DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax04}, $zone_double_dash, q{NAMESERVER_DISCOURAGED_DOUBLE_DASH} );
|
||||
SKIP: {
|
||||
skip "need test zone", 1;
|
||||
my $ns_num_tld; # TODO specify test zone
|
||||
zone_gives( q{syntax04}, $ns_num_tld, q{NAMESERVER_NUMERIC_TLD} );
|
||||
}
|
||||
|
||||
my $zone_num_tld = Zonemaster::Engine->zone( q{ns1.nic.47} );
|
||||
zone_gives_not( q{syntax04}, $ns_ok, q{NAMESERVER_NUMERIC_TLD} );
|
||||
zone_gives_not( q{syntax04}, $zone_num_tld, q{NAMESERVER_NUMERIC_TLD} );
|
||||
SKIP: {
|
||||
skip "need test zone", 1;
|
||||
my $ns_double_dash; # TODO specify test zone
|
||||
zone_gives( q{syntax04}, $ns_double_dash, q{NAMESERVER_DISCOURAGED_DOUBLE_DASH} );
|
||||
}
|
||||
|
||||
my %res;
|
||||
my $zone;
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{afnic.fr} );
|
||||
zone_gives( q{syntax05}, $zone, q{RNAME_NO_AT_SIGN} );
|
||||
zone_gives_not( q{syntax05}, $zone, q{RNAME_MISUSED_AT_SIGN} );
|
||||
zone_gives( q{syntax06}, $zone, q{RNAME_RFC822_VALID} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{RNAME_RFC822_INVALID} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{NO_RESPONSE_SOA_QUERY} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
zone_gives_not( q{syntax07}, $zone, q{MNAME_DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax07}, $zone, q{MNAME_NUMERIC_TLD} );
|
||||
zone_gives_not( q{syntax07}, $zone, q{NO_RESPONSE_SOA_QUERY} );
|
||||
zone_gives_not( q{syntax08}, $zone, q{MX_DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax08}, $zone, q{MX_NUMERIC_TLD} );
|
||||
zone_gives_not( q{syntax08}, $zone, q{NO_RESPONSE_MX_QUERY} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{syntax01.zut-root.rd.nic.fr} );
|
||||
zone_gives( q{syntax05}, $zone, q{RNAME_MISUSED_AT_SIGN} );
|
||||
zone_gives_not( q{syntax05}, $zone, q{RNAME_NO_AT_SIGN} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{RNAME_RFC822_VALID} );
|
||||
zone_gives( q{syntax06}, $zone, q{RNAME_RFC822_INVALID} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{NO_RESPONSE} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{NO_RESPONSE_SOA_QUERY} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
zone_gives_not( q{syntax06}, $zone, q{RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
zone_gives( q{syntax07}, $zone, q{MNAME_DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives( q{syntax07}, $zone, q{MNAME_NUMERIC_TLD} );
|
||||
zone_gives( q{syntax08}, $zone, q{MX_NUMERIC_TLD} );
|
||||
zone_gives( q{syntax08}, $zone, q{MX_DISCOURAGED_DOUBLE_DASH} );
|
||||
zone_gives_not( q{syntax08}, $zone, q{NO_RESPONSE_MX_QUERY} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'name.doesnotexist' );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Syntax}, q{syntax05}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Syntax}, q{syntax07}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
59
zonemaster-engine/t/Test-syntax06-A.data
Normal file
59
zonemaster-engine/t/Test-syntax06-A.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-A.t
Normal file
41
zonemaster-engine/t/Test-syntax06-A.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-A.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'a.syntax06.exempelvis.se' => {
|
||||
'ns1.a.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.a.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{a.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( $res{RNAME_RFC822_VALID}, q{should emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
67
zonemaster-engine/t/Test-syntax06-B.data
Normal file
67
zonemaster-engine/t/Test-syntax06-B.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-B.t
Normal file
41
zonemaster-engine/t/Test-syntax06-B.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-B.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'b.syntax06.exempelvis.se' => {
|
||||
'drip.ip.se' => ['192.0.2.1'],
|
||||
'drop.ip.se' => ['192.0.2.2'],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{b.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( $res{NO_RESPONSE}, q{should emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
88
zonemaster-engine/t/Test-syntax06-C.data
Normal file
88
zonemaster-engine/t/Test-syntax06-C.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-C.t
Normal file
41
zonemaster-engine/t/Test-syntax06-C.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-C.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'c.syntax06.exempelvis.se' => {
|
||||
'ns1.c.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.c.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{c.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{should emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
88
zonemaster-engine/t/Test-syntax06-D.data
Normal file
88
zonemaster-engine/t/Test-syntax06-D.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-D.t
Normal file
41
zonemaster-engine/t/Test-syntax06-D.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-D.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'd.syntax06.exempelvis.se' => {
|
||||
'ns1.d.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.d.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{d.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( $res{RNAME_RFC822_INVALID}, q{should emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
53
zonemaster-engine/t/Test-syntax06-E.data
Normal file
53
zonemaster-engine/t/Test-syntax06-E.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-E.t
Normal file
41
zonemaster-engine/t/Test-syntax06-E.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-E.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'e.syntax06.exempelvis.se' => {
|
||||
'ns1.e.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.e.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{e.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( $res{RNAME_MAIL_DOMAIN_INVALID}, q{should emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
59
zonemaster-engine/t/Test-syntax06-F.data
Normal file
59
zonemaster-engine/t/Test-syntax06-F.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-F.t
Normal file
41
zonemaster-engine/t/Test-syntax06-F.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-F.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'f.syntax06.exempelvis.se' => {
|
||||
'ns1.f.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.f.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{f.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( $res{RNAME_RFC822_VALID}, q{should emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
53
zonemaster-engine/t/Test-syntax06-G.data
Normal file
53
zonemaster-engine/t/Test-syntax06-G.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-G.t
Normal file
41
zonemaster-engine/t/Test-syntax06-G.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-G.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'g.syntax06.exempelvis.se' => {
|
||||
'ns1.g.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.g.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{g.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( $res{RNAME_MAIL_DOMAIN_INVALID}, q{should emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
53
zonemaster-engine/t/Test-syntax06-I.data
Normal file
53
zonemaster-engine/t/Test-syntax06-I.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-I.t
Normal file
41
zonemaster-engine/t/Test-syntax06-I.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-I.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'i.syntax06.exempelvis.se' => {
|
||||
'ns1.i.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.i.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{i.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( $res{RNAME_MAIL_DOMAIN_INVALID}, q{should emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( $res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
53
zonemaster-engine/t/Test-syntax06-J.data
Normal file
53
zonemaster-engine/t/Test-syntax06-J.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-J.t
Normal file
41
zonemaster-engine/t/Test-syntax06-J.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-J.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'j.syntax06.exempelvis.se' => {
|
||||
'ns1.j.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.j.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{j.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( $res{RNAME_MAIL_DOMAIN_INVALID}, q{should emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( !$res{RNAME_RFC822_VALID}, q{should not emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( $res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
53
zonemaster-engine/t/Test-syntax06-K.data
Normal file
53
zonemaster-engine/t/Test-syntax06-K.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-K.t
Normal file
41
zonemaster-engine/t/Test-syntax06-K.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-K.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'k.syntax06.exempelvis.se' => {
|
||||
'ns1.k.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.k.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{k.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( $res{RNAME_RFC822_VALID}, q{should emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
55
zonemaster-engine/t/Test-syntax06-L.data
Normal file
55
zonemaster-engine/t/Test-syntax06-L.data
Normal file
File diff suppressed because one or more lines are too long
41
zonemaster-engine/t/Test-syntax06-L.t
Normal file
41
zonemaster-engine/t/Test-syntax06-L.t
Normal file
@@ -0,0 +1,41 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Syntax} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-syntax06-L.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine->profile->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'l.syntax06.exempelvis.se' => {
|
||||
'ns1.l.syntax06.exempelvis.se' => [ '46.21.97.97', '2a02:750:12:77::97' ],
|
||||
'ns2.l.syntax06.exempelvis.se' => [ '194.18.226.122', '2001:2040:2b:1c13::53' ],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{l.syntax06.exempelvis.se} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Syntax->syntax06( $zone );
|
||||
|
||||
ok( !$res{NO_RESPONSE}, q{should not emit NO_RESPONSE} );
|
||||
ok( !$res{NO_RESPONSE_SOA_QUERY}, q{should not emit NO_RESPONSE_SOA_QUERY} );
|
||||
ok( !$res{RNAME_RFC822_INVALID}, q{should not emit RNAME_RFC822_INVALID} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_INVALID}, q{should not emit RNAME_MAIL_DOMAIN_INVALID} );
|
||||
ok( $res{RNAME_RFC822_VALID}, q{should emit RNAME_RFC822_VALID} );
|
||||
ok( !$res{RNAME_MAIL_ILLEGAL_CNAME}, q{should not emit RNAME_MAIL_ILLEGAL_CNAME} );
|
||||
ok( !$res{RNAME_MAIL_DOMAIN_LOCALHOST}, q{should not emit RNAME_MAIL_DOMAIN_LOCALHOST} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
139
zonemaster-engine/t/Test-zone.data
Normal file
139
zonemaster-engine/t/Test-zone.data
Normal file
File diff suppressed because one or more lines are too long
169
zonemaster-engine/t/Test-zone.t
Normal file
169
zonemaster-engine/t/Test-zone.t
Normal file
@@ -0,0 +1,169 @@
|
||||
use Test::More;
|
||||
use File::Slurp;
|
||||
use Data::Dumper;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-zone.data};
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
my ($json, $profile_test);
|
||||
$json = read_file( 't/profiles/Test-zone-all.json' );
|
||||
$profile_test = Zonemaster::Engine::Profile->from_json( $json );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
|
||||
my %res;
|
||||
my $zone;
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, q{afnic.fr} );
|
||||
ok( $res{RETRY_MINIMUM_VALUE_LOWER}, q{SOA 'Retry' value is too low} );
|
||||
ok( $res{REFRESH_MINIMUM_VALUE_LOWER}, q{SOA 'Refresh' value is too low} );
|
||||
ok( $res{Z01_MNAME_NO_RESPONSE}, q{SOA 'mname' nameserver does not respond} );
|
||||
ok( $res{MNAME_IS_NOT_CNAME}, q{SOA 'mname' value refers to a NS which is not an alias} );
|
||||
ok( $res{Z01_MNAME_NOT_IN_NS_LIST}, q{SOA 'mname' nameserver is not listed in "parent" NS records for tested zone} );
|
||||
ok( $res{SOA_DEFAULT_TTL_MAXIMUM_VALUE_OK}, q{SOA 'minimum' value is between the recommended ones} );
|
||||
ok( $res{REFRESH_HIGHER_THAN_RETRY}, q{SOA 'refresh' value is higher than the SOA 'retry' value} );
|
||||
ok( $res{EXPIRE_MINIMUM_VALUE_OK},
|
||||
q{SOA 'expire' value is higher than the minimum recommended value and lower than 'refresh' value} );
|
||||
ok( $res{MX_RECORD_IS_NOT_CNAME}, q{MX record for the domain is not pointing to a CNAME} );
|
||||
ok( $res{ONE_SOA} , q{Unique SOA returned} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zone01.zut-root.rd.nic.fr} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone01}, $zone );
|
||||
ok( $res{Z01_MNAME_IS_DOT}, q{SOA 'mname' is dot ('.')} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, q{zone07.zut-root.rd.nic.fr} );
|
||||
ok( $res{SOA_DEFAULT_TTL_MAXIMUM_VALUE_LOWER}, q{SOA 'minimum' value is too low} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zone05.zut-root.rd.nic.fr} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone09}, $zone );
|
||||
ok( $res{Z09_MISSING_MAIL_TARGET}, q{No MX records} );
|
||||
|
||||
#
|
||||
# zone08
|
||||
#
|
||||
$zone = Zonemaster::Engine->zone( q{zone08-mx-are-cname.zut-root.rd.nic.fr} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone08}, $zone );
|
||||
ok( $res{MX_RECORD_IS_CNAME}, q{MX records are CNAME} );
|
||||
ok( !$res{MX_RECORD_IS_NOT_CNAME}, q{MX records are CNAME (only CNAME found)} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zone08-mx-are-not-cname.zut-root.rd.nic.fr} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone08}, $zone );
|
||||
ok( $res{MX_RECORD_IS_NOT_CNAME}, q{MX records are NOT_CNAME} );
|
||||
ok( !$res{MX_RECORD_IS_CNAME}, q{MX records are NOT_CNAME (no CNAME found)} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zone08-one-mx-is-cname.zut-root.rd.nic.fr} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone08}, $zone );
|
||||
ok( $res{MX_RECORD_IS_CNAME}, q{mixed MX records are partially CNAME} );
|
||||
ok( $res{MX_RECORD_IS_NOT_CNAME}, q{mixed MX records are partially NOT CNAME} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, q{zone02.zut-root.rd.nic.fr} );
|
||||
ok( $res{Z01_MNAME_MISSING_SOA_RECORD}, q{SOA 'mname' nameserver is not authoritative for zone} );
|
||||
ok( $res{RETRY_MINIMUM_VALUE_OK}, q{SOA 'retry' value is more than the minimum recommended value} );
|
||||
ok( $res{REFRESH_MINIMUM_VALUE_OK}, q{SOA 'refresh' value is higher than the minimum recommended value} );
|
||||
ok( $res{EXPIRE_LOWER_THAN_REFRESH}, q{SOA 'expire' value is lower than the SOA 'refresh' value} );
|
||||
ok( $res{EXPIRE_MINIMUM_VALUE_LOWER}, q{SOA 'expire' value is less than the recommended one} );
|
||||
ok( $res{SOA_DEFAULT_TTL_MAXIMUM_VALUE_OK}, q{SOA 'minimum' value is between the recommended ones} );
|
||||
|
||||
subtest 'user defined SOA values' => sub {
|
||||
$zone = Zonemaster::Engine->zone( q{zone02.zut-root.rd.nic.fr} );
|
||||
|
||||
subtest 'SOA retry, refresh, expire' => sub {
|
||||
my $new_refresh = 86400;
|
||||
my $new_retry = 7200;
|
||||
my $new_expire = 86400;
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{test_cases_vars.zone02.SOA_REFRESH_MINIMUM_VALUE}, $new_refresh );
|
||||
Zonemaster::Engine::Profile->effective->set( q{test_cases_vars.zone04.SOA_RETRY_MINIMUM_VALUE}, $new_retry );
|
||||
Zonemaster::Engine::Profile->effective->set( q{test_cases_vars.zone05.SOA_EXPIRE_MINIMUM_VALUE}, $new_expire );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, $zone );
|
||||
ok( $res{REFRESH_MINIMUM_VALUE_LOWER}, q{SOA 'refresh' value is lower than the minimum user defined value} );
|
||||
ok( $res{RETRY_MINIMUM_VALUE_LOWER}, q{SOA 'retry' value is lower than the minimum user defined value} );
|
||||
ok( $res{EXPIRE_MINIMUM_VALUE_LOWER}, q{SOA 'expire' value is lower than the minimum user defined value} );
|
||||
};
|
||||
|
||||
subtest 'SOA minimum TTL' => sub {
|
||||
my $new_ttl_min = 7200;
|
||||
my $new_ttl_max = 3600;
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{test_cases_vars.zone06.SOA_DEFAULT_TTL_MINIMUM_VALUE}, $new_ttl_min );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone06}, $zone );
|
||||
ok( $res{SOA_DEFAULT_TTL_MAXIMUM_VALUE_LOWER}, q{SOA 'minimum' value is too low} );
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{test_cases_vars.zone06.SOA_DEFAULT_TTL_MAXIMUM_VALUE}, $new_ttl_max );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone06}, $zone );
|
||||
ok( $res{SOA_DEFAULT_TTL_MAXIMUM_VALUE_HIGHER}, q{SOA 'minimum' value is too high} );
|
||||
};
|
||||
|
||||
# reset the profile
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->default );
|
||||
Zonemaster::Engine::Profile->effective->merge( $profile_test );
|
||||
};
|
||||
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, q{zone03.zut-root.rd.nic.fr} );
|
||||
ok( $res{MNAME_IS_CNAME}, q{SOA 'mname' value refers to a NS which is an alias (CNAME)} );
|
||||
ok( $res{REFRESH_LOWER_THAN_RETRY}, q{SOA 'refresh' value is lower than the SOA 'retry' value} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, q{google.tf} );
|
||||
ok( $res{SOA_DEFAULT_TTL_MAXIMUM_VALUE_HIGHER}, q{SOA 'minimum' value is too high} );
|
||||
ok( $res{Z01_MNAME_IS_MASTER}, q{SOA 'mname' is authoritative master nameserver} );
|
||||
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_module( q{Zone}, q{zone04.zut-root.rd.nic.fr} );
|
||||
ok( $res{MNAME_HAS_NO_ADDRESS}, q{No IP address found for SOA 'mname' nameserver} );
|
||||
ok( $res{Z01_MNAME_NOT_RESOLVE}, q{No IP address found for SOA 'mname' nameserver} );
|
||||
|
||||
# $zone = Zonemaster::Engine->zone( 'alcatel.se' );
|
||||
# %res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone07}, $zone );
|
||||
# ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
|
||||
# $zone = Zonemaster::Engine->zone( 'stromstadsoptiska.se' );
|
||||
# %res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone08}, $zone );
|
||||
# ok( $res{NO_RESPONSE_MX_QUERY}, q{No response from nameserver(s) on MX queries} );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( 'name.doesnotexist' );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone02}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone03}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone04}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone05}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone06}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone07}, $zone );
|
||||
ok( $res{NO_RESPONSE_SOA_QUERY}, q{No response from nameserver(s) on SOA queries} );
|
||||
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv4}, 1 );
|
||||
Zonemaster::Engine::Profile->effective->set( q{net.ipv6}, 0 );
|
||||
|
||||
$zone = Zonemaster::Engine->zone( q{zonemaster.net} );
|
||||
%res = map { $_->tag => 1 } Zonemaster::Engine->test_method( q{Zone}, q{zone01}, $zone );
|
||||
ok( $res{Z01_MNAME_IS_MASTER}, q{SOA 'mname' is authoritative master nameserver} );
|
||||
|
||||
TODO: {
|
||||
local $TODO = "Need to find/create zones with that error";
|
||||
|
||||
# zone01
|
||||
ok( $tag{Z01_MNAME_HAS_LOCALHOST_ADDR}, q{Z01_MNAME_HAS_LOCALHOST_ADDR} );
|
||||
ok( $tag{Z01_MNAME_IS_LOCALHOST}, q{Z01_MNAME_IS_LOCALHOST} );
|
||||
ok( $tag{Z01_MNAME_NOT_AUTHORITATIVE}, q{Z01_MNAME_NOT_AUTHORITATIVE} );
|
||||
ok( $tag{Z01_MNAME_NOT_MASTER}, q{Z01_MNAME_NOT_MASTER} );
|
||||
ok( $tag{Z01_MNAME_UNEXPECTED_RCODE}, q{Z01_MNAME_UNEXPECTED_RCODE} );
|
||||
}
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
32
zonemaster-engine/t/Test-zone01-A.data
Normal file
32
zonemaster-engine/t/Test-zone01-A.data
Normal file
@@ -0,0 +1,32 @@
|
||||
a.root-servers.net 2001:0503:ba3e:0000:0000:0000:0002:0030 {}
|
||||
a.root-servers.net 198.41.0.4 {}
|
||||
k.root-servers.net 193.0.14.129 {}
|
||||
k.root-servers.net 2001:07fd:0000:0000:0000:0000:0000:0001 {}
|
||||
f.root-servers.net 192.5.5.241 {}
|
||||
f.root-servers.net 2001:0500:002f:0000:0000:0000:0000:000f {}
|
||||
ibdns01.labs.prive.nic.fr 10.1.72.23 {"HBLv6qWzV1xB7f8Avq/A1g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"LfSEAAABAAMAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","answerfrom":"10.1.72.23","querytime":5,"timestamp":1673535164.34914}}},"hTdaAXoiOEV3SsYc6u3NDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673535164.34415,"data":"rX2EAAABAAAAAAAAAm5zAnhhAAAcAAE="}}},"hfOhYkPFLBGlUfgEtSud7w":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"j5yEAAABAAEAAAAAA25zMxBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGQ==","timestamp":1673535164.37835,"answerfrom":"10.1.72.23","querytime":4}}},"rS2FrWd9HNZlBzrxBdoCog":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673535164.35618,"data":"/aKEAAABAAEAAAAAA25zMRBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIFw=="}}},"cP9WhuSKQ/RaF0l8dt2+CA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"answerfrom":"10.1.72.23","timestamp":1673535164.38369,"data":"tHSEAAABAAAAAAAAA25zMxBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"5h1JfKzS9Dyxd66CecNE9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.36804,"querytime":3,"answerfrom":"10.1.72.23","data":"tOOEAAABAAEAAAAAA25zMhBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGA=="}}},"FraPJ7RA4O5iaLMFztqK/w":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.37306,"querytime":3,"answerfrom":"10.1.72.23","data":"noiEAAABAAAAAAAAA25zMhBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"l7VttscyKGtmhADDWHDKDg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"AoaEAAABAAAAAAAAA25zMRBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673535164.36204,"answerfrom":"10.1.72.23","querytime":4}}},"VJNyjYTEkq/zkSLzgFptdw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":3,"timestamp":1673535164.33889,"data":"EOCEAAABAAEAAAAAAm5zAnhhAAABAAHADAABAAEAAA4QAAQKAUgX"}}},"Bw5JYDf2ZQnVY/1hB4Hv0g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"xCGEAAABAAEAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM8AAFRgAAAOEAANu6AAAAOEA==","timestamp":1673535164.32095,"querytime":5,"answerfrom":"10.1.72.23"}}},"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"answerfrom":"10.1.72.23","timestamp":1673535164.32769,"data":"yOuEAAABAAEAAAAAAnhhAAAGAAHADAAGAAEAAA4QACQCbnPADARyb290A25pY8AMeIartQABUYAAADhAADbugAAADhA="}}}}
|
||||
b.root-servers.net 199.9.14.201 {}
|
||||
b.root-servers.net 2001:0500:0200:0000:0000:0000:0000:000b {}
|
||||
ns2.mname-not-master.zone01.xa 10.1.72.24 {"Bw5JYDf2ZQnVY/1hB4Hv0g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"answerfrom":"10.1.72.24","timestamp":1673535164.39348,"data":"9VSEAAABAAEAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM9AAFRgAAAOEAANu6AAAAOEA=="}}},"HBLv6qWzV1xB7f8Avq/A1g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"TxSEAAABAAMAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","timestamp":1673535164.40454,"querytime":5,"answerfrom":"10.1.72.24"}}},"X5EINI94ZoFjRgtYt3T+tA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"tgGEAAABAAEAAAAAAnhhAAACAAHADAACAAEAAA4QAAUCbnPADA==","querytime":4,"answerfrom":"10.1.72.24","timestamp":1673535164.33332}}}}
|
||||
l.root-servers.net 2001:0500:009f:0000:0000:0000:0000:0042 {}
|
||||
l.root-servers.net 199.7.83.42 {}
|
||||
j.root-servers.net 192.58.128.30 {}
|
||||
j.root-servers.net 2001:0503:0c27:0000:0000:0000:0002:0030 {}
|
||||
c.root-servers.net 192.33.4.12 {}
|
||||
c.root-servers.net 2001:0500:0002:0000:0000:0000:0000:000c {}
|
||||
h.root-servers.net 198.97.190.53 {}
|
||||
h.root-servers.net 2001:0500:0001:0000:0000:0000:0000:0053 {}
|
||||
d.root-servers.net 2001:0500:002d:0000:0000:0000:0000:000d {}
|
||||
d.root-servers.net 199.7.91.13 {}
|
||||
i.root-servers.net 2001:07fe:0000:0000:0000:0000:0000:0053 {}
|
||||
i.root-servers.net 192.36.148.17 {}
|
||||
m.root-servers.net 202.12.27.33 {"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.30251,"querytime":3,"answerfrom":"202.12.27.33","data":"C6uEAwABAAAAAQAAAnhhAAAGAAEAAAYAAQAAAAAAQAFhDHJvb3Qtc2VydmVycwNuZXQABW5zdGxkDHZlcmlzaWduLWdycwNjb20AeJSzgAAABwgAAAOEAAk6gAABUYA="}}}}
|
||||
m.root-servers.net 2001:0dc3:0000:0000:0000:0000:0000:0035 {"Y/IeIwIJb12zVtYwf7MnYA":null}
|
||||
g.root-servers.net 192.112.36.4 {}
|
||||
g.root-servers.net 2001:0500:0012:0000:0000:0000:0000:0d0d {}
|
||||
e.root-servers.net 192.203.230.10 {}
|
||||
e.root-servers.net 2001:0500:00a8:0000:0000:0000:0000:000e {}
|
||||
ns.xa 10.1.72.23 {"HBLv6qWzV1xB7f8Avq/A1g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":5,"answerfrom":"10.1.72.23","timestamp":1673535164.34914,"data":"LfSEAAABAAMAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw="}}},"hTdaAXoiOEV3SsYc6u3NDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.34415,"answerfrom":"10.1.72.23","querytime":4,"data":"rX2EAAABAAAAAAAAAm5zAnhhAAAcAAE="}}},"hfOhYkPFLBGlUfgEtSud7w":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.37835,"querytime":4,"answerfrom":"10.1.72.23","data":"j5yEAAABAAEAAAAAA25zMxBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGQ=="}}},"rS2FrWd9HNZlBzrxBdoCog":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.35618,"answerfrom":"10.1.72.23","querytime":4,"data":"/aKEAAABAAEAAAAAA25zMRBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIFw=="}}},"cP9WhuSKQ/RaF0l8dt2+CA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673535164.38369,"data":"tHSEAAABAAAAAAAAA25zMxBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"5h1JfKzS9Dyxd66CecNE9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"tOOEAAABAAEAAAAAA25zMhBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGA==","timestamp":1673535164.36804,"answerfrom":"10.1.72.23","querytime":3}}},"FraPJ7RA4O5iaLMFztqK/w":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":3,"timestamp":1673535164.37306,"data":"noiEAAABAAAAAAAAA25zMhBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"l7VttscyKGtmhADDWHDKDg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.36204,"answerfrom":"10.1.72.23","querytime":4,"data":"AoaEAAABAAAAAAAAA25zMRBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"VJNyjYTEkq/zkSLzgFptdw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.33889,"answerfrom":"10.1.72.23","querytime":3,"data":"EOCEAAABAAEAAAAAAm5zAnhhAAABAAHADAABAAEAAA4QAAQKAUgX"}}},"Bw5JYDf2ZQnVY/1hB4Hv0g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":5,"timestamp":1673535164.32095,"data":"xCGEAAABAAEAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM8AAFRgAAAOEAANu6AAAAOEA=="}}},"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673535164.32769,"data":"yOuEAAABAAEAAAAAAnhhAAAGAAHADAAGAAEAAA4QACQCbnPADARyb290A25pY8AMeIartQABUYAAADhAADbugAAADhA="}}}}
|
||||
ns1.mname-not-master.zone01.xa 10.1.72.23 {"HBLv6qWzV1xB7f8Avq/A1g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.34914,"querytime":5,"answerfrom":"10.1.72.23","data":"LfSEAAABAAMAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw="}}},"hTdaAXoiOEV3SsYc6u3NDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"rX2EAAABAAAAAAAAAm5zAnhhAAAcAAE=","querytime":4,"answerfrom":"10.1.72.23","timestamp":1673535164.34415}}},"hfOhYkPFLBGlUfgEtSud7w":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"j5yEAAABAAEAAAAAA25zMxBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGQ==","answerfrom":"10.1.72.23","querytime":4,"timestamp":1673535164.37835}}},"rS2FrWd9HNZlBzrxBdoCog":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673535164.35618,"data":"/aKEAAABAAEAAAAAA25zMRBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIFw=="}}},"cP9WhuSKQ/RaF0l8dt2+CA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.38369,"querytime":4,"answerfrom":"10.1.72.23","data":"tHSEAAABAAAAAAAAA25zMxBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"5h1JfKzS9Dyxd66CecNE9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":3,"answerfrom":"10.1.72.23","timestamp":1673535164.36804,"data":"tOOEAAABAAEAAAAAA25zMhBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGA=="}}},"FraPJ7RA4O5iaLMFztqK/w":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":3,"timestamp":1673535164.37306,"data":"noiEAAABAAAAAAAAA25zMhBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"l7VttscyKGtmhADDWHDKDg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"answerfrom":"10.1.72.23","timestamp":1673535164.36204,"data":"AoaEAAABAAAAAAAAA25zMRBtbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"VJNyjYTEkq/zkSLzgFptdw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":3,"answerfrom":"10.1.72.23","timestamp":1673535164.33889,"data":"EOCEAAABAAEAAAAAAm5zAnhhAAABAAHADAABAAEAAA4QAAQKAUgX"}}},"Bw5JYDf2ZQnVY/1hB4Hv0g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"xCGEAAABAAEAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM8AAFRgAAAOEAANu6AAAAOEA==","querytime":5,"answerfrom":"10.1.72.23","timestamp":1673535164.32095}}},"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"yOuEAAABAAEAAAAAAnhhAAAGAAHADAAGAAEAAA4QACQCbnPADARyb290A25pY8AMeIartQABUYAAADhAADbugAAADhA=","timestamp":1673535164.32769,"querytime":4,"answerfrom":"10.1.72.23"}}}}
|
||||
ibdns01-24.labs.prive.nic.fr 10.1.72.24 {"Bw5JYDf2ZQnVY/1hB4Hv0g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"9VSEAAABAAEAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM9AAFRgAAAOEAANu6AAAAOEA==","timestamp":1673535164.39348,"answerfrom":"10.1.72.24","querytime":4}}},"HBLv6qWzV1xB7f8Avq/A1g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"TxSEAAABAAMAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","answerfrom":"10.1.72.24","querytime":5,"timestamp":1673535164.40454}}},"X5EINI94ZoFjRgtYt3T+tA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673535164.33332,"answerfrom":"10.1.72.24","querytime":4,"data":"tgGEAAABAAEAAAAAAnhhAAACAAHADAACAAEAAA4QAAUCbnPADA=="}}}}
|
||||
ns3.mname-not-master.zone01.xa 10.1.72.25 {"HBLv6qWzV1xB7f8Avq/A1g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"5EOEAAABAAMAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","timestamp":1673535164.41021,"answerfrom":"10.1.72.25","querytime":4}}},"Bw5JYDf2ZQnVY/1hB4Hv0g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"1Q+EAAABAAEAAAAAEG1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM9AAFRgAAAOEAANu6AAAAOEA==","timestamp":1673535164.39916,"answerfrom":"10.1.72.25","querytime":4}}}}
|
||||
45
zonemaster-engine/t/Test-zone01-A.t
Normal file
45
zonemaster-engine/t/Test-zone01-A.t
Normal file
@@ -0,0 +1,45 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-zone01-A.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'xa' => {
|
||||
'ibdns01.labs.prive.nic.fr' => ['10.1.72.23'],
|
||||
'ibdns01-24.labs.prive.nic.fr' => ['10.1.72.24'],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{mname-not-master.zone01.xa} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Zone->zone01( $zone );
|
||||
|
||||
ok( !$res{Z01_MNAME_HAS_LOCALHOST_ADDR}, q{should not emit Z01_MNAME_HAS_LOCALHOST_ADDR} );
|
||||
ok( !$res{Z01_MNAME_IS_DOT}, q{should not emit Z01_MNAME_IS_DOT} );
|
||||
ok( !$res{Z01_MNAME_IS_LOCALHOST}, q{should not emit Z01_MNAME_IS_LOCALHOST} );
|
||||
ok( !$res{Z01_MNAME_IS_MASTER}, q{should not emit Z01_MNAME_IS_MASTER} );
|
||||
ok( !$res{Z01_MNAME_MISSING_SOA_RECORD}, q{should not emit Z01_MNAME_MISSING_SOA_RECORD} );
|
||||
ok( !$res{Z01_MNAME_NO_RESPONSE}, q{should not emit Z01_MNAME_NO_RESPONSE} );
|
||||
ok( !$res{Z01_MNAME_NOT_AUTHORITATIVE}, q{should not emit Z01_MNAME_NOT_AUTHORITATIVE} );
|
||||
ok( !$res{Z01_MNAME_NOT_IN_NS_LIST}, q{should not emit Z01_MNAME_NOT_IN_NS_LIST} );
|
||||
ok( $res{Z01_MNAME_NOT_MASTER}, q{should emit Z01_MNAME_NOT_MASTER} );
|
||||
ok( !$res{Z01_MNAME_NOT_RESOLVE}, q{should not emit Z01_MNAME_NOT_RESOLVE} );
|
||||
ok( !$res{Z01_MNAME_UNEXPECTED_RCODE}, q{should not emit Z01_MNAME_UNEXPECTED_RCODE} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
32
zonemaster-engine/t/Test-zone01-B.data
Normal file
32
zonemaster-engine/t/Test-zone01-B.data
Normal file
@@ -0,0 +1,32 @@
|
||||
c.root-servers.net 192.33.4.12 {}
|
||||
c.root-servers.net 2001:0500:0002:0000:0000:0000:0000:000c {}
|
||||
ns3.multi-mname-not-master.zone01.xa 10.1.72.25 {"AlakLnUrh/ZXvFdKsIi0/g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.25","querytime":4,"timestamp":1673537145.20686,"data":"XymEAAABAAEAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMywAwEcm9vdANuaWMEdGVzdAB4hyM9AAFRgAAAOEAANu6AAAAOEA=="}}},"tAM/Cd6kvSIRftXIpFhUOA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.25","querytime":4,"timestamp":1673537145.2179,"data":"FF+EAAABAAMAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw="}}}}
|
||||
ibdns01-24.labs.prive.nic.fr 10.1.72.24 {"AlakLnUrh/ZXvFdKsIi0/g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"data":"wRGEAAABAAEAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMywAwEcm9vdANuaWMEdGVzdAB4hyM9AAFRgAAAOEAANu6AAAAOEA==","timestamp":1673537145.20141,"answerfrom":"10.1.72.24"}}},"tAM/Cd6kvSIRftXIpFhUOA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.24","querytime":5,"data":"GtiEAAABAAMAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","timestamp":1673537145.21227}}},"X5EINI94ZoFjRgtYt3T+tA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673537145.13933,"data":"vwKEAAABAAEAAAAAAnhhAAACAAHADAACAAEAAA4QAAUCbnPADA==","querytime":4,"answerfrom":"10.1.72.24"}}}}
|
||||
h.root-servers.net 2001:0500:0001:0000:0000:0000:0000:0053 {}
|
||||
h.root-servers.net 198.97.190.53 {}
|
||||
k.root-servers.net 193.0.14.129 {}
|
||||
k.root-servers.net 2001:07fd:0000:0000:0000:0000:0000:0001 {}
|
||||
i.root-servers.net 192.36.148.17 {}
|
||||
i.root-servers.net 2001:07fe:0000:0000:0000:0000:0000:0053 {}
|
||||
l.root-servers.net 2001:0500:009f:0000:0000:0000:0000:0042 {}
|
||||
l.root-servers.net 199.7.83.42 {}
|
||||
ns.xa 10.1.72.23 {"5tcJAMjTWT7L+9Gkt/oJpQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673537145.17403,"data":"2SCEAAABAAEAAAAAA25zMhZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGA==","querytime":4,"answerfrom":"10.1.72.23"}}},"AlakLnUrh/ZXvFdKsIi0/g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","timestamp":1673537145.12615,"data":"5kWEAAABAAEAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM8AAFRgAAAOEAANu6AAAAOEA==","querytime":5}}},"hTdaAXoiOEV3SsYc6u3NDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":3,"data":"ggSEAAABAAAAAAAAAm5zAnhhAAAcAAE=","timestamp":1673537145.15105}}},"bdVi9vDiXOC8FksS0h6sig":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":3,"timestamp":1673537145.16292,"data":"4kmEAAABAAEAAAAAA25zMRZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIFw==","answerfrom":"10.1.72.23"}}},"tAM/Cd6kvSIRftXIpFhUOA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":5,"timestamp":1673537145.1561,"data":"jlmEAAABAAMAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","answerfrom":"10.1.72.23"}}},"gB0pz+6dQrQejm7v8U2Fow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673537145.18477,"data":"IkGEAAABAAEAAAAAA25zMxZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGQ=="}}},"9f6iUXRSDYRqdxlym2wu7A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673537145.17927,"data":"jMqEAAABAAAAAAAAA25zMhZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","querytime":4,"answerfrom":"10.1.72.23"}}},"VTs4lc27Pxo1zgxNG/k2VQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"XkCEAAABAAAAAAAAA25zMRZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673537145.1681,"querytime":4}}},"VJNyjYTEkq/zkSLzgFptdw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"DDeEAAABAAEAAAAAAm5zAnhhAAABAAHADAABAAEAAA4QAAQKAUgX","timestamp":1673537145.14536,"querytime":3}}},"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1673537145.13343,"data":"zU+EAAABAAEAAAAAAnhhAAAGAAHADAAGAAEAAA4QACQCbnPADARyb290A25pY8AMeIartQABUYAAADhAADbugAAADhA=","querytime":4,"answerfrom":"10.1.72.23"}}},"hzrMiitR1PxZG875M3+/nQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"data":"z9aEAAABAAAAAAAAA25zMxZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673537145.19038}}}}
|
||||
e.root-servers.net 192.203.230.10 {}
|
||||
e.root-servers.net 2001:0500:00a8:0000:0000:0000:0000:000e {}
|
||||
j.root-servers.net 192.58.128.30 {}
|
||||
j.root-servers.net 2001:0503:0c27:0000:0000:0000:0002:0030 {}
|
||||
m.root-servers.net 2001:0dc3:0000:0000:0000:0000:0000:0035 {"Y/IeIwIJb12zVtYwf7MnYA":null}
|
||||
m.root-servers.net 202.12.27.33 {"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":3,"timestamp":1673537145.1179,"data":"g6OEAwABAAAAAQAAAnhhAAAGAAEAAAYAAQAAAAAAQAFhDHJvb3Qtc2VydmVycwNuZXQABW5zdGxkDHZlcmlzaWduLWdycwNjb20AeJSzgAAABwgAAAOEAAk6gAABUYA=","answerfrom":"202.12.27.33"}}}}
|
||||
f.root-servers.net 2001:0500:002f:0000:0000:0000:0000:000f {}
|
||||
f.root-servers.net 192.5.5.241 {}
|
||||
a.root-servers.net 2001:0503:ba3e:0000:0000:0000:0002:0030 {}
|
||||
a.root-servers.net 198.41.0.4 {}
|
||||
g.root-servers.net 192.112.36.4 {}
|
||||
g.root-servers.net 2001:0500:0012:0000:0000:0000:0000:0d0d {}
|
||||
ns2.multi-mname-not-master.zone01.xa 10.1.72.24 {"AlakLnUrh/ZXvFdKsIi0/g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.24","timestamp":1673537145.20141,"data":"wRGEAAABAAEAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMywAwEcm9vdANuaWMEdGVzdAB4hyM9AAFRgAAAOEAANu6AAAAOEA==","querytime":4}}},"tAM/Cd6kvSIRftXIpFhUOA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":5,"timestamp":1673537145.21227,"data":"GtiEAAABAAMAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","answerfrom":"10.1.72.24"}}},"X5EINI94ZoFjRgtYt3T+tA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.24","querytime":4,"timestamp":1673537145.13933,"data":"vwKEAAABAAEAAAAAAnhhAAACAAHADAACAAEAAA4QAAUCbnPADA=="}}}}
|
||||
ibdns01.labs.prive.nic.fr 10.1.72.23 {"5tcJAMjTWT7L+9Gkt/oJpQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"2SCEAAABAAEAAAAAA25zMhZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGA==","timestamp":1673537145.17403,"querytime":4,"answerfrom":"10.1.72.23"}}},"AlakLnUrh/ZXvFdKsIi0/g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":5,"data":"5kWEAAABAAEAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM8AAFRgAAAOEAANu6AAAAOEA==","timestamp":1673537145.12615}}},"hTdaAXoiOEV3SsYc6u3NDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":3,"timestamp":1673537145.15105,"data":"ggSEAAABAAAAAAAAAm5zAnhhAAAcAAE=","answerfrom":"10.1.72.23"}}},"bdVi9vDiXOC8FksS0h6sig":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"4kmEAAABAAEAAAAAA25zMRZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIFw==","timestamp":1673537145.16292,"querytime":3,"answerfrom":"10.1.72.23"}}},"tAM/Cd6kvSIRftXIpFhUOA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"jlmEAAABAAMAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","timestamp":1673537145.1561,"querytime":5}}},"gB0pz+6dQrQejm7v8U2Fow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673537145.18477,"data":"IkGEAAABAAEAAAAAA25zMxZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGQ=="}}},"9f6iUXRSDYRqdxlym2wu7A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"jMqEAAABAAAAAAAAA25zMhZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673537145.17927,"querytime":4}}},"VTs4lc27Pxo1zgxNG/k2VQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673537145.1681,"data":"XkCEAAABAAAAAAAAA25zMRZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}},"VJNyjYTEkq/zkSLzgFptdw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"DDeEAAABAAEAAAAAAm5zAnhhAAABAAHADAABAAEAAA4QAAQKAUgX","timestamp":1673537145.14536,"querytime":3,"answerfrom":"10.1.72.23"}}},"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"data":"zU+EAAABAAEAAAAAAnhhAAAGAAHADAAGAAEAAA4QACQCbnPADARyb290A25pY8AMeIartQABUYAAADhAADbugAAADhA=","timestamp":1673537145.13343,"answerfrom":"10.1.72.23"}}},"hzrMiitR1PxZG875M3+/nQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673537145.19038,"data":"z9aEAAABAAAAAAAAA25zMxZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB"}}}}
|
||||
b.root-servers.net 2001:0500:0200:0000:0000:0000:0000:000b {}
|
||||
b.root-servers.net 199.9.14.201 {}
|
||||
ns1.multi-mname-not-master.zone01.xa 10.1.72.23 {"5tcJAMjTWT7L+9Gkt/oJpQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673537145.17403,"data":"2SCEAAABAAEAAAAAA25zMhZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGA=="}}},"AlakLnUrh/ZXvFdKsIi0/g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":5,"data":"5kWEAAABAAEAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAAGAAHADAAGAAEAAA4QACkDbnMxwAwEcm9vdANuaWMEdGVzdAB4hyM8AAFRgAAAOEAANu6AAAAOEA==","timestamp":1673537145.12615,"answerfrom":"10.1.72.23"}}},"hTdaAXoiOEV3SsYc6u3NDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"ggSEAAABAAAAAAAAAm5zAnhhAAAcAAE=","timestamp":1673537145.15105,"querytime":3,"answerfrom":"10.1.72.23"}}},"bdVi9vDiXOC8FksS0h6sig":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":3,"data":"4kmEAAABAAEAAAAAA25zMRZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIFw==","timestamp":1673537145.16292}}},"tAM/Cd6kvSIRftXIpFhUOA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"jlmEAAABAAMAAAAAFm11bHRpLW1uYW1lLW5vdC1tYXN0ZXIGem9uZTAxAnhhAAACAAHADAACAAEAAA4QAAYDbnMxwAzADAACAAEAAA4QAAYDbnMywAzADAACAAEAAA4QAAYDbnMzwAw=","timestamp":1673537145.1561,"querytime":5}}},"gB0pz+6dQrQejm7v8U2Fow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"timestamp":1673537145.18477,"data":"IkGEAAABAAEAAAAAA25zMxZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAAQABwAwAAQABAAAOEAAECgFIGQ==","answerfrom":"10.1.72.23"}}},"9f6iUXRSDYRqdxlym2wu7A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"jMqEAAABAAAAAAAAA25zMhZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673537145.17927,"querytime":4}}},"VTs4lc27Pxo1zgxNG/k2VQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","data":"XkCEAAABAAAAAAAAA25zMRZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673537145.1681,"querytime":4}}},"VJNyjYTEkq/zkSLzgFptdw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"DDeEAAABAAEAAAAAAm5zAnhhAAABAAHADAABAAEAAA4QAAQKAUgX","timestamp":1673537145.14536,"querytime":3,"answerfrom":"10.1.72.23"}}},"Y/IeIwIJb12zVtYwf7MnYA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"10.1.72.23","querytime":4,"timestamp":1673537145.13343,"data":"zU+EAAABAAEAAAAAAnhhAAAGAAHADAAGAAEAAA4QACQCbnPADARyb290A25pY8AMeIartQABUYAAADhAADbugAAADhA="}}},"hzrMiitR1PxZG875M3+/nQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"data":"z9aEAAABAAAAAAAAA25zMxZtdWx0aS1tbmFtZS1ub3QtbWFzdGVyBnpvbmUwMQJ4YQAAHAAB","timestamp":1673537145.19038,"answerfrom":"10.1.72.23"}}}}
|
||||
d.root-servers.net 199.7.91.13 {}
|
||||
d.root-servers.net 2001:0500:002d:0000:0000:0000:0000:000d {}
|
||||
45
zonemaster-engine/t/Test-zone01-B.t
Normal file
45
zonemaster-engine/t/Test-zone01-B.t
Normal file
@@ -0,0 +1,45 @@
|
||||
use Test::More;
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
use_ok( q{Zonemaster::Engine::Util} );
|
||||
}
|
||||
|
||||
my $datafile = q{t/Test-zone01-B.data};
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine->add_fake_delegation(
|
||||
'xa' => {
|
||||
'ibdns01.labs.prive.nic.fr' => ['10.1.72.23'],
|
||||
'ibdns01-24.labs.prive.nic.fr' => ['10.1.72.24'],
|
||||
},
|
||||
fill_in_empty_oob_glue => 0,
|
||||
);
|
||||
|
||||
my $zone = Zonemaster::Engine->zone( q{multi-mname-not-master.zone01.xa} );
|
||||
|
||||
my %res = map { $_->tag => $_ } Zonemaster::Engine::Test::Zone->zone01( $zone );
|
||||
|
||||
ok( !$res{Z01_MNAME_HAS_LOCALHOST_ADDR}, q{should not emit Z01_MNAME_HAS_LOCALHOST_ADDR} );
|
||||
ok( !$res{Z01_MNAME_IS_DOT}, q{should not emit Z01_MNAME_IS_DOT} );
|
||||
ok( !$res{Z01_MNAME_IS_LOCALHOST}, q{should not emit Z01_MNAME_IS_LOCALHOST} );
|
||||
ok( $res{Z01_MNAME_IS_MASTER}, q{should emit Z01_MNAME_IS_MASTER} );
|
||||
ok( !$res{Z01_MNAME_MISSING_SOA_RECORD}, q{should not emit Z01_MNAME_MISSING_SOA_RECORD} );
|
||||
ok( !$res{Z01_MNAME_NO_RESPONSE}, q{should not emit Z01_MNAME_NO_RESPONSE} );
|
||||
ok( !$res{Z01_MNAME_NOT_AUTHORITATIVE}, q{should not emit Z01_MNAME_NOT_AUTHORITATIVE} );
|
||||
ok( !$res{Z01_MNAME_NOT_IN_NS_LIST}, q{should not emit Z01_MNAME_NOT_IN_NS_LIST} );
|
||||
ok( $res{Z01_MNAME_NOT_MASTER}, q{should emit Z01_MNAME_NOT_MASTER} );
|
||||
ok( !$res{Z01_MNAME_NOT_RESOLVE}, q{should not emit Z01_MNAME_NOT_RESOLVE} );
|
||||
ok( !$res{Z01_MNAME_UNEXPECTED_RCODE}, q{should not emit Z01_MNAME_UNEXPECTED_RCODE} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
4
zonemaster-engine/t/Test-zone09-1.data
Normal file
4
zonemaster-engine/t/Test-zone09-1.data
Normal file
@@ -0,0 +1,4 @@
|
||||
ns1 127.19.9.43 {"+QGSVG9DWhVyuNokG/4a6A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.9.43","data":"iMKEAAABAAEAAgABAAAPAAEAAA8AAQAADhAACAAKBG1haWwAAAACAAEAAA4QAAUDbnMxAAAAAgABAAAOEAAFA25zMgDAHgABAAEAAA4QAAR/AwAZ","querytime":0,"timestamp":1746538252.32462}}},"9kfShNTLVy4wDehBPdpCXg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.9.43","data":"zvKEAAABAAEAAgAAAAAGAAEAAAYAAQAADhAAIwNuczEABWFkbWluAnhiAHiG/CwAAFRgAAAOEAAJOoAAAVGAAAACAAEAAA4QAALAHAAAAgABAAAOEAAFA25zMgA=","querytime":0,"timestamp":1746538252.32372}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.9.43","data":"cByEAAABAAIAAAAEAAACAAEAAAIAAQAADhAABQNuczEAAAACAAEAAA4QAAUDbnMyAMAcAAEAAQAADhAABH8TCSvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkACQBDwCwAAQABAAAOEAAEfxMJLMAsABwAAQAADhAAEP2hALIAwwAAAScAGQAJAEQ=","querytime":0,"timestamp":1746538252.32215}}}}
|
||||
ns1 fda1:00b2:00c3:0000:0127:0019:0009:0043 {"+QGSVG9DWhVyuNokG/4a6A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:9:43","data":"IjKEAAABAAEAAgABAAAPAAEAAA8AAQAADhAACAAKBG1haWwAAAACAAEAAA4QAAUDbnMxAAAAAgABAAAOEAAFA25zMgDAHgABAAEAAA4QAAR/AwAZ","querytime":0,"timestamp":1746538252.3266}}},"9kfShNTLVy4wDehBPdpCXg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:9:43","data":"b4WEAAABAAEAAgAAAAAGAAEAAAYAAQAADhAAIwNuczEABWFkbWluAnhiAHiG/CwAAFRgAAAOEAAJOoAAAVGAAAACAAEAAA4QAALAHAAAAgABAAAOEAAFA25zMgA=","querytime":0,"timestamp":1746538252.32566}}}}
|
||||
ns2 127.19.9.44 {"+QGSVG9DWhVyuNokG/4a6A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.9.44","data":"HlyEAAABAAEAAgABAAAPAAEAAA8AAQAADhAACAAKBG1haWwAAAACAAEAAA4QAAUDbnMxAAAAAgABAAAOEAAFA25zMgDAHgABAAEAAA4QAAR/AwAZ","querytime":0,"timestamp":1746538252.32827}}},"9kfShNTLVy4wDehBPdpCXg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.9.44","data":"NHaEAAABAAEAAgAAAAAGAAEAAAYAAQAADhAAIwNuczEABWFkbWluAnhiAHiG/CwAAFRgAAAOEAAJOoAAAVGAAAACAAEAAA4QAALAHAAAAgABAAAOEAAFA25zMgA=","querytime":0,"timestamp":1746538252.32758}}}}
|
||||
ns2 fda1:00b2:00c3:0000:0127:0019:0009:0044 {"+QGSVG9DWhVyuNokG/4a6A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:9:44","data":"exiEAAABAAEAAgABAAAPAAEAAA8AAQAADhAACAAKBG1haWwAAAACAAEAAA4QAAUDbnMxAAAAAgABAAAOEAAFA25zMgDAHgABAAEAAA4QAAR/AwAZ","querytime":0,"timestamp":1746538252.32995}}},"9kfShNTLVy4wDehBPdpCXg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:9:44","data":"3geEAAABAAEAAgAAAAAGAAEAAAYAAQAADhAAIwNuczEABWFkbWluAnhiAHiG/CwAAFRgAAAOEAAJOoAAAVGAAAACAAEAAA4QAALAHAAAAgABAAAOEAAFA25zMgA=","querytime":0,"timestamp":1746538252.32913}}}}
|
||||
84
zonemaster-engine/t/Test-zone09-1.t
Normal file
84
zonemaster-engine/t/Test-zone09-1.t
Normal file
@@ -0,0 +1,84 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# zone09 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Zone-TP/zone09.md
|
||||
my $test_module = q{Zone};
|
||||
my $test_case = 'zone09';
|
||||
my @all_tags = qw(Z09_INCONSISTENT_MX
|
||||
Z09_INCONSISTENT_MX_DATA
|
||||
Z09_MISSING_MAIL_TARGET
|
||||
Z09_MX_DATA
|
||||
Z09_MX_FOUND
|
||||
Z09_NON_AUTH_MX_RESPONSE
|
||||
Z09_NO_MX_FOUND
|
||||
Z09_NO_RESPONSE_MX_QUERY
|
||||
Z09_NULL_MX_NON_ZERO_PREF
|
||||
Z09_NULL_MX_WITH_OTHER_MX
|
||||
Z09_ROOT_EMAIL_DOMAIN
|
||||
Z09_TLD_EMAIL_DOMAIN
|
||||
Z09_UNEXPECTED_RCODE_MX);
|
||||
|
||||
# Test case specific hints file (test-zone-data/Zone-TP/zone09/hintfile-root-email-domain)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.19.9.43', 'fda1:b2:c3::127:19:9:43' ],
|
||||
'ns2' => [ '127.19.9.44', 'fda1:b2:c3::127:19:9:44' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'ROOT-EMAIL-DOMAIN' => [
|
||||
1,
|
||||
q(.),
|
||||
[ qw(Z09_ROOT_EMAIL_DOMAIN) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
52
zonemaster-engine/t/Test-zone09.data
Normal file
52
zonemaster-engine/t/Test-zone09.data
Normal file
File diff suppressed because one or more lines are too long
180
zonemaster-engine/t/Test-zone09.t
Normal file
180
zonemaster-engine/t/Test-zone09.t
Normal file
@@ -0,0 +1,180 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Nameserver} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# zone09 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Zone-TP/zone09.md
|
||||
my $test_module = q{Zone};
|
||||
my $test_case = 'zone09';
|
||||
my @all_tags = qw(Z09_INCONSISTENT_MX
|
||||
Z09_INCONSISTENT_MX_DATA
|
||||
Z09_MISSING_MAIL_TARGET
|
||||
Z09_MX_DATA
|
||||
Z09_MX_FOUND
|
||||
Z09_NON_AUTH_MX_RESPONSE
|
||||
Z09_NO_MX_FOUND
|
||||
Z09_NO_RESPONSE_MX_QUERY
|
||||
Z09_NULL_MX_NON_ZERO_PREF
|
||||
Z09_NULL_MX_WITH_OTHER_MX
|
||||
Z09_ROOT_EMAIL_DOMAIN
|
||||
Z09_TLD_EMAIL_DOMAIN
|
||||
Z09_UNEXPECTED_RCODE_MX);
|
||||
|
||||
# Common hint file (test-zone-data/COMMON/hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.1.0.1', 'fda1:b2:c3::127:1:0:1' ],
|
||||
'ns2' => [ '127.1.0.2', 'fda1:b2:c3::127:1:0:2' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'NO-RESPONSE-MX-QUERY' => [
|
||||
1,
|
||||
q(no-response-mx-query.zone09.xa),#
|
||||
[ qw(Z09_NO_RESPONSE_MX_QUERY) ],
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'UNEXPECTED-RCODE-MX' => [
|
||||
1,
|
||||
q(unexpected-rcode-mx.zone09.xa),#
|
||||
[ qw(Z09_UNEXPECTED_RCODE_MX) ],
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NON-AUTH-MX-RESPONSE' => [
|
||||
0,
|
||||
q(non-auth-mx-response.zone09.xa),#
|
||||
[ qw(Z09_NON_AUTH_MX_RESPONSE) ],
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'INCONSISTENT-MX' => [
|
||||
1,
|
||||
q(inconsistent-mx.zone09.xa),#
|
||||
[ qw(Z09_INCONSISTENT_MX Z09_MX_FOUND Z09_NO_MX_FOUND Z09_MX_DATA) ],
|
||||
[ qw(Z09_MISSING_MAIL_TARGET) ],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'INCONSISTENT-MX-DATA' => [
|
||||
1,
|
||||
q(inconsistent-mx-data.zone09.xa),
|
||||
[ qw(Z09_INCONSISTENT_MX_DATA Z09_MX_DATA) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NULL-MX-WITH-OTHER-MX' => [
|
||||
1,
|
||||
q(null-mx-with-other-mx.zone09.xa),#
|
||||
[ qw(Z09_NULL_MX_WITH_OTHER_MX) ],
|
||||
[ qw(Z09_INCONSISTENT_MX_DATA Z09_MX_DATA Z09_MISSING_MAIL_TARGET Z09_ROOT_EMAIL_DOMAIN Z09_TLD_EMAIL_DOMAIN) ],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NULL-MX-NON-ZERO-PREF' => [
|
||||
1,
|
||||
q(null-mx-non-zero-pref.zone09.xa),#
|
||||
[ qw(Z09_NULL_MX_NON_ZERO_PREF) ],
|
||||
[ qw(Z09_INCONSISTENT_MX_DATA Z09_MX_DATA Z09_MISSING_MAIL_TARGET Z09_ROOT_EMAIL_DOMAIN Z09_TLD_EMAIL_DOMAIN) ],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'TLD-EMAIL-DOMAIN' => [
|
||||
1,
|
||||
q(tld-email-domain-zone09),
|
||||
[ qw(Z09_TLD_EMAIL_DOMAIN) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'MX-DATA' => [
|
||||
1,
|
||||
q(mx-data.zone09.xa),
|
||||
[ qw(Z09_MX_DATA) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NULL-MX' => [
|
||||
1,
|
||||
q(null-mx.zone09.xa),
|
||||
[],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-MX-SLD' => [
|
||||
1,
|
||||
q(no-mx-sld.zone09.xa),
|
||||
[ qw(Z09_MISSING_MAIL_TARGET) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-MX-TLD' => [
|
||||
1,
|
||||
q(no-mx-tld-zone09),
|
||||
[],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
],
|
||||
'NO-MX-ARPA' => [
|
||||
1,
|
||||
q(no-mx-arpa.zone09.arpa),
|
||||
[],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
8
zonemaster-engine/t/Test-zone11-1.data
Normal file
8
zonemaster-engine/t/Test-zone11-1.data
Normal file
@@ -0,0 +1,8 @@
|
||||
ns1 127.19.11.41 {"1/srhoNm4kU51g3K1bCnOw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"GxCEAAABAAEAAgAAA25zMQZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLKQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035760.0178}}},"E7qBMDDGXmejRSJUs26VXQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"EgSEAAABAAEAAgAAA25zMgZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035760.02209}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"nmGEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01333}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"RDeEAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02309}}},"xSXxUB+3LKRbWwQUx0zffw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"CoOEAAABAAEAAgAAA25zMgZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLKgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035760.02131}}},"xaqMNYuKlygOUwbAxNpesQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"X8OEAAABAAEAAgAAA25zMQZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035760.01902}}}}
|
||||
ns1 fda1:b2:c3:0:127:19:11:41 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:41","data":"4VKEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01422}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:41","data":"9ymEAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02365}}}}
|
||||
ns1.no-spf.root-servers.zone11.xa 127.19.11.41 {"1/srhoNm4kU51g3K1bCnOw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"GxCEAAABAAEAAgAAA25zMQZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLKQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035760.0178}}},"E7qBMDDGXmejRSJUs26VXQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"EgSEAAABAAEAAgAAA25zMgZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035760.02209}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"nmGEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01333}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"RDeEAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02309}}},"xSXxUB+3LKRbWwQUx0zffw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"CoOEAAABAAEAAgAAA25zMgZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLKgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035760.02131}}},"xaqMNYuKlygOUwbAxNpesQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.41","data":"X8OEAAABAAEAAgAAA25zMQZuby1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035760.01902}}}}
|
||||
ns1.no-spf.root-servers.zone11.xa fda1:b2:c3:0:127:19:11:41 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:41","data":"4VKEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01422}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:41","data":"9ymEAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02365}}}}
|
||||
ns2 127.19.11.42 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.42","data":"3/KEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01502}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.42","data":"hO+EAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02424}}}}
|
||||
ns2 fda1:b2:c3:0:127:19:11:42 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:42","data":"QKWEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01567}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:42","data":"tj+EAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02472}}}}
|
||||
ns2.no-spf.root-servers.zone11.xa 127.19.11.42 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.42","data":"3/KEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01502}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.42","data":"hO+EAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02424}}}}
|
||||
ns2.no-spf.root-servers.zone11.xa fda1:b2:c3:0:127:19:11:42 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:42","data":"QKWEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAIwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwspwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEAQcBKAAEAAQAADhAABH8TCyrASgAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBC","querytime":0,"timestamp":1763035760.01567}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:42","data":"tj+EAAABAAAAAQAAAAAQAAEAAAYAAQAADhAAPwNuczEGbm8tc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEABWFkbWluwDR4tEZQAABUYAAADhAACTqAAAFRgA==","querytime":0,"timestamp":1763035760.02472}}}}
|
||||
82
zonemaster-engine/t/Test-zone11-1.t
Normal file
82
zonemaster-engine/t/Test-zone11-1.t
Normal file
@@ -0,0 +1,82 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# Zone11 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Zone-TP/zone11.md
|
||||
my $test_module = q{Zone};
|
||||
my $test_case = 'zone11';
|
||||
my @all_tags = qw(Z11_DIFFERENT_SPF_POLICIES_FOUND
|
||||
Z11_INCONSISTENT_SPF_POLICIES
|
||||
Z11_NO_SPF_FOUND
|
||||
Z11_NO_SPF_NON_MAIL_DOMAIN
|
||||
Z11_NON_NULL_SPF_NON_MAIL_DOMAIN
|
||||
Z11_NULL_SPF_NON_MAIL_DOMAIN
|
||||
Z11_SPF_MULTIPLE_RECORDS
|
||||
Z11_SPF_SYNTAX_ERROR
|
||||
Z11_SPF_SYNTAX_OK
|
||||
Z11_UNABLE_TO_CHECK_FOR_SPF);
|
||||
|
||||
# Specific hint file (test-zone-data/Zone-TP/zone11/no-spf.hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.19.11.41', 'fda1:b2:c3::127:19:11:41' ],
|
||||
'ns2' => [ '127.19.11.42', 'fda1:b2:c3::127:19:11:42' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'NO-SPF-ROOT-ZONE' => [
|
||||
1,
|
||||
q(.),
|
||||
[ qw( Z11_NO_SPF_NON_MAIL_DOMAIN ) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
8
zonemaster-engine/t/Test-zone11-2.data
Normal file
8
zonemaster-engine/t/Test-zone11-2.data
Normal file
@@ -0,0 +1,8 @@
|
||||
ns1 127.19.11.43 {"+NXOpDMUoeyvbXm+gVb5mQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"ggOEAAABAAEAAgAAA25zMghudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAABAAHADAABAAEAAA4QAAR/EwssAAACAAEAAA4QAAYDbnMxwBAAAAIAAQAADhAAAsAM","querytime":0,"timestamp":1763035763.08767}}},"5i83Ud0FbaS3H3aJ/vE1+A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"vFaEAAABAAEAAgAAA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAABAAHADAABAAEAAA4QAAR/EwsrAAACAAEAAA4QAALADAAAAgABAAAOEAAGA25zMsAQ","querytime":0,"timestamp":1763035763.08552}}},"EWAlHZjqzh/WKx1Z0QpJLQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"woKEAAABAAEAAgAAA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAcAAHADAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDAAACAAEAAA4QAALADAAAAgABAAAOEAAGA25zMsAQ","querytime":0,"timestamp":1763035763.08658}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"oP2EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08128}}},"bV4X6Jbip7CJ2yLtZjto8A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"tc+EAAABAAEAAgAAA25zMghudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAcAAHADAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBEAAACAAEAAA4QAAYDbnMxwBAAAAIAAQAADhAAAsAM","querytime":0,"timestamp":1763035763.08835}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"IQmEAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.08957}}}}
|
||||
ns1 fda1:b2:c3:0:127:19:11:43 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:43","data":"G8SEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08223}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:43","data":"7T2EAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.09027}}}}
|
||||
ns1.null-spf.root-servers.zone11.xa 127.19.11.43 {"+NXOpDMUoeyvbXm+gVb5mQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"ggOEAAABAAEAAgAAA25zMghudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAABAAHADAABAAEAAA4QAAR/EwssAAACAAEAAA4QAAYDbnMxwBAAAAIAAQAADhAAAsAM","querytime":0,"timestamp":1763035763.08767}}},"5i83Ud0FbaS3H3aJ/vE1+A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"vFaEAAABAAEAAgAAA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAABAAHADAABAAEAAA4QAAR/EwsrAAACAAEAAA4QAALADAAAAgABAAAOEAAGA25zMsAQ","querytime":0,"timestamp":1763035763.08552}}},"EWAlHZjqzh/WKx1Z0QpJLQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"woKEAAABAAEAAgAAA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAcAAHADAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDAAACAAEAAA4QAALADAAAAgABAAAOEAAGA25zMsAQ","querytime":0,"timestamp":1763035763.08658}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"oP2EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08128}}},"bV4X6Jbip7CJ2yLtZjto8A":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"tc+EAAABAAEAAgAAA25zMghudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAcAAHADAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBEAAACAAEAAA4QAAYDbnMxwBAAAAIAAQAADhAAAsAM","querytime":0,"timestamp":1763035763.08835}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.43","data":"IQmEAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.08957}}}}
|
||||
ns1.null-spf.root-servers.zone11.xa fda1:b2:c3:0:127:19:11:43 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:43","data":"G8SEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08223}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:43","data":"7T2EAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.09027}}}}
|
||||
ns2 127.19.11.44 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.44","data":"Be+EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08299}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.44","data":"Be2EAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.09083}}}}
|
||||
ns2 fda1:b2:c3:0:127:19:11:44 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:44","data":"75aEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08369}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:44","data":"vcGEAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.09137}}}}
|
||||
ns2.null-spf.root-servers.zone11.xa 127.19.11.44 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.44","data":"Be+EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08299}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.44","data":"Be2EAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.09083}}}}
|
||||
ns2.null-spf.root-servers.zone11.xa fda1:b2:c3:0:127:19:11:44 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:44","data":"75aEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAJQNuczEIbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAAIAAQAADhAABgNuczLAIMAcAAEAAQAADhAABH8TCyvAHAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBDwEwAAQABAAAOEAAEfxMLLMBMABwAAQAADhAAEP2hALIAwwAAAScAGQARAEQ=","querytime":0,"timestamp":1763035763.08369}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:44","data":"vcGEAAABAAEAAgAAAAAQAAEAABAAAQAADhAADAt2PXNwZjEgLWFsbAAAAgABAAAOEAAlA25zMQhudWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsA3","querytime":0,"timestamp":1763035763.09137}}}}
|
||||
82
zonemaster-engine/t/Test-zone11-2.t
Normal file
82
zonemaster-engine/t/Test-zone11-2.t
Normal file
@@ -0,0 +1,82 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use Test::More;
|
||||
use File::Basename;
|
||||
use File::Spec::Functions qw( rel2abs );
|
||||
use lib dirname( rel2abs( $0 ) );
|
||||
|
||||
BEGIN {
|
||||
use_ok( q{Zonemaster::Engine} );
|
||||
use_ok( q{Zonemaster::Engine::Test::Zone} );
|
||||
use_ok( q{TestUtil}, qw( perform_testcase_testing ) );
|
||||
}
|
||||
|
||||
###########
|
||||
# Zone11 - https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/test-zones/Zone-TP/zone11.md
|
||||
my $test_module = q{Zone};
|
||||
my $test_case = 'zone11';
|
||||
my @all_tags = qw(Z11_DIFFERENT_SPF_POLICIES_FOUND
|
||||
Z11_INCONSISTENT_SPF_POLICIES
|
||||
Z11_NO_SPF_FOUND
|
||||
Z11_NO_SPF_NON_MAIL_DOMAIN
|
||||
Z11_NON_NULL_SPF_NON_MAIL_DOMAIN
|
||||
Z11_NULL_SPF_NON_MAIL_DOMAIN
|
||||
Z11_SPF_MULTIPLE_RECORDS
|
||||
Z11_SPF_SYNTAX_ERROR
|
||||
Z11_SPF_SYNTAX_OK
|
||||
Z11_UNABLE_TO_CHECK_FOR_SPF);
|
||||
|
||||
# Specific hint file (test-zone-data/Zone-TP/zone11/null-spf.hintfile)
|
||||
Zonemaster::Engine::Recursor->remove_fake_addresses( '.' );
|
||||
Zonemaster::Engine::Recursor->add_fake_addresses( '.',
|
||||
{ 'ns1' => [ '127.19.11.43', 'fda1:b2:c3::127:19:11:43' ],
|
||||
'ns2' => [ '127.19.11.44', 'fda1:b2:c3::127:19:11:44' ],
|
||||
}
|
||||
);
|
||||
|
||||
# Test zone scenarios
|
||||
# - Documentation: L<TestUtil/perform_testcase_testing()>
|
||||
# - Format: { SCENARIO_NAME => [
|
||||
# testable,
|
||||
# zone_name,
|
||||
# [ MANDATORY_MESSAGE_TAGS ],
|
||||
# [ FORBIDDEN_MESSAGE_TAGS ],
|
||||
# [ UNDELEGATED_NS ],
|
||||
# [ UNDELEGATED_DS ],
|
||||
# ] }
|
||||
#
|
||||
# - One of MANDATORY_MESSAGE_TAGS and FORBIDDEN_MESSAGE_TAGS may be undefined.
|
||||
# See documentation for the meaning of that.
|
||||
|
||||
my %subtests = (
|
||||
'NULL-SPF-ROOT-ZONE' => [
|
||||
1,
|
||||
q(.),
|
||||
[ qw( Z11_NULL_SPF_NON_MAIL_DOMAIN ) ],
|
||||
undef,
|
||||
[],
|
||||
[]
|
||||
]
|
||||
);
|
||||
|
||||
###########
|
||||
|
||||
my $datafile = 't/' . basename ($0, '.t') . '.data';
|
||||
|
||||
if ( not $ENV{ZONEMASTER_RECORD} ) {
|
||||
die q{Stored data file missing} if not -r $datafile;
|
||||
Zonemaster::Engine::Nameserver->restore( $datafile );
|
||||
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
|
||||
}
|
||||
|
||||
Zonemaster::Engine::Profile->effective->merge( Zonemaster::Engine::Profile->from_json( qq({ "test_cases": [ "$test_case" ] }) ) );
|
||||
|
||||
perform_testcase_testing( $test_case, $test_module, \@all_tags, \%subtests, $ENV{ZONEMASTER_SELECTED_SCENARIOS}, $ENV{ZONEMASTER_DISABLED_SCENARIOS} );
|
||||
|
||||
if ( $ENV{ZONEMASTER_RECORD} ) {
|
||||
Zonemaster::Engine::Nameserver->save( $datafile );
|
||||
}
|
||||
|
||||
done_testing;
|
||||
8
zonemaster-engine/t/Test-zone11-3.data
Normal file
8
zonemaster-engine/t/Test-zone11-3.data
Normal file
@@ -0,0 +1,8 @@
|
||||
ns1 127.19.11.45 {"2cR5iObPvjPB6H0gFs9GJw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"0W6EAAABAAEAAgAAA25zMQxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLLQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035765.49171}}},"7pbr4vNBUbGv75dKwZisuA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"m+yEAAABAAEAAgAAA25zMgxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035765.49467}}},"MfeuBAor8mZLuWihwyARTg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"FGiEAAABAAEAAgAAA25zMgxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLLgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035765.49393}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"ddyEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48739}}},"m6xb07AGk8b4dwOYgL48Dg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"lYSEAAABAAEAAgAAA25zMQxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035765.49272}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"wXqEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49601}}}}
|
||||
ns1 fda1:b2:c3:0:127:19:11:45 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:45","data":"jq6EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48834}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:45","data":"3JWEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49659}}}}
|
||||
ns1.non-null-spf.root-servers.zone11.xa 127.19.11.45 {"2cR5iObPvjPB6H0gFs9GJw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"0W6EAAABAAEAAgAAA25zMQxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLLQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035765.49171}}},"7pbr4vNBUbGv75dKwZisuA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"m+yEAAABAAEAAgAAA25zMgxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035765.49467}}},"MfeuBAor8mZLuWihwyARTg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"FGiEAAABAAEAAgAAA25zMgxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAAQABwAwAAQABAAAOEAAEfxMLLgAAAgABAAAOEAAGA25zMcAQAAACAAEAAA4QAALADA==","querytime":0,"timestamp":1763035765.49393}}},"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"ddyEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48739}}},"m6xb07AGk8b4dwOYgL48Dg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"lYSEAAABAAEAAgAAA25zMQxub24tbnVsbC1zcGYMcm9vdC1zZXJ2ZXJzBnpvbmUxMQJ4YQAAHAABwAwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARQAAAgABAAAOEAACwAwAAAIAAQAADhAABgNuczLAEA==","querytime":0,"timestamp":1763035765.49272}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.45","data":"wXqEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49601}}}}
|
||||
ns1.non-null-spf.root-servers.zone11.xa fda1:b2:c3:0:127:19:11:45 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:45","data":"jq6EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48834}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:45","data":"3JWEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49659}}}}
|
||||
ns2 127.19.11.46 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.46","data":"+U2EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48911}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.46","data":"09SEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49712}}}}
|
||||
ns2 fda1:b2:c3:0:127:19:11:46 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:46","data":"SwKEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48996}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:46","data":"LxaEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49768}}}}
|
||||
ns2.non-null-spf.root-servers.zone11.xa 127.19.11.46 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.46","data":"+U2EAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48911}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"127.19.11.46","data":"09SEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49712}}}}
|
||||
ns2.non-null-spf.root-servers.zone11.xa fda1:b2:c3:0:127:19:11:46 {"UzfnoYKACE71u6V/QQ17nw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:46","data":"SwKEAAABAAIAAAAEAAACAAEAAAIAAQAADhAAKQNuczEMbm9uLW51bGwtc3BmDHJvb3Qtc2VydmVycwZ6b25lMTECeGEAAAACAAEAAA4QAAYDbnMywCDAHAABAAEAAA4QAAR/EwstwBwAHAABAAAOEAAQ/aEAsgDDAAABJwAZABEARcBQAAEAAQAADhAABH8TCy7AUAAcAAEAAA4QABD9oQCyAMMAAAEnABkAEQBG","querytime":0,"timestamp":1763035765.48996}}},"xP3rhAM8Paq298pCchCvcw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"fda1:b2:c3:0:127:19:11:46","data":"LxaEAAABAAEAAgAAAAAQAAEAABAAAQAADhAAIB92PXNwZjEgaXA2OmZkYTE6YjI6YzM6Oi82NCAtYWxsAAACAAEAAA4QACkDbnMxDG5vbi1udWxsLXNwZgxyb290LXNlcnZlcnMGem9uZTExAnhhAAAAAgABAAAOEAAGA25zMsBL","querytime":0,"timestamp":1763035765.49768}}}}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user