From 97596c3e93b5a7f982ec263649f6d0aa129eac7c Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Sun, 9 Jan 2022 09:45:46 -0500 Subject: [PATCH 1/6] buildListColumns: remove project, jobset. --- src/lib/Hydra/Helper/CatalystUtils.pm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/Hydra/Helper/CatalystUtils.pm b/src/lib/Hydra/Helper/CatalystUtils.pm index 1ae61684..2a2ad86f 100644 --- a/src/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/lib/Hydra/Helper/CatalystUtils.pm @@ -33,8 +33,7 @@ our @EXPORT = qw( # Columns from the Builds table needed to render build lists. -Readonly::Array our @buildListColumns => ('id', 'finished', 'timestamp', 'stoptime', 'project', 'jobset', 'jobset_id', 'job', 'nixname', 'system', 'buildstatus', 'releasename'); - +Readonly::Array our @buildListColumns => ('id', 'finished', 'timestamp', 'stoptime', 'jobset_id', 'job', 'nixname', 'system', 'buildstatus', 'releasename'); sub getBuild { my ($c, $id) = @_; From b37ca88fd59e9984e6ccbf65af665cceed963776 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Fri, 14 Jan 2022 12:23:38 -0500 Subject: [PATCH 2/6] test /job/PROJECT/JOBSET/JOB/shield works Uses buildListColumns --- t/Hydra/Controller/Job/builds.t | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/t/Hydra/Controller/Job/builds.t b/t/Hydra/Controller/Job/builds.t index c44d1b82..4bdb5ae5 100644 --- a/t/Hydra/Controller/Job/builds.t +++ b/t/Hydra/Controller/Job/builds.t @@ -4,6 +4,7 @@ use Setup; use Test2::V0; use Catalyst::Test (); use HTTP::Request::Common; +use JSON::MaybeXS qw(decode_json); my $ctx = test_context(); @@ -28,4 +29,22 @@ subtest "/job/PROJECT/JOBSET/JOB/channel/latest" => sub { ok($response->is_success, "The page showing the job's channel returns 200."); }; +subtest "/job/PROJECT/JOBSET/JOB/shield" => sub { + my $response = request(GET '/job/' . $project->name . '/' . $jobset->name . '/' . $build->job . '/shield'); + ok($response->is_success, "The page showing the job's shield returns 200."); + + my $data; + my $valid_json = lives { $data = decode_json($response->content); }; + ok($valid_json, "We get back valid JSON."); + if (!$valid_json) { + use Data::Dumper; + print STDERR Dumper $response->content; + } + + is($data->{"color"}, "green"); + is($data->{"label"}, "hydra build"); + is($data->{"message"}, "passing"); + is($data->{"schemaVersion"}, 1); +}; + done_testing; From 4a07622195c2f085fc63b657c1f5b3ce89a92219 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Fri, 14 Jan 2022 12:24:40 -0500 Subject: [PATCH 3/6] test /job/PROJECT/JOBSET/JOB/prometheus works Uses buildListColumns --- t/Hydra/Controller/Job/builds.t | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/t/Hydra/Controller/Job/builds.t b/t/Hydra/Controller/Job/builds.t index 4bdb5ae5..965d5610 100644 --- a/t/Hydra/Controller/Job/builds.t +++ b/t/Hydra/Controller/Job/builds.t @@ -47,4 +47,9 @@ subtest "/job/PROJECT/JOBSET/JOB/shield" => sub { is($data->{"schemaVersion"}, 1); }; +subtest "/job/PROJECT/JOBSET/JOB/prometheus" => sub { + my $response = request(GET '/job/' . $project->name . '/' . $jobset->name . '/' . $build->job . '/prometheus'); + ok($response->is_success, "The page showing the job's prometheus data returns 200."); +}; + done_testing; From 2de40f86ecbd190f45d810aa57f514eb70c400bc Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Fri, 14 Jan 2022 12:25:34 -0500 Subject: [PATCH 4/6] test /job/PROJECT/JOBSET/JOB works Uses buildListColumns --- t/Hydra/Controller/Job/builds.t | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/t/Hydra/Controller/Job/builds.t b/t/Hydra/Controller/Job/builds.t index 965d5610..e1097c3e 100644 --- a/t/Hydra/Controller/Job/builds.t +++ b/t/Hydra/Controller/Job/builds.t @@ -19,6 +19,11 @@ my $build = $builds->{"empty_dir"}; my $jobset = $build->jobset; my $project = $build->project; +subtest "/job/PROJECT/JOBSET/JOB" => sub { + my $response = request(GET '/job/' . $project->name . '/' . $jobset->name . '/' . $build->job); + ok($response->is_success, "The page showing the job's overview data returns 200."); +}; + subtest "/job/PROJECT/JOBSET/JOB/all" => sub { my $response = request(GET '/job/' . $project->name . '/' . $jobset->name . '/' . $build->job . '/all'); ok($response->is_success, "The page showing the job's builds returns 200."); From 59d0259220b73c4e987762cc6d09c3db7f338da5 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Fri, 14 Jan 2022 12:30:53 -0500 Subject: [PATCH 5/6] test /eval/ID/channel works Uses buildListColumns --- t/Hydra/Controller/JobsetEval/fetch.t | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/t/Hydra/Controller/JobsetEval/fetch.t b/t/Hydra/Controller/JobsetEval/fetch.t index b129de75..14169c39 100644 --- a/t/Hydra/Controller/JobsetEval/fetch.t +++ b/t/Hydra/Controller/JobsetEval/fetch.t @@ -22,7 +22,19 @@ my $jobset = createBaseJobset("basic", "basic.nix", $ctx{jobsdir}); ok(evalSucceeds($jobset), "Evaluating jobs/basic.nix should exit with return code 0"); my ($eval, @evals) = $jobset->jobsetevals; -my $fetch = request(GET '/eval/' . $eval->id); -is($fetch->code, 200, "eval page is 200"); + +subtest "Fetching the eval's overview" => sub { + my $fetch = request(GET '/eval/' . $eval->id); + is($fetch->code, 200, "eval page is 200"); +}; + +subtest "Fetching the eval's overview" => sub { + my $fetch = request(GET '/eval/' . $eval->id . '/channel'); + use Data::Dumper; + print STDERR Dumper $fetch->content; + is($fetch->code, 200, "channel page is 200"); +}; + + done_testing; From 8383679bf6a76cf44c5628e1251ea089dd507c86 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Fri, 14 Jan 2022 12:47:48 -0500 Subject: [PATCH 6/6] test /queue and /status, both of which use buildListColumns --- t/Hydra/Controller/Root/queue-runner-status.t | 30 ---------- t/Hydra/Controller/Root/status.t | 56 +++++++++++++++++++ 2 files changed, 56 insertions(+), 30 deletions(-) delete mode 100644 t/Hydra/Controller/Root/queue-runner-status.t create mode 100644 t/Hydra/Controller/Root/status.t diff --git a/t/Hydra/Controller/Root/queue-runner-status.t b/t/Hydra/Controller/Root/queue-runner-status.t deleted file mode 100644 index 4c09803c..00000000 --- a/t/Hydra/Controller/Root/queue-runner-status.t +++ /dev/null @@ -1,30 +0,0 @@ -use strict; -use warnings; -use Setup; -use Data::Dumper; -my %ctx = test_init(); - -require Hydra::Schema; -require Hydra::Model::DB; -require Hydra::Helper::Nix; - -use Test2::V0; -require Catalyst::Test; -use HTTP::Request::Common; -Catalyst::Test->import('Hydra'); - -my $db = Hydra::Model::DB->new; -hydra_setup($db); - -my $project = $db->resultset('Projects')->create({name => "tests", displayname => "", owner => "root"}); - -my $jobset = createBaseJobset("basic", "basic.nix", $ctx{jobsdir}); - -ok(evalSucceeds($jobset), "Evaluating jobs/basic.nix should exit with return code 0"); - -subtest "/queue-runner-status" => sub { - my $global = request(GET '/queue-runner-status'); - ok($global->is_success, "The page showing the the queue runner status 200's."); -}; - -done_testing; diff --git a/t/Hydra/Controller/Root/status.t b/t/Hydra/Controller/Root/status.t new file mode 100644 index 00000000..94aa17b0 --- /dev/null +++ b/t/Hydra/Controller/Root/status.t @@ -0,0 +1,56 @@ +use strict; +use warnings; +use Setup; +use Data::Dumper; +use JSON::MaybeXS qw(decode_json); +my %ctx = test_init(); + +require Hydra::Schema; +require Hydra::Model::DB; +require Hydra::Helper::Nix; + +use Test2::V0; +require Catalyst::Test; +use HTTP::Request::Common; +Catalyst::Test->import('Hydra'); + +my $db = Hydra::Model::DB->new; +hydra_setup($db); + +my $project = $db->resultset('Projects')->create({name => "tests", displayname => "", owner => "root"}); + +my $jobset = createBaseJobset("basic", "basic.nix", $ctx{jobsdir}); + +ok(evalSucceeds($jobset), "Evaluating jobs/basic.nix should exit with return code 0"); + +subtest "/queue-runner-status" => sub { + my $global = request(GET '/queue-runner-status'); + ok($global->is_success, "The page showing the queue runner status 200's."); +}; + +subtest "/queue" => sub { + my $response = request(GET '/queue', Accept => 'application/json'); + ok($response->is_success, "The page showing the queue 200's."); + + my $data; + my $valid_json = lives { $data = decode_json($response->content); }; + ok($valid_json, "We get back valid JSON."); + if (!$valid_json) { + use Data::Dumper; + print STDERR Dumper $response->content; + } +}; +subtest "/status" => sub { + my $response = request(GET '/status', Accept => 'application/json'); + ok($response->is_success, "The page showing the status 200's."); + + my $data; + my $valid_json = lives { $data = decode_json($response->content); }; + ok($valid_json, "We get back valid JSON."); + if (!$valid_json) { + use Data::Dumper; + print STDERR Dumper $response->content; + } +}; + +done_testing;