nixos: Add a VM test for the SLiM display manager

This is currently our default display manager, so I'm adding this to the
"tested" job as well to ensure we don't ship broken revisions where X is
most likely not working.

The test uses a custom SLiM theme that's specifically tailored for good
OCR results (mainly white background and black fonts without anything
else), because our default NixOS theme has a very small contrast between
background and fonts in some places.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>

aszlig dc87b558 83e1400e

Changed files
+68
nixos
+1
nixos/release-combined.nix
···
(all nixos.tests.proxy)
(all nixos.tests.sddm.default)
(all nixos.tests.simple)
+
(all nixos.tests.slim)
(all nixos.tests.udisks2)
(all nixos.tests.xfce)
+1
nixos/release.nix
···
tests.samba = callTest tests/samba.nix {};
tests.sddm = callSubTests tests/sddm.nix {};
tests.simple = callTest tests/simple.nix {};
+
tests.slim = callTest tests/slim.nix {};
tests.smokeping = callTest tests/smokeping.nix {};
tests.taskserver = callTest tests/taskserver.nix {};
tests.tomcat = callTest tests/tomcat.nix {};
+66
nixos/tests/slim.nix
···
+
import ./make-test.nix ({ pkgs, ...} : {
+
name = "slim";
+
+
meta = with pkgs.stdenv.lib.maintainers; {
+
maintainers = [ aszlig ];
+
};
+
+
machine = { pkgs, lib, ... }: {
+
imports = [ ./common/user-account.nix ];
+
services.xserver.enable = true;
+
services.xserver.windowManager.default = "icewm";
+
services.xserver.windowManager.icewm.enable = true;
+
services.xserver.desktopManager.default = "none";
+
services.xserver.displayManager.slim = {
+
enable = true;
+
+
# Use a custom theme in order to get best OCR results
+
theme = pkgs.runCommand "slim-theme-ocr" {
+
nativeBuildInputs = [ pkgs.imagemagick ];
+
} ''
+
mkdir "$out"
+
convert -size 1x1 xc:white "$out/background.jpg"
+
convert -size 200x100 xc:white "$out/panel.jpg"
+
cat > "$out/slim.theme" <<EOF
+
background_color #ffffff
+
background_style tile
+
+
input_fgcolor #000000
+
msg_color #000000
+
+
session_color #000000
+
session_font Verdana:size=16:bold
+
+
username_msg Username:
+
username_font Verdana:size=16:bold
+
username_color #000000
+
username_x 50%
+
username_y 40%
+
+
password_msg Password:
+
password_x 50%
+
password_y 40%
+
EOF
+
'';
+
};
+
};
+
+
enableOCR = true;
+
+
testScript = { nodes, ... }: let
+
user = nodes.machine.config.users.extraUsers.alice;
+
in ''
+
startAll;
+
$machine->waitForText(qr/Username:/);
+
$machine->sendChars("${user.name}\n");
+
$machine->waitForText(qr/Password:/);
+
$machine->sendChars("${user.password}\n");
+
+
$machine->waitForFile('${user.home}/.Xauthority');
+
$machine->succeed('xauth merge ${user.home}/.Xauthority');
+
$machine->waitForWindow('^IceWM ');
+
+
# Make sure SLiM doesn't create a log file
+
$machine->fail('test -e /var/log/slim.log');
+
'';
+
})