From ecb1454cf1b892ddd2c4fd55c9023fafa25ba152 Mon Sep 17 00:00:00 2001 From: Cole Helbling Date: Fri, 3 Dec 2021 11:33:11 -0800 Subject: [PATCH] t/Controller/Root: test narinfo path --- t/Controller/Root/narinfo.t | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 t/Controller/Root/narinfo.t diff --git a/t/Controller/Root/narinfo.t b/t/Controller/Root/narinfo.t new file mode 100644 index 00000000..297d336b --- /dev/null +++ b/t/Controller/Root/narinfo.t @@ -0,0 +1,48 @@ +use strict; +use warnings; +use Setup; +use Data::Dumper; +use JSON qw(decode_json); +my %ctx = test_init( + # Without this, the test will fail because a `file:` store is not treated as a + # local store by `isLocalStore` in src/lib/Hydra/Helper/Nix.pm, and any + # requests to /HASH.narinfo will fail. + use_external_destination_store => 0 +); + +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"); +for my $build (queuedBuildsForJobset($jobset)) { + ok(runBuild($build), "Build '".$build->job."' from jobs/basic.nix should exit with return code 0"); +} + +subtest "/HASH.narinfo" => sub { + my $build_redirect = request(GET '/job/tests/basic/empty_dir/latest-finished'); + my $url = URI->new($build_redirect->header('location'))->path; + my $json = request(GET $url, Accept => 'application/json'); + my $data = decode_json($json->content); + my $outpath = $data->{buildoutputs}{out}{path}; + my ($hash) = $outpath =~ qr{/nix/store/([a-z0-9]{32}).*}; + my $narinfo_response = request(GET "/$hash.narinfo"); + ok($narinfo_response->is_success, "Getting the narinfo of a build"); + + my ($storepath) = $narinfo_response->content =~ qr{StorePath: (.*)}; + is($storepath, $outpath, "The returned store path is the same as the out path") +}; + +done_testing;