Add a test validating direct and indirect constituents

This commit is contained in:
Graham Christensen 2022-02-20 11:54:14 -05:00
parent dfb3eccfaa
commit 5d169e3a2e
2 changed files with 75 additions and 0 deletions

40
t/jobs/constituents.nix Normal file
View file

@ -0,0 +1,40 @@
with import ./config.nix;
rec {
constituentA = mkDerivation {
name = "empty-dir-A";
builder = ./empty-dir-builder.sh;
};
constituentB = mkDerivation {
name = "empty-dir-B";
builder = ./empty-dir-builder.sh;
};
direct_aggregate = mkDerivation {
name = "direct_aggregate";
_hydraAggregate = true;
constituents = [
constituentA
];
builder = ./empty-dir-builder.sh;
};
indirect_aggregate = mkDerivation {
name = "indirect_aggregate";
_hydraAggregate = true;
constituents = [
"constituentA"
];
builder = ./empty-dir-builder.sh;
};
mixed_aggregate = mkDerivation {
name = "mixed_aggregate";
_hydraAggregate = true;
constituents = [
"constituentA"
constituentB
];
builder = ./empty-dir-builder.sh;
};
}

View file

@ -0,0 +1,35 @@
use strict;
use warnings;
use Setup;
use Test2::V0;
my $ctx = test_context();
my $builds = $ctx->makeAndEvaluateJobset(
expression => 'constituents.nix',
);
my $constituentBuildA = $builds->{"constituentA"};
my $constituentBuildB = $builds->{"constituentB"};
my $eval = $constituentBuildA->jobsetevals->first();
is($eval->evaluationerror->errormsg, "");
subtest "Verifying the direct aggregate" => sub {
my $aggBuild = $builds->{"direct_aggregate"};
is($aggBuild->constituents->first()->id, $constituentBuildA->id, "The ID of the constituent is correct");
};
subtest "Verifying the indirect aggregate" => sub {
my $indirectBuild = $builds->{"indirect_aggregate"};
is($indirectBuild->constituents->first()->id, $constituentBuildA->id, "The ID of the constituent is correct");
};
subtest "Verifying a mix of direct and indirect aggregate references" => sub {
my $mixedBuild = $builds->{"mixed_aggregate"};
my ($constituentA, $constituentB) = $mixedBuild->constituents()->search({}, {order_by => { -asc => "job"} });
is($constituentA->id, $constituentBuildA->id, "The ID of the constituent is correct");
is($constituentB->id, $constituentBuildB->id, "The ID of the constituent is correct");
};
done_testing;