summary refs log tree commit diff
path: root/nixos/tests/gnome3-gdm.nix
diff options
context:
space:
mode:
authorTor Hedin Brønner <torhedinbronner@gmail.com>2018-12-09 16:35:51 +0100
committerTor Hedin Brønner <torhedinbronner@gmail.com>2018-12-10 10:36:25 +0100
commit75e223bf7ac358bcf4320bb80b386d7cfddc90d1 (patch)
tree2d6c9ad30e513a6969fd02ec84cc4035c9569f64 /nixos/tests/gnome3-gdm.nix
parent116c16d9e234a4f1c3ef3bfa29f46a105eef8f9a (diff)
downloadnixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.tar
nixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.tar.gz
nixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.tar.bz2
nixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.tar.lz
nixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.tar.xz
nixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.tar.zst
nixpkgs-75e223bf7ac358bcf4320bb80b386d7cfddc90d1.zip
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.
Diffstat (limited to 'nixos/tests/gnome3-gdm.nix')
-rw-r--r--nixos/tests/gnome3-gdm.nix32
1 files changed, 24 insertions, 8 deletions
diff --git a/nixos/tests/gnome3-gdm.nix b/nixos/tests/gnome3-gdm.nix
index 959030d5988..c2808d87d99 100644
--- a/nixos/tests/gnome3-gdm.nix
+++ b/nixos/tests/gnome3-gdm.nix
@@ -23,11 +23,21 @@ import ./make-test.nix ({ pkgs, ...} : {
       virtualisation.memorySize = 1024;
     };
 
-  testScript =
-    ''
-      # wait for gdm to start and bring up X
+  testScript = let
+    # Keep line widths somewhat managable
+    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->waitForX;
 
       # wait for alice to be logged in
       $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.
       $machine->succeed("getfacl /dev/snd/timer | grep -q alice");
 
-      # open a terminal and check it's there
-      $machine->succeed("su - alice -c 'DISPLAY=:0.0 XAUTHORITY=/run/user/\$UID/gdm/Xauthority gnome-terminal'");
-      $machine->succeed("xauth merge /run/user/1000/gdm/Xauthority");
-      $machine->waitForWindow(qr/Terminal/);
+      # Wait for the wayland server
+      $machine->waitForFile("/run/user/1000/wayland-0");
+
+      # 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
       $machine->sleep(20);