summaryrefslogtreecommitdiffstats
path: root/nixos/tests/hydra
diff options
context:
space:
mode:
authorAntoine Eiche <lewo@abesis.fr>2018-05-18 16:49:32 +0200
committerAntoine Eiche <lewo@abesis.fr>2018-06-06 18:00:41 +0200
commit47fc27b4562042bc309ff369c0369f001adb9ef0 (patch)
tree88fafd45500c592360b1db85afcd06ae5f86382d /nixos/tests/hydra
parente37c9366269f8e592f639ba7d5cf4fba9696aeb4 (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/tests/hydra')
-rwxr-xr-xnixos/tests/hydra/create-trivial-project.sh56
-rw-r--r--nixos/tests/hydra/default.nix78
2 files changed, 134 insertions, 0 deletions
diff --git a/nixos/tests/hydra/create-trivial-project.sh b/nixos/tests/hydra/create-trivial-project.sh
new file mode 100755
index 000000000000..3cca5665acc5
--- /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 000000000000..74919444c16d
--- /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');
+ '';
+})