forked from lix-project/hydra
Use hydra-module.nix in the tests
This commit is contained in:
parent
8b67ad8787
commit
c92410c147
85
release.nix
85
release.nix
|
@ -8,6 +8,23 @@ let
|
||||||
|
|
||||||
genAttrs' = pkgs.lib.genAttrs [ "x86_64-linux" ];
|
genAttrs' = pkgs.lib.genAttrs [ "x86_64-linux" ];
|
||||||
|
|
||||||
|
hydraServer = hydraPkg:
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{ imports = [ ./hydra-module.nix ];
|
||||||
|
|
||||||
|
virtualisation.memorySize = 1024;
|
||||||
|
|
||||||
|
services.hydra.enable = true;
|
||||||
|
services.hydra.package = hydraPkg;
|
||||||
|
services.hydra.hydraURL = "http://hydra.example.org";
|
||||||
|
services.hydra.notificationSender = "admin@hydra.example.org";
|
||||||
|
|
||||||
|
services.postgresql.enable = true;
|
||||||
|
services.postgresql.package = pkgs.postgresql92;
|
||||||
|
|
||||||
|
environment.systemPackages = [ pkgs.perlPackages.LWP pkgs.perlPackages.JSON ];
|
||||||
|
};
|
||||||
|
|
||||||
in rec {
|
in rec {
|
||||||
|
|
||||||
tarball =
|
tarball =
|
||||||
|
@ -150,69 +167,45 @@ in rec {
|
||||||
|
|
||||||
tests.install = genAttrs' (system:
|
tests.install = genAttrs' (system:
|
||||||
with import <nixpkgs/nixos/lib/testing.nix> { inherit system; };
|
with import <nixpkgs/nixos/lib/testing.nix> { inherit system; };
|
||||||
let hydra = builtins.getAttr system build; in # build.${system}
|
|
||||||
simpleTest {
|
simpleTest {
|
||||||
machine =
|
machine = hydraServer (builtins.getAttr system build); # build.${system}
|
||||||
{ config, pkgs, ... }:
|
|
||||||
{ services.postgresql.enable = true;
|
|
||||||
services.postgresql.package = pkgs.postgresql92;
|
|
||||||
environment.systemPackages = [ hydra ];
|
|
||||||
};
|
|
||||||
|
|
||||||
testScript =
|
testScript =
|
||||||
let dbi = "dbi:Pg:dbname=hydra;user=root;"; in
|
|
||||||
''
|
''
|
||||||
$machine->waitForJob("postgresql");
|
$machine->waitForJob("hydra-init");
|
||||||
|
$machine->waitForJob("hydra-server");
|
||||||
# Initialise the database and the state.
|
$machine->waitForJob("hydra-evaluator");
|
||||||
$machine->mustSucceed
|
$machine->waitForJob("hydra-queue-runner");
|
||||||
( "createdb -O root hydra"
|
|
||||||
, "HYDRA_DBI='${dbi}' hydra-init"
|
|
||||||
, "HYDRA_DBI='${dbi}' hydra-init" # again to test idempotence
|
|
||||||
, "mkdir /var/lib/hydra"
|
|
||||||
);
|
|
||||||
|
|
||||||
# Start the web interface.
|
|
||||||
$machine->mustSucceed("HYDRA_DATA=/var/lib/hydra HYDRA_DBI='${dbi}' hydra-server >&2 &");
|
|
||||||
$machine->waitForOpenPort("3000");
|
$machine->waitForOpenPort("3000");
|
||||||
|
$machine->succeed("curl --fail http://localhost:3000/");
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
tests.api = genAttrs' (system:
|
tests.api = genAttrs' (system:
|
||||||
with import <nixpkgs/nixos/lib/testing.nix> { inherit system; };
|
with import <nixpkgs/nixos/lib/testing.nix> { inherit system; };
|
||||||
let hydra = builtins.getAttr system build; in # build."${system}"
|
|
||||||
simpleTest {
|
simpleTest {
|
||||||
machine =
|
machine = hydraServer (builtins.getAttr system build); # build.${system}
|
||||||
{ config, pkgs, ... }:
|
|
||||||
{ services.postgresql.enable = true;
|
|
||||||
services.postgresql.package = pkgs.postgresql92;
|
|
||||||
environment.systemPackages = [ hydra pkgs.perlPackages.LWP pkgs.perlPackages.JSON ];
|
|
||||||
virtualisation.memorySize = 2047;
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_3_10;
|
|
||||||
};
|
|
||||||
|
|
||||||
testScript =
|
testScript =
|
||||||
let dbi = "dbi:Pg:dbname=hydra;user=root;"; in
|
let dbi = "dbi:Pg:dbname=hydra;user=root;"; in
|
||||||
''
|
''
|
||||||
$machine->waitForJob("postgresql");
|
$machine->waitForJob("hydra-init");
|
||||||
|
|
||||||
# Initialise the database and the state.
|
# Create an admin account and some other state.
|
||||||
$machine->mustSucceed
|
$machine->succeed
|
||||||
( "createdb -O root hydra"
|
( "su hydra -c \"hydra-create-user root --email-address 'e.dolstra\@tudelft.nl' --password foobar --role admin\""
|
||||||
, "HYDRA_DBI='${dbi}' hydra-init"
|
, "mkdir /run/jobset /tmp/nix"
|
||||||
, "HYDRA_DBI='${dbi}' hydra-create-user root --email-address 'e.dolstra\@tudelft.nl' --password foobar --role admin"
|
, "chmod 755 /run/jobset /tmp/nix"
|
||||||
, "mkdir /var/lib/hydra"
|
|
||||||
, "mkdir /run/jobset"
|
|
||||||
, "chmod 755 /run/jobset"
|
|
||||||
, "cp ${./tests/api-test.nix} /run/jobset/default.nix"
|
, "cp ${./tests/api-test.nix} /run/jobset/default.nix"
|
||||||
, "chmod 644 /run/jobset/default.nix"
|
, "chmod 644 /run/jobset/default.nix"
|
||||||
|
, "chown -R hydra /run/jobset /tmp/nix"
|
||||||
);
|
);
|
||||||
|
|
||||||
# Start the web interface.
|
# Start the web interface with some weird settings.
|
||||||
$machine->mustSucceed("NIX_STORE_DIR=/run/nix NIX_LOG_DIR=/run/nix/var/log/nix NIX_STATE_DIR=/run/nix/var/nix HYDRA_DATA=/var/lib/hydra HYDRA_DBI='${dbi}' LOGNAME=root DBIC_TRACE=1 hydra-server -d >&2 &");
|
$machine->succeed("systemctl stop hydra-server hydra-evaluator hydra-queue-runner");
|
||||||
|
$machine->mustSucceed("su hydra -c 'NIX_STORE_DIR=/tmp/nix/store NIX_LOG_DIR=/tmp/nix/var/log/nix NIX_STATE_DIR=/tmp/nix/var/nix DBIC_TRACE=1 hydra-server -d' >&2 &");
|
||||||
$machine->waitForOpenPort("3000");
|
$machine->waitForOpenPort("3000");
|
||||||
|
|
||||||
$machine->mustSucceed("perl ${./tests/api-test.pl} >&2");
|
# Run the API tests.
|
||||||
|
$machine->mustSucceed("su hydra -c 'perl ${./tests/api-test.pl}' >&2");
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -238,7 +231,7 @@ in rec {
|
||||||
$machine->waitForJob("postgresql");
|
$machine->waitForJob("postgresql");
|
||||||
|
|
||||||
# Initialise the database and the state.
|
# Initialise the database and the state.
|
||||||
$machine->mustSucceed
|
$machine->succeed
|
||||||
( "createdb -O root hydra"
|
( "createdb -O root hydra"
|
||||||
, "psql hydra -f ${hydra}/libexec/hydra/sql/hydra-postgresql.sql"
|
, "psql hydra -f ${hydra}/libexec/hydra/sql/hydra-postgresql.sql"
|
||||||
, "mkdir /var/lib/hydra"
|
, "mkdir /var/lib/hydra"
|
||||||
|
@ -248,10 +241,10 @@ in rec {
|
||||||
);
|
);
|
||||||
|
|
||||||
# start fakes3
|
# start fakes3
|
||||||
$machine->mustSucceed("fakes3 --root /tmp/s3 --port 80 &>/dev/null &");
|
$machine->succeed("fakes3 --root /tmp/s3 --port 80 &>/dev/null &");
|
||||||
$machine->waitForOpenPort("80");
|
$machine->waitForOpenPort("80");
|
||||||
|
|
||||||
$machine->mustSucceed("cd /tmp && LOGNAME=root AWS_ACCESS_KEY_ID=foo AWS_SECRET_ACCESS_KEY=bar HYDRA_DBI='dbi:Pg:dbname=hydra;user=root;' HYDRA_CONFIG=${./tests/s3-backup-test.config} perl -I ${hydra}/libexec/hydra/lib -I ${hydra.perlDeps}/lib/perl5/site_perl ./s3-backup-test.pl >&2");
|
$machine->succeed("cd /tmp && LOGNAME=root AWS_ACCESS_KEY_ID=foo AWS_SECRET_ACCESS_KEY=bar HYDRA_DBI='dbi:Pg:dbname=hydra;user=root;' HYDRA_CONFIG=${./tests/s3-backup-test.config} perl -I ${hydra}/libexec/hydra/lib -I ${hydra.perlDeps}/lib/perl5/site_perl ./s3-backup-test.pl >&2");
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ ok(exists $jobset->{jobsetinputs}->{"my-src"}, "The new jobset has a 'my-src' in
|
||||||
|
|
||||||
ok($jobset->{jobsetinputs}->{"my-src"}->{jobsetinputalts}->[0] eq "/run/jobset", "The 'my-src' input is in /run/jobset");
|
ok($jobset->{jobsetinputs}->{"my-src"}->{jobsetinputalts}->[0] eq "/run/jobset", "The 'my-src' input is in /run/jobset");
|
||||||
|
|
||||||
system("LOGNAME=root NIX_STORE_DIR=/run/nix/store NIX_LOG_DIR=/run/nix/var/log/nix NIX_STATE_DIR=/run/nix/var/nix HYDRA_DATA=/var/lib/hydra HYDRA_DBI='dbi:Pg:dbname=hydra;user=root;' hydra-evaluator sample default");
|
system("NIX_STORE_DIR=/tmp/nix/store NIX_LOG_DIR=/tmp/nix/var/log/nix NIX_STATE_DIR=/tmp/nix/var/nix hydra-evaluator sample default");
|
||||||
$result = request_json({ uri => '/jobset/sample/default/evals' });
|
$result = request_json({ uri => '/jobset/sample/default/evals' });
|
||||||
ok($result->code() == 200, "Can get evals of a jobset");
|
ok($result->code() == 200, "Can get evals of a jobset");
|
||||||
my $evals = decode_json($result->content())->{evals};
|
my $evals = decode_json($result->content())->{evals};
|
||||||
|
@ -58,11 +58,11 @@ ok($eval->{hasnewbuilds} == 1, "The first eval of a jobset has new builds");
|
||||||
|
|
||||||
# Ugh, cached for 30s
|
# Ugh, cached for 30s
|
||||||
sleep 30;
|
sleep 30;
|
||||||
system("echo >> /run/jobset/default.nix; LOGNAME=root NIX_STORE_DIR=/run/nix/store NIX_LOG_DIR=/run/nix/var/log/nix NIX_STATE_DIR=/run/nix/var/nix HYDRA_DATA=/var/lib/hydra HYDRA_DBI='dbi:Pg:dbname=hydra;user=root;' hydra-evaluator sample default");
|
system("echo >> /run/jobset/default.nix; NIX_STORE_DIR=/tmp/nix/store NIX_LOG_DIR=/tmp/nix/var/log/nix NIX_STATE_DIR=/tmp/nix/var/nix hydra-evaluator sample default");
|
||||||
my $evals = decode_json(request_json({ uri => '/jobset/sample/default/evals' })->content())->{evals};
|
my $evals = decode_json(request_json({ uri => '/jobset/sample/default/evals' })->content())->{evals};
|
||||||
ok($evals->[0]->{jobsetevalinputs}->{"my-src"}->{revision} != $evals->[1]->{jobsetevalinputs}->{"my-src"}->{revision}, "Changing a jobset source changes its revision");
|
ok($evals->[0]->{jobsetevalinputs}->{"my-src"}->{revision} != $evals->[1]->{jobsetevalinputs}->{"my-src"}->{revision}, "Changing a jobset source changes its revision");
|
||||||
|
|
||||||
my $build = decode_json(request_json({ uri => "/build/" . $evals->[0]->{builds}->[0] })->content());
|
my $build = decode_json(request_json({ uri => "/build/" . $evals->[0]->{builds}->[0] })->content());
|
||||||
ok($build->{job} eq "job", "The build's job name is job");
|
ok($build->{job} eq "job", "The build's job name is job");
|
||||||
ok($build->{finished} == 0, "The build isn't finished yet");
|
ok($build->{finished} == 0, "The build isn't finished yet");
|
||||||
ok($build->{buildoutputs}->{out}->{path} =~ /^\/run\/nix\/store\/[a-zA-Z0-9]{32}-job$/, "The build's outpath is in the nix store and named 'job'");
|
ok($build->{buildoutputs}->{out}->{path} =~ /^\/tmp\/nix\/store\/[a-zA-Z0-9]{32}-job$/, "The build's outpath is in the nix store and named 'job'");
|
||||||
|
|
Loading…
Reference in a new issue