Skip to content

Commit

Permalink
Drop OpenQA::WebAPI::Plugin::HashedParams
Browse files Browse the repository at this point in the history
  • Loading branch information
asdil12 committed Oct 2, 2024
1 parent 273008c commit 79bb742
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 136 deletions.
2 changes: 1 addition & 1 deletion lib/OpenQA/Setup.pm
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ sub setup_mojo_tmpdir () {

sub load_plugins ($server, $monitoring_root_route = undef, %options) {
push @{$server->plugins->namespaces}, 'OpenQA::WebAPI::Plugin';
$server->plugin($_) for qw(Helpers MIMETypes CSRF REST HashedParams Gru YAML);
$server->plugin($_) for qw(Helpers MIMETypes CSRF REST Gru YAML);
$server->plugin('AuditLog') if $server->config->{global}{audit_enabled};
# Load arbitrary plugins defined in config: 'plugins' in section
# '[global]' can be a space-separated list of plugins to load, by
Expand Down
7 changes: 2 additions & 5 deletions lib/OpenQA/WebAPI/Controller/API/V1/Table.pm
Original file line number Diff line number Diff line change
Expand Up @@ -354,10 +354,7 @@ sub _prepare_settings {
my ($self, $table, $entry) = @_;
my $validation = $self->validation;
my $hp;
# accept both traditional application/x-www-form-urlencoded parameters
# with hash entries having key names encoded like settings[value1]
# (see doc at the end of HashedParams.pm)
# as well as modern application/json encoded hashes
# accept modern application/json encoded hashes
my $error;
if ($self->req->headers->content_type =~ /^application\/json/) {
try {
Expand All @@ -377,7 +374,7 @@ sub _prepare_settings {
$validation->input($hp);
}
else {
$hp = $self->hparams();
return 'Invalid request Content-Type ' . $self->req->headers->content_type . '. Expecting application/json.';
}

for my $par (@{$TABLES{$table}->{required}}) {
Expand Down
111 changes: 0 additions & 111 deletions lib/OpenQA/WebAPI/Plugin/HashedParams.pm

This file was deleted.

43 changes: 24 additions & 19 deletions t/api/05-machines.t
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,14 @@ is_deeply(
) || diag explain $t->tx->res->json;


$t->post_ok('/api/v1/machines', form => {name => "testmachine"})->status_is(400)
$t->post_ok('/api/v1/machines', json => {name => "testmachine"})->status_is(400)
->json_is('/error', 'Missing parameter: backend');
$t->post_ok('/api/v1/machines', form => {backend => "kde/usb"})->status_is(400)
$t->post_ok('/api/v1/machines', json => {backend => "kde/usb"})->status_is(400)
->json_is('/error', 'Missing parameter: name');
$t->post_ok('/api/v1/machines', form => {})->status_is(400)->json_is('/error', 'Missing parameter: backend, name');
$t->post_ok('/api/v1/machines', json => {})->status_is(400)->json_is('/error', 'Missing parameter: backend, name');

$t->post_ok('/api/v1/machines',
form => {name => "testmachine", backend => "qemu", "settings[TEST]" => "val1", "settings[TEST2]" => "val1"})
json => {name => "testmachine", backend => "qemu", "settings" => {"TEST" => "val1", "TEST2" => "val1"}})
->status_is(200);
my $machine_id = $t->tx->res->json->{id};
my $event = OpenQA::Test::Case::find_most_recent_event($t->app->schema, 'table_create');
Expand All @@ -80,19 +80,19 @@ $t->get_ok('/api/v1/machines', form => {name => "testmachine"})->status_is(200);
is($t->tx->res->json->{Machines}->[0]->{id}, $machine_id);

$t->post_ok('/api/v1/machines',
form => {name => "testmachineQ", backend => "qemu", "settings[TEST]" => "'v'al1", "settings[TEST2]" => "va'l\'1"})
json => {name => "testmachineQ", backend => "qemu", "settings" => {"TEST" => "'v'al1", "TEST2" => "va'l\'1"}})
->status_is(200);
$t->get_ok('/api/v1/machines', form => {name => "testmachineQ"})->status_is(200);
is($t->tx->res->json->{Machines}->[0]->{settings}->[0]->{value}, "'v'al1");
is($t->tx->res->json->{Machines}->[0]->{settings}->[1]->{value}, "va'l\'1");

$t->post_ok('/api/v1/machines', form => {name => "testmachineZ", backend => "qemu", "settings[TE'S\'T]" => "'v'al1"})
->status_is(200);
$t->post_ok('/api/v1/machines',
json => {name => "testmachineZ", backend => "qemu", "settings" => {"TE'S\'T" => "'v'al1"}})->status_is(200);
$t->get_ok('/api/v1/machines', form => {name => "testmachineQ"})->status_is(200);
is($t->tx->res->json->{Machines}->[0]->{settings}->[0]->{key}, "TEST");
is($t->tx->res->json->{Machines}->[0]->{settings}->[0]->{value}, "'v'al1");

$t->post_ok('/api/v1/machines', form => {name => "testmachine", backend => "qemu"})->status_is(400); #already exists
$t->post_ok('/api/v1/machines', json => {name => "testmachine", backend => "qemu"})->status_is(400); #already exists

$t->get_ok("/api/v1/machines/$machine_id")->status_is(200);
is_deeply(
Expand All @@ -117,7 +117,7 @@ is_deeply(
) || diag explain $t->tx->res->json;

$t->put_ok("/api/v1/machines/$machine_id",
form => {name => "testmachine", backend => "qemu", "settings[TEST2]" => "val1"})->status_is(200);
json => {name => "testmachine", backend => "qemu", settings => {"TEST2" => "val1"}})->status_is(200);

$t->get_ok("/api/v1/machines/$machine_id")->status_is(200);
is_deeply(
Expand All @@ -143,6 +143,9 @@ $t->put_ok("/api/v1/machines/$machine_id", json => {name => "testmachine", "sett
$t->put_ok("/api/v1/machines/$machine_id", => {'Content-Type' => 'application/json'} => '{BROKEN JSON')->status_is(400)
->json_like('/error', qr/expected, at character offset/);

$t->put_ok("/api/v1/machines/$machine_id", => {'Content-Type' => 'text/html'})->status_is(400)
->json_like('/error', qr/Invalid request Content-Type/);

$t->put_ok("/api/v1/machines/$machine_id",
json => {name => "testmachine", backend => "qemu", "settings" => {"TEST2" => "val2"}})->status_is(200);

Expand Down Expand Up @@ -170,12 +173,13 @@ $t->delete_ok("/api/v1/machines/$machine_id")->status_is(404); #not found
subtest 'trim whitespace characters' => sub {
$t->post_ok(
'/api/v1/machines',
form => {
json => {
name => " create_with_space ",
backend => " qemu ",
"settings[ TEST ]" => " test value ",
"settings[TEST2 ]" => " test value2 ",
})->status_is(200);
settings => {
" TEST " => " test value ",
"TEST2 " => " test value2 "
}})->status_is(200);
my $id = $t->tx->res->json->{id};
$t->get_ok("/api/v1/machines/$id")->status_is(200);
$t->json_is(
Expand All @@ -200,12 +204,13 @@ subtest 'trim whitespace characters' => sub {

$t->put_ok(
"/api/v1/machines/$id",
form => {
json => {
name => " update_with_space ",
backend => "qemu ",
"settings[ TEST ]" => " new test value ",
"settings[ TEST3]" => " new test value3 ",
})->status_is(200);
settings => {
" TEST " => " new test value ",
" TEST3" => " new test value3 "
}})->status_is(200);
$t->get_ok("/api/v1/machines/$id")->status_is(200);
$t->json_is(
'' => {
Expand All @@ -231,10 +236,10 @@ subtest 'trim whitespace characters' => sub {
# switch to operator (default client) and try some modifications
client($t);
$t->post_ok('/api/v1/machines',
form => {name => "testmachine", backend => "qemu", "settings[TEST]" => "val1", "settings[TEST2]" => "val1"})
json => {name => "testmachine", backend => "qemu", "settings" => {"TEST" => "val1", "TEST2" => "val1"}})
->status_is(403);
$t->put_ok("/api/v1/machines/$machine_id",
form => {name => "testmachine", backend => "qemu", "settings[TEST2]" => "val1"})->status_is(403);
json => {name => "testmachine", backend => "qemu", "settings" => {"TEST2" => "val1"}})->status_is(403);
$t->delete_ok("/api/v1/machines/$machine_id")->status_is(403);

subtest 'server-side limit has precedence over user-specified limit' => sub {
Expand Down

0 comments on commit 79bb742

Please sign in to comment.