forked from lix-project/hydra
notifications.t: move to makeAndEvaluateJobset
This commit is contained in:
parent
008321d972
commit
c2384a04d8
|
@ -1,12 +1,12 @@
|
||||||
use feature 'unicode_strings';
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use JSON::MaybeXS;
|
use JSON::MaybeXS;
|
||||||
use Setup;
|
use Setup;
|
||||||
|
use Test2::V0;
|
||||||
|
|
||||||
my $binarycachedir = File::Temp->newdir();
|
my $binarycachedir = File::Temp->newdir();
|
||||||
|
|
||||||
my %ctx = test_init(
|
my $ctx = test_context(
|
||||||
nix_config => qq|
|
nix_config => qq|
|
||||||
experimental-features = nix-command
|
experimental-features = nix-command
|
||||||
substituters = file://${binarycachedir}?trusted=1
|
substituters = file://${binarycachedir}?trusted=1
|
||||||
|
@ -18,10 +18,6 @@ my %ctx = test_init(
|
||||||
</runcommand>
|
</runcommand>
|
||||||
|);
|
|);
|
||||||
|
|
||||||
require Hydra::Schema;
|
|
||||||
require Hydra::Model::DB;
|
|
||||||
|
|
||||||
use Test2::V0;
|
|
||||||
|
|
||||||
# Check that hydra's queue runner sends notifications.
|
# Check that hydra's queue runner sends notifications.
|
||||||
#
|
#
|
||||||
|
@ -40,8 +36,8 @@ subtest "Pre-build the job, upload to the cache, and then delete locally" => sub
|
||||||
my $scratchlogdir = File::Temp->newdir();
|
my $scratchlogdir = File::Temp->newdir();
|
||||||
$ENV{'NIX_LOG_DIR'} = "$scratchlogdir";
|
$ENV{'NIX_LOG_DIR'} = "$scratchlogdir";
|
||||||
|
|
||||||
my $outlink = "$ctx{tmpdir}/basic-canbesubstituted";
|
my $outlink = $ctx->tmpdir . "/basic-canbesubstituted";
|
||||||
is(system("nix-build '${ctx{jobsdir}}/notifications.nix' -A canbesubstituted --out-link '${outlink}'"), 0, "Building notifications.nix succeeded");
|
is(system("nix-build '" . $ctx->jobsdir . "/notifications.nix' -A canbesubstituted --out-link '${outlink}'"), 0, "Building notifications.nix succeeded");
|
||||||
is(system("nix copy --to 'file://${binarycachedir}' '${outlink}'"), 0, "Copying the closure to the binary cache succeeded");
|
is(system("nix copy --to 'file://${binarycachedir}' '${outlink}'"), 0, "Copying the closure to the binary cache succeeded");
|
||||||
my $outpath = readlink($outlink);
|
my $outpath = readlink($outlink);
|
||||||
|
|
||||||
|
@ -54,8 +50,8 @@ subtest "Pre-build the job, upload to the cache, and then delete locally" => sub
|
||||||
|
|
||||||
subtest "Ensure substituting the job works, but reading the log fails" => sub {
|
subtest "Ensure substituting the job works, but reading the log fails" => sub {
|
||||||
# Build the store path, with --max-jobs 0 to prevent builds
|
# Build the store path, with --max-jobs 0 to prevent builds
|
||||||
my $outlink = "$ctx{tmpdir}/basic-canbesubstituted";
|
my $outlink = $ctx->tmpdir . "/basic-canbesubstituted";
|
||||||
is(system("nix-build '${ctx{jobsdir}}/notifications.nix' -A canbesubstituted --max-jobs 0 --out-link '${outlink}'"), 0, "Building notifications.nix succeeded");
|
is(system("nix-build '" . $ctx->jobsdir . "/notifications.nix' -A canbesubstituted --max-jobs 0 --out-link '${outlink}'"), 0, "Building notifications.nix succeeded");
|
||||||
my $outpath = readlink($outlink);
|
my $outpath = readlink($outlink);
|
||||||
|
|
||||||
# Verify trying to read this path's log fails, since we substituted it
|
# Verify trying to read this path's log fails, since we substituted it
|
||||||
|
@ -68,35 +64,27 @@ subtest "Ensure substituting the job works, but reading the log fails" => sub {
|
||||||
is(system("nix-collect-garbage"), 0, "Delete all the system's garbage");
|
is(system("nix-collect-garbage"), 0, "Delete all the system's garbage");
|
||||||
};
|
};
|
||||||
|
|
||||||
my $db = Hydra::Model::DB->new;
|
my $db = $ctx->db();
|
||||||
hydra_setup($db);
|
|
||||||
|
|
||||||
my $jobset = createBaseJobset("queue-runner-notifs", "notifications.nix", $ctx{jobsdir});
|
|
||||||
|
|
||||||
my $dbh = $db->storage->dbh;
|
my $dbh = $db->storage->dbh;
|
||||||
$dbh->do("listen build_started");
|
$dbh->do("listen build_started");
|
||||||
$dbh->do("listen build_finished");
|
$dbh->do("listen build_finished");
|
||||||
$dbh->do("listen step_finished");
|
$dbh->do("listen step_finished");
|
||||||
|
|
||||||
subtest "Evaluation of the jobset" => sub {
|
my $builds = $ctx->makeAndEvaluateJobset(
|
||||||
ok(evalSucceeds($jobset), "Evaluation should exit with return code 0");
|
expression => "notifications.nix",
|
||||||
is(nrQueuedBuildsForJobset($jobset), 2, "Evaluation should result in 2 builds");
|
build => 1
|
||||||
};
|
);
|
||||||
|
|
||||||
my @builds = queuedBuildsForJobset($jobset);
|
|
||||||
|
|
||||||
|
|
||||||
subtest "Build: substitutable, canbesubstituted" => sub {
|
subtest "Build: substitutable, canbesubstituted" => sub {
|
||||||
my ($build) = grep { $_->nixname eq "can-be-substituted" } @builds;
|
my $build = $builds->{"canbesubstituted"};
|
||||||
ok(runBuild($build), "Build should exit with return code 0");
|
|
||||||
|
|
||||||
my $newbuild = $db->resultset('Builds')->find($build->id);
|
is($build->finished, 1, "Build should be finished.");
|
||||||
is($newbuild->finished, 1, "Build should be finished.");
|
is($build->buildstatus, 0, "Build should have buildstatus 0.");
|
||||||
is($newbuild->buildstatus, 0, "Build should have buildstatus 0.");
|
|
||||||
|
|
||||||
# Verify that hydra-notify will process this job, even if hydra-notify isn't
|
# Verify that hydra-notify will process this job, even if hydra-notify isn't
|
||||||
# running at the time.
|
# running at the time.
|
||||||
isnt($newbuild->notificationpendingsince, undef, "The build has a pending notification");
|
isnt($build->notificationpendingsince, undef, "The build has a pending notification");
|
||||||
|
|
||||||
subtest "First notification: build_finished" => sub {
|
subtest "First notification: build_finished" => sub {
|
||||||
my ($channelName, $pid, $payload) = @{$dbh->func("pg_notifies")};
|
my ($channelName, $pid, $payload) = @{$dbh->func("pg_notifies")};
|
||||||
|
@ -106,16 +94,13 @@ subtest "Build: substitutable, canbesubstituted" => sub {
|
||||||
};
|
};
|
||||||
|
|
||||||
subtest "Build: not substitutable, unsubstitutable" => sub {
|
subtest "Build: not substitutable, unsubstitutable" => sub {
|
||||||
my ($build) = grep { $_->nixname eq "unsubstitutable" } @builds;
|
my $build = $builds->{"unsubstitutable"};
|
||||||
ok(runBuild($build), "Build should exit with return code 0");
|
is($build->finished, 1, "Build should be finished.");
|
||||||
|
is($build->buildstatus, 0, "Build should have buildstatus 0.");
|
||||||
my $newbuild = $db->resultset('Builds')->find($build->id);
|
|
||||||
is($newbuild->finished, 1, "Build should be finished.");
|
|
||||||
is($newbuild->buildstatus, 0, "Build should have buildstatus 0.");
|
|
||||||
|
|
||||||
# Verify that hydra-notify will process this job, even if hydra-notify isn't
|
# Verify that hydra-notify will process this job, even if hydra-notify isn't
|
||||||
# running at the time.
|
# running at the time.
|
||||||
isnt($newbuild->notificationpendingsince, undef, "The build has a pending notification");
|
isnt($build->notificationpendingsince, undef, "The build has a pending notification");
|
||||||
|
|
||||||
subtest "First notification: build_started" => sub {
|
subtest "First notification: build_started" => sub {
|
||||||
my ($channelName, $pid, $payload) = @{$dbh->func("pg_notifies")};
|
my ($channelName, $pid, $payload) = @{$dbh->func("pg_notifies")};
|
||||||
|
|
Loading…
Reference in a new issue