nixos/tests/gnome3-gdm: port to wayland

The test now runs wayland, which means we can no longer use X11 style testing.
Instead we get gnome shell to execute javascript through its dbus interface.
This commit is contained in:
Tor Hedin Brønner 2018-12-09 16:35:51 +01:00
parent 116c16d9e2
commit 75e223bf7a

View File

@ -23,11 +23,21 @@ import ./make-test.nix ({ pkgs, ...} : {
virtualisation.memorySize = 1024; virtualisation.memorySize = 1024;
}; };
testScript = testScript = let
'' # Keep line widths somewhat managable
# wait for gdm to start and bring up X bus = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus";
gdbus = "${bus} gdbus";
# Call javascript in gnome shell, returns a tuple (success, output), where
# `success` is true if the dbus call was successful and output is what the
# javascript evaluates to.
eval = "call --session -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval";
# False when startup is done
startingUp = "${gdbus} ${eval} Main.layoutManager._startingUp";
# Hopefully gnome-terminal's wm class
wmClass = "${gdbus} ${eval} global.display.focus_window.wm_class";
in ''
# wait for gdm to start
$machine->waitForUnit("display-manager.service"); $machine->waitForUnit("display-manager.service");
$machine->waitForX;
# wait for alice to be logged in # wait for alice to be logged in
$machine->waitForUnit("default.target","alice"); $machine->waitForUnit("default.target","alice");
@ -35,10 +45,16 @@ import ./make-test.nix ({ pkgs, ...} : {
# Check that logging in has given the user ownership of devices. # Check that logging in has given the user ownership of devices.
$machine->succeed("getfacl /dev/snd/timer | grep -q alice"); $machine->succeed("getfacl /dev/snd/timer | grep -q alice");
# open a terminal and check it's there # Wait for the wayland server
$machine->succeed("su - alice -c 'DISPLAY=:0.0 XAUTHORITY=/run/user/\$UID/gdm/Xauthority gnome-terminal'"); $machine->waitForFile("/run/user/1000/wayland-0");
$machine->succeed("xauth merge /run/user/1000/gdm/Xauthority");
$machine->waitForWindow(qr/Terminal/); # Wait for gnome shell, correct output should be "(true, 'false')"
$machine->waitUntilSucceeds("su - alice -c '${startingUp} | grep -q true,..false'");
# open a terminal
$machine->succeed("su - alice -c '${bus} gnome-terminal'");
# and check it's there
$machine->waitUntilSucceeds("su - alice -c '${wmClass} | grep -q gnome-terminal-server'");
# wait to get a nice screenshot # wait to get a nice screenshot
$machine->sleep(20); $machine->sleep(20);