forked from lix-project/hydra
Pierre Bourdon
370a4bf138
The feature cannot easily be ported to nix-eval-jobs since it requires deep integration into the evaluator, and h.n.o doesn't use it. Later more of this will be ripped out.
82 lines
2.6 KiB
Perl
82 lines
2.6 KiB
Perl
use strict;
|
|
use warnings;
|
|
use Setup;
|
|
use JSON::MaybeXS qw(decode_json encode_json);
|
|
use Data::Dumper;
|
|
use URI;
|
|
use Test2::V0;
|
|
use Catalyst::Test ();
|
|
use HTTP::Request::Common;
|
|
|
|
my %ctx = test_init();
|
|
|
|
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("aggregate", "aggregate.nix", $ctx{jobsdir});
|
|
|
|
ok(evalSucceeds($jobset), "Evaluating jobs/aggregate.nix should exit with return code 0");
|
|
is(nrQueuedBuildsForJobset($jobset), 3, "Evaluating jobs/aggregate.nix should result in 3 builds");
|
|
my $aggregateBuild;
|
|
for my $build (queuedBuildsForJobset($jobset)) {
|
|
if ($build->nixname eq "aggregate") {
|
|
$aggregateBuild = $build;
|
|
}
|
|
ok(runBuild($build), "Build '".$build->job."' from jobs/aggregate.nix should exit with return code 0");
|
|
}
|
|
$aggregateBuild->discard_changes();
|
|
|
|
my $build_redirect = request(GET '/job/tests/aggregate/aggregate/latest-finished');
|
|
my $build_url = URI->new($build_redirect->header('location'))->path;
|
|
|
|
subtest "validating the JSON representation of a build" => sub {
|
|
my $response = request(GET $build_url,
|
|
Accept => 'application/json',
|
|
);
|
|
|
|
is($response->code, 200, "Getting the build data");
|
|
|
|
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, {
|
|
project => "tests",
|
|
jobset => "aggregate",
|
|
buildmetrics => {},
|
|
buildoutputs => { out => { path => $aggregateBuild->buildoutputs->find({ name => "out" })->path }},
|
|
buildproducts => { 1 => {
|
|
defaultpath => "",
|
|
filesize => undef,
|
|
name => "aggregate",
|
|
path => $aggregateBuild->buildoutputs->find({ name => "out" })->path,
|
|
sha256hash => undef,
|
|
subtype => "",
|
|
type => "nix-build",
|
|
}},
|
|
buildstatus => 0,
|
|
drvpath => $aggregateBuild->drvpath,
|
|
finished => 1,
|
|
id => $aggregateBuild->id,
|
|
job => "aggregate",
|
|
jobsetevals => [ $aggregateBuild->jobsetevals->first->id ],
|
|
nixname => "aggregate",
|
|
priority => 100,
|
|
releasename => undef,
|
|
starttime => $aggregateBuild->starttime,
|
|
stoptime => $aggregateBuild->stoptime,
|
|
timestamp => $aggregateBuild->timestamp,
|
|
system => $aggregateBuild->system,
|
|
}, "The build's JSON matches our API.");
|
|
};
|
|
|
|
done_testing;
|