87 lines
2.3 KiB
Nix
87 lines
2.3 KiB
Nix
{ system, pkgs }:
|
|
let
|
|
tests = {
|
|
xorg = {
|
|
node =
|
|
{ pkgs, ... }:
|
|
{
|
|
imports = [
|
|
./common/user-account.nix
|
|
./common/x11.nix
|
|
];
|
|
services.xserver.enable = true;
|
|
services.xserver.displayManager.sessionCommands = ''
|
|
${pkgs.drawterm}/bin/drawterm -g 1024x768 &
|
|
'';
|
|
test-support.displayManager.auto.user = "alice";
|
|
};
|
|
systems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
];
|
|
};
|
|
wayland = {
|
|
node =
|
|
{ pkgs, ... }:
|
|
{
|
|
imports = [ ./common/wayland-cage.nix ];
|
|
services.cage.program = "${pkgs.drawterm-wayland}/bin/drawterm";
|
|
};
|
|
systems = [ "x86_64-linux" ];
|
|
};
|
|
};
|
|
|
|
mkTest =
|
|
name: machine:
|
|
import ./make-test-python.nix (
|
|
{ pkgs, ... }:
|
|
{
|
|
inherit name;
|
|
|
|
nodes = {
|
|
"${name}" = machine;
|
|
};
|
|
|
|
meta = with pkgs.lib.maintainers; {
|
|
maintainers = [ moody ];
|
|
};
|
|
|
|
enableOCR = true;
|
|
|
|
testScript = ''
|
|
@polling_condition
|
|
def drawterm_running():
|
|
machine.succeed("pgrep drawterm")
|
|
|
|
# cage is a bit wonky here.
|
|
# it seems to lag behind drawing
|
|
# and somehow needs a single input character
|
|
# in order to get the first prompt to show up.
|
|
# This is not present in any other compositor
|
|
# as far as I know, and after spending a couple
|
|
# hours with the upstream source trying to deduce
|
|
# how to perhaps fix it, I figured just polling is OK.
|
|
@polling_condition
|
|
def cpu_shown_up():
|
|
machine.send_chars(".")
|
|
machine.wait_for_text("cpu", 1)
|
|
|
|
start_all()
|
|
|
|
machine.wait_for_unit("graphical.target")
|
|
drawterm_running.wait() # type: ignore[union-attr]
|
|
cpu_shown_up.wait() # type: ignore[union-attr]
|
|
machine.send_chars("cpu\n")
|
|
machine.wait_for_text("auth")
|
|
machine.send_chars("cpu\n")
|
|
machine.wait_for_text("ending")
|
|
machine.screenshot("out.png")
|
|
'';
|
|
|
|
}
|
|
);
|
|
mkTestOn =
|
|
systems: name: machine:
|
|
if pkgs.lib.elem system systems then mkTest name machine else { ... }: { };
|
|
in
|
|
builtins.mapAttrs (k: v: mkTestOn v.systems k v.node { inherit system; }) tests
|