From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#! perl -I. -w
BEGIN { $ENV{DANCER_APPDIR} = 't' }
route_exists([POST => '/system'], "/system exsits");
route_exists([POST => '/api'], "/api exists");
route_exists([POST => '/config/system'], "/config/system exists");
route_exists([POST => '/config/api'], "/config/api exists");
route_doesnt_exist([GET => '/system'], "No get for /system");
route_doesnt_exist([GET => '/'], "no GET /");
{
my $response = dancer_response(
POST => '/system',
{
headers => [
'Content-Type' => 'text/xml',
],
body => <<' EOXML',
<?xml version="1.0"?>
<methodCall>
<methodName>system.version</methodName>
<params/>
</methodCall>
EOXML
}
);
my $p = RPC::XML::ParserFactory->new();
is_deeply(
$p->parse($response->{content})->value->value,
{software_version => '1.0'},
"system.version"
);
}
{
my $response = dancer_response(
GET => '/system',
{
headers => [
'Content-Type' => 'text/xml',
],
body => <<' EOXML',
<?xml version="1.0"?>
<methodCall>
<methodName>system.version</methodName>
<params/>
</methodCall>
EOXML
}
);
is($response->status, 404, "Check method POST for xmlrpc");
}
{
my $response = dancer_response(
POST => '/system',
{
headers => [
'Content-Type' => 'application/json',
],
body => <<' EOXML',
<?xml version="1.0"?>
<methodCall>
<methodName>system.version</methodName>
<params/>
</methodCall>
EOXML
}
);
is($response->status, 404, "Check content-type xmlrpc");
}
{
my $response = dancer_response(
POST => '/system',
{
headers => [
'Content-Type' => 'text/xml',
],
body => <<' EOXML',
<?xml version="1.0"?>
<methodCall>
<methodName>system.doesnotexist</methodName>
<params/>
</methodCall>
EOXML
}
);
is($response->status, 404, "Check content-type xmlrpc");
}
{
my $old_log = read_logs(); # clean up for this test
my $response = dancer_response(
POST => '/api',
{
headers => [
'Content-Type' => 'text/xml',
],
body => <<' EOXML',
<?xml version="1.0"?>
<methodCall>
<methodName>api.uppercase</methodName>
<params>
<param>
<struct>
<member>
<name>argument</name>
<value><string>Alles grote letters</string></value>
</member>
</struct>
</param>
</params>
</methodCall>
EOXML
}
);
is($response->status, 200, "OK response");
my $p = RPC::XML::ParserFactory->new();
is_deeply(
$p->parse($response->{content})->value->value,
{uppercase => 'ALLES GROTE LETTERS'},
"system.version"
);
my @expected_logs = (
{
level => 'debug',
message => qr{^\Q[handle_xmlrpc_request] Processing:}
},
{
level => 'debug',
message => qr{^\Q[handle_xmlrpc_call(api.uppercase)]}
},
{
level => 'debug',
message => qr{^\Q[uppercase] {'argument' => 'Alles grote letters'}}
},
{
level => 'debug',
message => qr{^\Q[handled_xmlrpc_request(api.uppercase)]}
},
{
level => 'info',
message => qr{^\Q[RPC::XMLRPC]\E request for api.uppercase took 0\.\d+s},
},
{
level => 'debug',
message => qr{^\Q[xmlrpc_response] }
},
);
my $read_logs = read_logs();
for my $line (@$read_logs) {
my $test = shift @expected_logs;
is($line->{level}, $test->{level}, " Level ");
like($line->{message}, $test->{message}, " Message ");
}
}
abeltje_done_testing();