From c92410c147120b67989408ff1e7fc4650c3ba3f2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 6 Nov 2013 18:10:52 +0100 Subject: [PATCH] Use hydra-module.nix in the tests --- release.nix | 85 ++++++++++++++++++++++------------------------- tests/api-test.pl | 6 ++-- 2 files changed, 42 insertions(+), 49 deletions(-) diff --git a/release.nix b/release.nix index 5c3757ab..6004c88d 100644 --- a/release.nix +++ b/release.nix @@ -8,6 +8,23 @@ let 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 { tarball = @@ -150,69 +167,45 @@ in rec { tests.install = genAttrs' (system: with import { inherit system; }; - let hydra = builtins.getAttr system build; in # build.${system} simpleTest { - machine = - { config, pkgs, ... }: - { services.postgresql.enable = true; - services.postgresql.package = pkgs.postgresql92; - environment.systemPackages = [ hydra ]; - }; - + machine = hydraServer (builtins.getAttr system build); # build.${system} testScript = - let dbi = "dbi:Pg:dbname=hydra;user=root;"; in '' - $machine->waitForJob("postgresql"); - - # Initialise the database and the state. - $machine->mustSucceed - ( "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->waitForJob("hydra-init"); + $machine->waitForJob("hydra-server"); + $machine->waitForJob("hydra-evaluator"); + $machine->waitForJob("hydra-queue-runner"); $machine->waitForOpenPort("3000"); + $machine->succeed("curl --fail http://localhost:3000/"); ''; }); tests.api = genAttrs' (system: with import { inherit system; }; - let hydra = builtins.getAttr system build; in # build."${system}" simpleTest { - machine = - { 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; - }; - + machine = hydraServer (builtins.getAttr system build); # build.${system} testScript = let dbi = "dbi:Pg:dbname=hydra;user=root;"; in '' - $machine->waitForJob("postgresql"); + $machine->waitForJob("hydra-init"); - # Initialise the database and the state. - $machine->mustSucceed - ( "createdb -O root hydra" - , "HYDRA_DBI='${dbi}' hydra-init" - , "HYDRA_DBI='${dbi}' hydra-create-user root --email-address 'e.dolstra\@tudelft.nl' --password foobar --role admin" - , "mkdir /var/lib/hydra" - , "mkdir /run/jobset" - , "chmod 755 /run/jobset" + # Create an admin account and some other state. + $machine->succeed + ( "su hydra -c \"hydra-create-user root --email-address 'e.dolstra\@tudelft.nl' --password foobar --role admin\"" + , "mkdir /run/jobset /tmp/nix" + , "chmod 755 /run/jobset /tmp/nix" , "cp ${./tests/api-test.nix} /run/jobset/default.nix" , "chmod 644 /run/jobset/default.nix" + , "chown -R hydra /run/jobset /tmp/nix" ); - # Start the web interface. - $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 &"); + # Start the web interface with some weird settings. + $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->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"); # Initialise the database and the state. - $machine->mustSucceed + $machine->succeed ( "createdb -O root hydra" , "psql hydra -f ${hydra}/libexec/hydra/sql/hydra-postgresql.sql" , "mkdir /var/lib/hydra" @@ -248,10 +241,10 @@ in rec { ); # 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->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"); ''; }); } diff --git a/tests/api-test.pl b/tests/api-test.pl index efbbf0fc..c71f7909 100644 --- a/tests/api-test.pl +++ b/tests/api-test.pl @@ -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"); -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' }); ok($result->code() == 200, "Can get evals of a jobset"); 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 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}; 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()); ok($build->{job} eq "job", "The build's job name is job"); 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'");