diff options
author | Antoine Eiche <lewo@abesis.fr> | 2018-05-18 16:49:32 +0200 |
---|---|---|
committer | Antoine Eiche <lewo@abesis.fr> | 2018-06-06 18:00:41 +0200 |
commit | 47fc27b4562042bc309ff369c0369f001adb9ef0 (patch) | |
tree | 88fafd45500c592360b1db85afcd06ae5f86382d /nixos | |
parent | e37c9366269f8e592f639ba7d5cf4fba9696aeb4 (diff) |
nixos/tests/hydra: build a trivial derivation
A script is used to create a project, and configure a jobset. This jobset fetches a local file containing a trivial Nix expression. The test script makes sure this derivation has been successfully built by Hydra.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/tests/hydra.nix | 32 | ||||
-rwxr-xr-x | nixos/tests/hydra/create-trivial-project.sh | 56 | ||||
-rw-r--r-- | nixos/tests/hydra/default.nix | 78 |
3 files changed, 134 insertions, 32 deletions
diff --git a/nixos/tests/hydra.nix b/nixos/tests/hydra.nix deleted file mode 100644 index 6abd7a5ad3004..0000000000000 --- a/nixos/tests/hydra.nix +++ /dev/null @@ -1,32 +0,0 @@ -import ./make-test.nix ({ pkgs, ...} : { - name = "hydra-init-localdb"; - meta = with pkgs.stdenv.lib.maintainers; { - maintainers = [ pstn ]; - }; - - machine = - { config, pkgs, ... }: - - { - services.hydra = { - enable = true; - - #Hydra needs those settings to start up, so we add something not harmfull. - hydraURL = "example.com"; - notificationSender = "example@example.com"; - }; - }; - - testScript = - '' - # let the system boot up - $machine->waitForUnit("multi-user.target"); - # test whether the database is running - $machine->succeed("systemctl status postgresql.service"); - # test whether the actual hydra daemons are running - $machine->succeed("systemctl status hydra-queue-runner.service"); - $machine->succeed("systemctl status hydra-init.service"); - $machine->succeed("systemctl status hydra-evaluator.service"); - $machine->succeed("systemctl status hydra-send-stats.service"); - ''; -}) diff --git a/nixos/tests/hydra/create-trivial-project.sh b/nixos/tests/hydra/create-trivial-project.sh new file mode 100755 index 0000000000000..3cca5665acc56 --- /dev/null +++ b/nixos/tests/hydra/create-trivial-project.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# +# This script creates a project, a jobset with an input of type local +# path. This local path is a directory that contains a Nix expression +# to define a job. +# The EXPR-PATH environment variable must be set with the local path. + +set -e + +URL=http://localhost:3000 +USERNAME="admin" +PASSWORD="admin" +PROJECT_NAME="trivial" +JOBSET_NAME="trivial" +EXPR_PATH=${EXPR_PATH:-} + +if [ -z $EXPR_PATH ]; then + echo "Environment variable EXPR_PATH must be set" + exit 1 +fi + +mycurl() { + curl --referer $URL -H "Accept: application/json" -H "Content-Type: application/json" $@ +} + +cat >data.json <<EOF +{ "username": "$USERNAME", "password": "$PASSWORD" } +EOF +mycurl -X POST -d '@data.json' $URL/login -c hydra-cookie.txt + +cat >data.json <<EOF +{ + "displayname":"Trivial", + "enabled":"1" +} +EOF +mycurl --silent -X PUT $URL/project/$PROJECT_NAME -d @data.json -b hydra-cookie.txt + +cat >data.json <<EOF +{ + "description": "Trivial", + "checkinterval": "60", + "enabled": "1", + "visible": "1", + "keepnr": "1", + "nixexprinput": "trivial", + "nixexprpath": "trivial.nix", + "inputs": { + "trivial": { + "value": "$EXPR_PATH", + "type": "path" + } + } +} +EOF +mycurl --silent -X PUT $URL/jobset/$PROJECT_NAME/$JOBSET_NAME -d @data.json -b hydra-cookie.txt diff --git a/nixos/tests/hydra/default.nix b/nixos/tests/hydra/default.nix new file mode 100644 index 0000000000000..74919444c16d6 --- /dev/null +++ b/nixos/tests/hydra/default.nix @@ -0,0 +1,78 @@ +import ../make-test.nix ({ pkgs, ...} : + +let + trivialJob = pkgs.writeTextDir "trivial.nix" '' + with import <nix/config.nix>; + + { trivial = builtins.derivation { + name = "trivial"; + system = "x86_64-linux"; + PATH = coreutils; + builder = shell; + args = ["-c" "touch $out; exit 0"]; + }; + } + ''; + + createTrivialProject = pkgs.stdenv.mkDerivation { + name = "create-trivial-project"; + unpackPhase = ":"; + buildInputs = [ pkgs.makeWrapper ]; + installPhase = "install -m755 -D ${./create-trivial-project.sh} $out/bin/create-trivial-project.sh"; + postFixup = '' + wrapProgram "$out/bin/create-trivial-project.sh" --prefix PATH ":" ${pkgs.stdenv.lib.makeBinPath [ pkgs.curl ]} --set EXPR_PATH ${trivialJob} + ''; + }; + +in { + name = "hydra-init-localdb"; + meta = with pkgs.stdenv.lib.maintainers; { + maintainers = [ pstn lewo ]; + }; + + machine = + { config, pkgs, ... }: + + { + virtualisation.memorySize = 1024; + time.timeZone = "UTC"; + + environment.systemPackages = [ createTrivialProject pkgs.jq ]; + services.hydra = { + enable = true; + + #Hydra needs those settings to start up, so we add something not harmfull. + hydraURL = "example.com"; + notificationSender = "example@example.com"; + }; + nix = { + buildMachines = [{ + hostName = "localhost"; + systems = [ "x86_64-linux" ]; + }]; + }; + }; + + testScript = + '' + # let the system boot up + $machine->waitForUnit("multi-user.target"); + # test whether the database is running + $machine->succeed("systemctl status postgresql.service"); + # test whether the actual hydra daemons are running + $machine->succeed("systemctl status hydra-queue-runner.service"); + $machine->succeed("systemctl status hydra-init.service"); + $machine->succeed("systemctl status hydra-evaluator.service"); + $machine->succeed("systemctl status hydra-send-stats.service"); + + $machine->succeed("hydra-create-user admin --role admin --password admin"); + + # create a project with a trivial job + $machine->waitForOpenPort(3000); + + # make sure the build as been successfully built + $machine->succeed("create-trivial-project.sh"); + + $machine->waitUntilSucceeds('curl -L -s http://localhost:3000/build/1 -H "Accept: application/json" | jq .buildstatus | xargs test 0 -eq'); + ''; +}) |