diff options
Diffstat (limited to 'nixos/tests')
-rw-r--r-- | nixos/tests/gnome3.nix | 9 | ||||
-rw-r--r-- | nixos/tests/haproxy.nix | 41 | ||||
-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 | ||||
-rw-r--r-- | nixos/tests/installer.nix | 4 | ||||
-rw-r--r-- | nixos/tests/memcached.nix | 28 | ||||
-rw-r--r-- | nixos/tests/morty.nix | 4 | ||||
-rw-r--r-- | nixos/tests/ostree.nix | 21 | ||||
-rw-r--r-- | nixos/tests/plasma5.nix | 18 | ||||
-rw-r--r-- | nixos/tests/postgresql.nix | 7 | ||||
-rw-r--r-- | nixos/tests/slurm.nix | 1 | ||||
-rw-r--r-- | nixos/tests/tor.nix | 28 |
13 files changed, 288 insertions, 39 deletions
diff --git a/nixos/tests/gnome3.nix b/nixos/tests/gnome3.nix index 492fa61484a0..591ed8600685 100644 --- a/nixos/tests/gnome3.nix +++ b/nixos/tests/gnome3.nix @@ -11,8 +11,9 @@ import ./make-test.nix ({ pkgs, ...} : { services.xserver.enable = true; - services.xserver.displayManager.auto.enable = true; - services.xserver.displayManager.auto.user = "alice"; + services.xserver.displayManager.lightdm.enable = true; + services.xserver.displayManager.lightdm.autoLogin.enable = true; + services.xserver.displayManager.lightdm.autoLogin.user = "alice"; services.xserver.desktopManager.gnome3.enable = true; virtualisation.memorySize = 1024; @@ -21,7 +22,9 @@ import ./make-test.nix ({ pkgs, ...} : { testScript = '' $machine->waitForX; - $machine->sleep(15); + + # wait for alice to be logged in + $machine->waitForUnit("default.target","alice"); # Check that logging in has given the user ownership of devices. $machine->succeed("getfacl /dev/snd/timer | grep -q alice"); diff --git a/nixos/tests/haproxy.nix b/nixos/tests/haproxy.nix new file mode 100644 index 000000000000..ce4094237db2 --- /dev/null +++ b/nixos/tests/haproxy.nix @@ -0,0 +1,41 @@ +import ./make-test.nix ({ pkgs, ...}: { + name = "haproxy"; + nodes = { + machine = { config, ...}: { + imports = [ ../modules/profiles/minimal.nix ]; + services.haproxy = { + enable = true; + config = '' + defaults + timeout connect 10s + + backend http_server + mode http + server httpd [::1]:8000 + + frontend http + bind *:80 + mode http + use_backend http_server + ''; + }; + services.httpd = { + enable = true; + documentRoot = pkgs.writeTextDir "index.txt" "We are all good!"; + adminAddr = "notme@yourhost.local"; + listen = [{ + ip = "::1"; + port = 8000; + }]; + }; + }; + }; + testScript = '' + startAll; + $machine->waitForUnit('multi-user.target'); + $machine->waitForUnit('haproxy.service'); + $machine->waitForUnit('httpd.service'); + $machine->succeed('curl -k http://localhost:80/index.txt | grep "We are all good!"'); + + ''; +}) diff --git a/nixos/tests/hydra.nix b/nixos/tests/hydra.nix deleted file mode 100644 index 6abd7a5ad300..000000000000 --- 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 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'); + ''; +}) diff --git a/nixos/tests/installer.nix b/nixos/tests/installer.nix index 7da02d9c204a..92f400937b97 100644 --- a/nixos/tests/installer.nix +++ b/nixos/tests/installer.nix @@ -51,6 +51,8 @@ let hardware.enableAllFirmware = lib.mkForce false; + services.udisks2.enable = lib.mkDefault false; + ${replaceChars ["\n"] ["\n "] extraConfig} } ''; @@ -250,6 +252,8 @@ let ++ optional (bootLoader == "grub" && grubVersion == 1) pkgs.grub ++ optionals (bootLoader == "grub" && grubVersion == 2) [ pkgs.grub2 pkgs.grub2_efi ]; + services.udisks2.enable = mkDefault false; + nix.binaryCaches = mkForce [ ]; nix.extraOptions = '' diff --git a/nixos/tests/memcached.nix b/nixos/tests/memcached.nix new file mode 100644 index 000000000000..f9ef3647bd1a --- /dev/null +++ b/nixos/tests/memcached.nix @@ -0,0 +1,28 @@ +import ./make-test.nix ({ pkgs, ...} : { + name = "memcached"; + + nodes = { + machine = + { config, pkgs, ... }: + { + imports = [ ../modules/profiles/minimal.nix ]; + services.memcached.enable = true; + }; + }; + + testScript = let + testScript = pkgs.writeScript "testScript.py" '' + #!${pkgs.python3.withPackages (p: [p.memcached])}/bin/python + + import memcache + c = memcache.Client(['localhost:11211']) + c.set('key', 'value') + assert 'value' == c.get('key') + ''; + in '' + startAll; + $machine->waitForUnit("memcached.service"); + $machine->waitForOpenPort("11211"); + $machine->succeed("${testScript}"); + ''; +}) diff --git a/nixos/tests/morty.nix b/nixos/tests/morty.nix index e052ee988060..0a5324259ada 100644 --- a/nixos/tests/morty.nix +++ b/nixos/tests/morty.nix @@ -22,9 +22,9 @@ import ./make-test.nix ({ pkgs, ... }: testScript = { nodes , ... }: '' - startAll; + $mortyProxyWithKey->waitForUnit("default.target"); - $mortyProxyWithKey->waitForUnit("morty"); + $mortyProxyWithKey->waitForOpenPort(3001); $mortyProxyWithKey->succeed("curl -L 127.0.0.1:3001 | grep MortyProxy"); ''; diff --git a/nixos/tests/ostree.nix b/nixos/tests/ostree.nix new file mode 100644 index 000000000000..8b19004874e7 --- /dev/null +++ b/nixos/tests/ostree.nix @@ -0,0 +1,21 @@ +# run installed tests +import ./make-test.nix ({ pkgs, lib, ... }: { + name = "ostree"; + + meta = { + maintainers = pkgs.ostree.meta.maintainers; + }; + + # TODO: Wrap/patch the tests directly in the package + machine = { pkgs, ... }: { + environment.systemPackages = with pkgs; [ + gnome-desktop-testing ostree gnupg (python3.withPackages (p: with p; [ pyyaml ])) + ]; + + environment.variables.GI_TYPELIB_PATH = lib.makeSearchPath "lib/girepository-1.0" (with pkgs; [ gtk3 pango.out ostree gdk_pixbuf atk ]); # for GJS tests + }; + + testScript = '' + $machine->succeed("gnome-desktop-testing-runner -d ${pkgs.ostree.installedTests}/share"); + ''; +}) diff --git a/nixos/tests/plasma5.nix b/nixos/tests/plasma5.nix index f3bd4c5915b0..14ab2e30cabf 100644 --- a/nixos/tests/plasma5.nix +++ b/nixos/tests/plasma5.nix @@ -6,13 +6,28 @@ import ./make-test.nix ({ pkgs, ...} : maintainers = [ ttuegel ]; }; - machine = { lib, ... }: { + machine = { lib, ... }: + let + sddm_theme = pkgs.stdenv.mkDerivation { + name = "breeze-ocr-theme"; + phases = "buildPhase"; + buildCommand = '' + mkdir -p $out/share/sddm/themes/ + cp -r ${pkgs.plasma-workspace}/share/sddm/themes/breeze $out/share/sddm/themes/breeze-ocr-theme + chmod -R +w $out/share/sddm/themes/breeze-ocr-theme + printf "[General]\ntype=color\ncolor=#1d99f3\nbackground=\n" > $out/share/sddm/themes/breeze-ocr-theme/theme.conf + ''; + }; + in + { imports = [ ./common/user-account.nix ]; services.xserver.enable = true; services.xserver.displayManager.sddm.enable = true; + services.xserver.displayManager.sddm.theme = "breeze-ocr-theme"; services.xserver.desktopManager.plasma5.enable = true; services.xserver.desktopManager.default = "plasma5"; virtualisation.memorySize = 1024; + environment.systemPackages = [ sddm_theme ]; # fontconfig-penultimate-0.3.3 -> 0.3.4 broke OCR apparently, but no idea why. nixpkgs.config.packageOverrides = superPkgs: { @@ -30,7 +45,6 @@ import ./make-test.nix ({ pkgs, ...} : xdo = "${pkgs.xdotool}/bin/xdotool"; in '' startAll; - # Wait for display manager to start $machine->waitForText(qr/${user.description}/); $machine->screenshot("sddm"); diff --git a/nixos/tests/postgresql.nix b/nixos/tests/postgresql.nix index 0ce37b55bb7b..2381939552e2 100644 --- a/nixos/tests/postgresql.nix +++ b/nixos/tests/postgresql.nix @@ -26,6 +26,9 @@ let { services.postgresql.package=postgresql-package; services.postgresql.enable = true; + + services.postgresqlBackup.enable = true; + services.postgresqlBackup.databases = [ "postgres" ]; }; testScript = '' @@ -46,6 +49,10 @@ let $machine->succeed(check_count("SELECT * FROM sth;", 5)); $machine->fail(check_count("SELECT * FROM sth;", 4)); $machine->succeed(check_count("SELECT xpath(\'/test/text()\', doc) FROM xmltest;", 1)); + + # Check backup service + $machine->succeed("systemctl start postgresqlBackup-postgres.service"); + $machine->succeed("zcat /var/backup/postgresql/postgres.sql.gz | grep '<test>ok</test>'"); $machine->shutdown; ''; diff --git a/nixos/tests/slurm.nix b/nixos/tests/slurm.nix index c23d85e40020..ec67ea092874 100644 --- a/nixos/tests/slurm.nix +++ b/nixos/tests/slurm.nix @@ -61,6 +61,7 @@ in { $node->succeed("mkdir /etc/munge"); $node->succeed("echo '${mungekey}' > /etc/munge/munge.key"); $node->succeed("chmod 0400 /etc/munge/munge.key"); + $node->succeed("chown munge:munge /etc/munge/munge.key"); $node->succeed("systemctl restart munged"); } diff --git a/nixos/tests/tor.nix b/nixos/tests/tor.nix new file mode 100644 index 000000000000..24d46a03897e --- /dev/null +++ b/nixos/tests/tor.nix @@ -0,0 +1,28 @@ +import ./make-test.nix ({ lib, ... }: with lib; + +rec { + name = "tor"; + meta.maintainers = with maintainers; [ joachifm ]; + + common = + { config, ... }: + { boot.kernelParams = [ "audit=0" "apparmor=0" "quiet" ]; + networking.firewall.enable = false; + networking.useDHCP = false; + }; + + nodes.client = + { config, pkgs, ... }: + { imports = [ common ]; + environment.systemPackages = with pkgs; [ netcat ]; + services.tor.enable = true; + services.tor.client.enable = true; + services.tor.controlPort = 9051; + }; + + testScript = '' + $client->waitForUnit("tor.service"); + $client->waitForOpenPort(9051); + $client->succeed("echo GETINFO version | nc 127.0.0.1 9051") =~ /514 Authentication required./ or die; + ''; +}) |