Give each test its own Nix directories

[?]
Feb 22, 2021, 9:52 PM
UIA3ULNUQVJJJYYVSHCT3GMNYBB5GRHEMHBU2KIFPFG6YVTLMYKAC

Dependencies

  • [2] ABB3BIS2 Add eval test for specific git revision
  • [3] NZXX6PLD Remove the Jobs table
  • [4] OWRS526H Create an ephemeral PostgreSQL database per test
  • [5] HX4QYOYA add first evaluations tests
  • [6] S5NPXZG3 Fix indentation
  • [7] SBKX3YH2 cleanup
  • [8] WFJ3ZPRM add tests for scm inputs
  • [9] 3RL7VFKE Add tests for "git describe --long".
  • [10] YDW2NUIW Fix "make check"
  • [11] 5SMQ2PLK Fix tests
  • [12] RBZRCTAL hydra: fixed and re-enabled evaluation tests
  • [13] 7VQ4ALFY Update "make check" for the new queue runner
  • [14] FAIJDQKZ
  • [15] HE3GX5IP Optimize fetch-git.
  • [16] PY5GVGC7 Implemented quoted strings support in hydra-build-products to allow file names with spaces + testcase
  • [17] L7RW467Z Add a test for darcs inputs.
  • [*] G2ZB6464 first test, not yet in buildprocess

Change contents

  • file addition: evaluate-basic.t (----------)
    [19.73]
    use feature 'unicode_strings';
    use strict;
    use Cwd;
    use Setup;
    (my $datadir, my $pgsql) = test_init();
    require Hydra::Schema;
    require Hydra::Model::DB;
    use Test2::V0;
    my $db = Hydra::Model::DB->new;
    hydra_setup($db);
    my $project = $db->resultset('Projects')->create({name => "tests", displayname => "", owner => "root"});
    # Most basic test case, no parameters
    my $jobset = createBaseJobset("basic", "basic.nix");
    ok(evalSucceeds($jobset), "Evaluating jobs/basic.nix should exit with return code 0");
    is(nrQueuedBuildsForJobset($jobset), 3, "Evaluating jobs/basic.nix should result in 3 builds");
    for my $build (queuedBuildsForJobset($jobset)) {
    ok(runBuild($build), "Build '".$build->job."' from jobs/basic.nix should exit with code 0");
    my $newbuild = $db->resultset('Builds')->find($build->id);
    is($newbuild->finished, 1, "Build '".$build->job."' from jobs/basic.nix should be finished.");
    my $expected = $build->job eq "fails" ? 1 : $build->job =~ /with_failed/ ? 6 : 0;
    is($newbuild->buildstatus, $expected, "Build '".$build->job."' from jobs/basic.nix should have buildstatus $expected.");
    }
    done_testing;
  • replacement in tests/evaluation.t at line 5
    [5.946][4.429:474]()
    my $pgsql = dbinit();
    my $dsn = $pgsql->dsn;
    [5.946]
    [4.474]
    (my $datadir, my $pgsql) = test_init();
  • replacement in tests/evaluation.t at line 10
    [5.969][2.0:30]()
    use Test::Simple tests => 76;
    [5.969]
    [5.998]
    use Test::Simple tests => 68;
  • edit in tests/evaluation.t at line 23
    [5.416][5.1530:1618]()
    # Most basic test case, no parameters
    $jobset = createBaseJobset("basic", "basic.nix");
  • edit in tests/evaluation.t at line 24
    [5.571][5.1619:1822](),[5.1822][5.796:797](),[5.796][5.796:797](),[5.797][5.857:906](),[5.906][3.6635:6732](),[3.6732][5.103:166](),[5.103][5.103:166](),[5.166][3.6733:6973](),[5.210][5.1270:1272](),[5.383][5.1270:1272](),[3.6973][5.1270:1272](),[5.1270][5.1270:1272](),[5.1272][5.838:839](),[5.838][5.838:839]()
    ok(evalSucceeds($jobset), "Evaluating jobs/basic.nix should exit with return code 0");
    ok(nrQueuedBuildsForJobset($jobset) == 3 , "Evaluating jobs/basic.nix should result in 3 builds");
    for my $build (queuedBuildsForJobset($jobset)) {
    ok(runBuild($build), "Build '".$build->job."' from jobs/basic.nix should exit with code 0");
    my $newbuild = $db->resultset('Builds')->find($build->id);
    my $expected = $build->job eq "fails" ? 1 : $build->job =~ /with_failed/ ? 6 : 0;
    ok($newbuild->finished == 1 && $newbuild->buildstatus == $expected, "Build '".$build->job."' from jobs/basic.nix should have buildstatus $expected");
    }
  • edit in tests/lib/Setup.pm at line 6
    [4.580]
    [5.238]
    use File::Temp;
    use File::Path qw(make_path);
  • replacement in tests/lib/Setup.pm at line 11
    [5.587][4.581:764]()
    our @EXPORT = qw(dbinit hydra_setup nrBuildsForJobset queuedBuildsForJobset nrQueuedBuildsForJobset createBaseJobset createJobsetWithOneInput evalSucceeds runBuild updateRepository);
    [5.587]
    [4.764]
    our @EXPORT = qw(test_init hydra_setup nrBuildsForJobset queuedBuildsForJobset nrQueuedBuildsForJobset createBaseJobset createJobsetWithOneInput evalSucceeds runBuild updateRepository);
    sub test_init() {
    my $dir = File::Temp->newdir();
    $ENV{'HYDRA_DATA'} = "$dir/hydra-data";
    mkdir $ENV{'HYDRA_DATA'};
    $ENV{'NIX_CONF_DIR'} = "$dir/nix/etc/nix";
    make_path($ENV{'NIX_CONF_DIR'});
    my $nixconf = "$ENV{'NIX_CONF_DIR'}/nix.conf";
    open(my $fh, '>', $nixconf) or die "Could not open file '$nixconf' $!";
    print $fh "sandbox = false\n";
    close $fh;
    $ENV{'NIX_STATE_DIR'} = "$dir/nix/var/nix";
  • replacement in tests/lib/Setup.pm at line 27
    [4.765][4.765:821]()
    sub dbinit() {
    my $pgsql = Test::PostgreSQL->new();
    [4.765]
    [4.821]
    $ENV{'NIX_MANIFESTS_DIR'} = "$dir/nix/var/nix/manifests";
    $ENV{'NIX_STORE_DIR'} = "$dir/nix/store";
    $ENV{'NIX_LOG_DIR'} = "$dir/nix/var/log/nix";
    my $pgsql = Test::PostgreSQL->new(
    extra_initdb_args => "--locale C.UTF-8"
    );
  • replacement in tests/lib/Setup.pm at line 36
    [4.896][4.896:915]()
    return $pgsql;
    [4.896]
    [4.915]
    return ($dir, $pgsql);