use
5.14.2;
my
$tempdir
= tempdir(
CLEANUP
=> 1 );
my
$config
= Zonemaster::Backend::Config->parse(
<<EOF );
[DB]
engine = SQLite
[SQLITE]
database_file = $tempdir/zonemaster.sqlite
[LANGUAGE]
locale = en_US fr_FR da_DK fi_FI nb_NO sl_SI sv_SE
EOF
my
$engine
= Zonemaster::Backend::RPCAPI->new(
{
dbtype
=>
$config
->DB_engine,
config
=>
$config
,
}
);
sub
start_domain_validate_params {
return
$engine
->validate_params(
$Zonemaster::Backend::RPCAPI::json_schemas
{start_domain_test},
@_
);
}
subtest
'Everything but NoWarnings'
=>
sub
{
my
$can_use_threads
=
eval
'use threads; 1'
;
my
$frontend_params
= {
ipv4
=> 1,
ipv6
=> 1,
};
$frontend_params
->{nameservers} = [
{
ns
=>
'ns1.nic.fr'
,
ip
=>
'1.2.3.4'
},
{
ns
=>
'ns2.nic.fr'
,
ip
=>
'192.134.4.1'
},
];
subtest
'domain present'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'afnic.fr'
}
);
is(
scalar
@res
, 0 );
};
subtest
'consecutive dots'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'afnic..fr'
}
);
is(
scalar
@res
, 1 );
};
subtest encode_utf8(
'idn domain=[é]'
) =>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'é'
}
);
is(
scalar
@res
, 0 )
or diag( encode_json
@res
);
};
subtest encode_utf8(
'idn domain=[éé]'
) =>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'éé'
}
);
is(
scalar
@res
, 0 )
or diag( encode_json
@res
);
};
subtest
'253 characters long domain without dot'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.com'
}
);
is(
scalar
@res
, 0 )
or diag( encode_json
@res
);
};
subtest
'254 characters long domain with trailing dot'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.com.'
}
);
is(
scalar
@res
, 0 )
or diag( encode_json
@res
);
};
subtest
'254 characters long domain without trailing dot'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.club'
}
);
cmp_ok(
scalar
@res
,
'>'
, 0 )
or diag( encode_json
@res
);
};
subtest
'63 characters long domain label'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'012345678901234567890123456789012345678901234567890123456789-63.fr'
}
);
is(
scalar
@res
, 0 )
or diag( encode_json
@res
);
};
subtest
'64 characters long domain label'
=>
sub
{
my
@res
= start_domain_validate_params(
{
%$frontend_params
,
domain
=>
'012345678901234567890123456789012345678901234567890123456789--64.fr'
}
);
cmp_ok(
scalar
@res
,
'>'
, 0 )
or diag( encode_json
@res
);
};
$frontend_params
->{domain} =
'afnic.fr'
;
$frontend_params
->{nameservers}->[0]->{ip} =
'1.2.3.4'
;
$frontend_params
->{nameservers}->[0]->{ns} =
'afnic.fr'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0,
'domain present'
);
$frontend_params
->{nameservers}->[0]->{ns} =
'é'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0, encode_utf8(
'idn domain=[é]'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ns} =
'éé'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0, encode_utf8(
'idn domain=[éé]'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ns} =
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.com'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0,
encode_utf8(
'253 characters long domain without dot'
)
) or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ns} =
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.com.'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0,
encode_utf8(
'254 characters long domain with trailing dot'
)
) or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ns} =
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.club'
;
cmp_ok(
scalar
start_domain_validate_params(
$frontend_params
),
'>'
, 0,
encode_utf8(
'254 characters long domain without trailing dot'
)
) or diag( encode_jsonstart_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ns} =
'012345678901234567890123456789012345678901234567890123456789-63.fr'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0,
encode_utf8(
'63 characters long domain label'
)
) or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ns} =
'012345678901234567890123456789012345678901234567890123456789-64-.fr'
;
cmp_ok(
scalar
start_domain_validate_params(
$frontend_params
),
'>'
, 0,
encode_utf8(
'64 characters long domain label'
) )
or diag(encode_json start_domain_validate_params(
$frontend_params
) );
delete
(
$frontend_params
->{nameservers} );
$frontend_params
->{domain} =
'afnic.fr'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0, encode_utf8(
'delegated domain exists'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{domain} =
'afnic.fr'
;
$frontend_params
->{nameservers}->[0]->{ns} =
'ns1.nic.fr'
;
$frontend_params
->{nameservers}->[0]->{ip} =
'1.2.3.4'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0, encode_utf8(
'Valid IPV4'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ip} =
'1.2.3.4444'
;
cmp_ok(
scalar
start_domain_validate_params(
$frontend_params
),
'>'
, 0, encode_utf8(
'Invalid IPV4'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ip} =
'fe80::6ef0:49ff:fe7b:e4bb'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0, encode_utf8(
'Valid IPV6'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{nameservers}->[0]->{ip} =
'fe80::6ef0:49ff:fe7b:e4bbffffff'
;
cmp_ok( start_domain_validate_params(
$frontend_params
),
'>'
, 0, encode_utf8(
'Invalid IPV6'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{domain} =
'afnic.fr'
;
$frontend_params
->{nameservers}->[0]->{ns} =
'ns1.nic.fr'
;
$frontend_params
->{nameservers}->[0]->{ip} =
'1.2.3.4'
;
$frontend_params
->{ds_info}->[0]->{algorithm} = 1;
$frontend_params
->{ds_info}->[0]->{digest} =
'0123456789012345678901234567890123456789'
;
$frontend_params
->{ds_info}->[0]->{digtype} = 1;
$frontend_params
->{ds_info}->[0]->{keytag} = 5000;
is(
scalar
start_domain_validate_params(
$frontend_params
), 0, encode_utf8(
'Valid Algorithm Type [numeric format]'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{ds_info}->[0]->{algorithm} =
'a'
;
$frontend_params
->{ds_info}->[0]->{digest} =
'0123456789012345678901234567890123456789'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 1, encode_utf8(
'Invalid Algorithm Type'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{ds_info}->[0]->{algorithm} = 1;
$frontend_params
->{ds_info}->[0]->{digest} =
'01234567890123456789012345678901234567890'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 1, encode_utf8(
'Invalid digest length'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{ds_info}->[0]->{digest} =
'Z123456789012345678901234567890123456789'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 1, encode_utf8(
'Invalid digest format'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{ds_info}->[0]->{digest} =
'0123456789012345678901234567890123456789'
;
$frontend_params
->{ds_info}->[0]->{digtype} = -1;
is(
scalar
start_domain_validate_params(
$frontend_params
), 1, encode_utf8(
'Invalid digest type'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{ds_info}->[0]->{digtype} = 1;
$frontend_params
->{ds_info}->[0]->{keytag} =
'not a int'
;
is(
scalar
start_domain_validate_params(
$frontend_params
), 1, encode_utf8(
'Invalid keytag'
) )
or diag( encode_json start_domain_validate_params(
$frontend_params
) );
$frontend_params
->{ds_info}->[0]->{keytag} = 5000;
{
local
$frontend_params
->{language} =
"zz"
;
my
@res
= start_domain_validate_params(
$frontend_params
);
is(
scalar
@res
, 1,
'Invalid language, "zz" unknown'
) or diag( explain \
@res
);
}
{
local
$frontend_params
->{language} =
"fr-FR"
;
my
@res
= start_domain_validate_params(
$frontend_params
);
is(
scalar
@res
, 1,
'Invalid language tag syntax'
) or diag( explain \
@res
);
}
{
local
$frontend_params
->{language} =
"nb_NO"
;
my
@res
= start_domain_validate_params(
$frontend_params
);
is(
scalar
@res
, 1,
'Invalid language tag syntax'
) or diag( explain \
@res
);
}
};