nixos/tests/sway: init
This adds a basic test for Sway. Because Sway is an important part of
the Wayland ecosystem, is stable, and has few dependencies this test
should also be suitable for testing core packages it depends on (e.g.
wayland, wayland-protocols, wlroots, xwayland, mesa, libglvnd, libdrm,
and soon libseat).
The test is modeled after the suggested way of using Sway, i.e. logging
in via a virtual console (tty1) and copying the configuration from
/etc/sway/config (we replace Mod4 (the GNU/Tux key - you've replaced
that evil logo, right? :D) with Mod1 (Alt key) because QEMU monitor's
sendkey command doesn't support the former).
The shell aliases are used to make the sendkey log output shorter.
Co-authored-by: Patrick Hilhorst <git@hilhorst.be>
2021-05-01 22:24:28 +02:00
|
|
|
import ./make-test-python.nix ({ pkgs, lib, ...} :
|
|
|
|
|
|
|
|
{
|
|
|
|
name = "sway";
|
|
|
|
meta = {
|
|
|
|
maintainers = with lib.maintainers; [ primeos synthetica ];
|
|
|
|
};
|
|
|
|
|
|
|
|
machine = { config, ... }: {
|
|
|
|
# Automatically login on tty1 as a normal user:
|
|
|
|
imports = [ ./common/user-account.nix ];
|
|
|
|
services.getty.autologinUser = "alice";
|
|
|
|
|
|
|
|
environment = {
|
|
|
|
# For glinfo and wayland-info:
|
|
|
|
systemPackages = with pkgs; [ mesa-demos wayland-utils ];
|
|
|
|
# Use a fixed SWAYSOCK path (for swaymsg):
|
|
|
|
variables."SWAYSOCK" = "/tmp/sway-ipc.sock";
|
|
|
|
# For convenience:
|
|
|
|
shellAliases = {
|
|
|
|
test-x11 = "glinfo | head -n 3 | tee /tmp/test-x11.out && touch /tmp/test-x11-exit-ok";
|
|
|
|
test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# Automatically configure and start Sway when logging in on tty1:
|
|
|
|
programs.bash.loginShellInit = ''
|
|
|
|
if [ "$(tty)" = "/dev/tty1" ]; then
|
|
|
|
set -e
|
|
|
|
|
|
|
|
mkdir -p ~/.config/sway
|
|
|
|
sed s/Mod4/Mod1/ /etc/sway/config > ~/.config/sway/config
|
|
|
|
|
|
|
|
sway --validate
|
|
|
|
sway && touch /tmp/sway-exit-ok
|
|
|
|
fi
|
|
|
|
'';
|
|
|
|
|
|
|
|
programs.sway.enable = true;
|
|
|
|
|
2021-05-13 20:35:45 +02:00
|
|
|
# To test pinentry via gpg-agent:
|
|
|
|
programs.gnupg.agent.enable = true;
|
|
|
|
|
nixos/tests/sway: init
This adds a basic test for Sway. Because Sway is an important part of
the Wayland ecosystem, is stable, and has few dependencies this test
should also be suitable for testing core packages it depends on (e.g.
wayland, wayland-protocols, wlroots, xwayland, mesa, libglvnd, libdrm,
and soon libseat).
The test is modeled after the suggested way of using Sway, i.e. logging
in via a virtual console (tty1) and copying the configuration from
/etc/sway/config (we replace Mod4 (the GNU/Tux key - you've replaced
that evil logo, right? :D) with Mod1 (Alt key) because QEMU monitor's
sendkey command doesn't support the former).
The shell aliases are used to make the sendkey log output shorter.
Co-authored-by: Patrick Hilhorst <git@hilhorst.be>
2021-05-01 22:24:28 +02:00
|
|
|
virtualisation.memorySize = 1024;
|
|
|
|
# Need to switch to a different VGA card / GPU driver than the default one (std) so that Sway can launch:
|
|
|
|
virtualisation.qemu.options = [ "-vga virtio" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
enableOCR = true;
|
|
|
|
|
|
|
|
testScript = { nodes, ... }: ''
|
|
|
|
start_all()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
# To check the version:
|
|
|
|
print(machine.succeed("sway --version"))
|
|
|
|
|
|
|
|
# Wait for Sway to complete startup:
|
|
|
|
machine.wait_for_file("/run/user/1000/wayland-1")
|
|
|
|
machine.wait_for_file("/tmp/sway-ipc.sock")
|
|
|
|
|
|
|
|
# Test XWayland:
|
|
|
|
machine.succeed(
|
|
|
|
"su - alice -c 'swaymsg exec WINIT_UNIX_BACKEND=x11 WAYLAND_DISPLAY=invalid alacritty'"
|
|
|
|
)
|
|
|
|
machine.wait_for_text("alice@machine")
|
|
|
|
machine.send_chars("test-x11\n")
|
|
|
|
machine.wait_for_file("/tmp/test-x11-exit-ok")
|
|
|
|
print(machine.succeed("cat /tmp/test-x11.out"))
|
|
|
|
machine.screenshot("alacritty_glinfo")
|
|
|
|
machine.succeed("pkill alacritty")
|
|
|
|
|
|
|
|
# Start a terminal (Alacritty) on workspace 3:
|
|
|
|
machine.send_key("alt-3")
|
|
|
|
machine.succeed(
|
|
|
|
"su - alice -c 'swaymsg exec WINIT_UNIX_BACKEND=wayland DISPLAY=invalid alacritty'"
|
|
|
|
)
|
|
|
|
machine.wait_for_text("alice@machine")
|
|
|
|
machine.send_chars("test-wayland\n")
|
|
|
|
machine.wait_for_file("/tmp/test-wayland-exit-ok")
|
|
|
|
print(machine.succeed("cat /tmp/test-wayland.out"))
|
|
|
|
machine.screenshot("alacritty_wayland_info")
|
|
|
|
machine.send_key("alt-shift-q")
|
|
|
|
machine.wait_until_fails("pgrep alacritty")
|
|
|
|
|
2021-05-13 20:35:45 +02:00
|
|
|
# Test gpg-agent starting pinentry-gnome3 via D-Bus (tests if
|
|
|
|
# $WAYLAND_DISPLAY is correctly imported into the D-Bus user env):
|
|
|
|
machine.succeed(
|
|
|
|
"su - alice -c 'swaymsg -- exec gpg --no-tty --yes --quick-generate-key test'"
|
|
|
|
)
|
|
|
|
machine.wait_until_succeeds("pgrep --exact gpg")
|
|
|
|
machine.wait_for_text("Passphrase")
|
|
|
|
machine.screenshot("gpg_pinentry")
|
|
|
|
machine.send_key("alt-shift-q")
|
|
|
|
machine.wait_until_fails("pgrep --exact gpg")
|
|
|
|
|
nixos/tests/sway: init
This adds a basic test for Sway. Because Sway is an important part of
the Wayland ecosystem, is stable, and has few dependencies this test
should also be suitable for testing core packages it depends on (e.g.
wayland, wayland-protocols, wlroots, xwayland, mesa, libglvnd, libdrm,
and soon libseat).
The test is modeled after the suggested way of using Sway, i.e. logging
in via a virtual console (tty1) and copying the configuration from
/etc/sway/config (we replace Mod4 (the GNU/Tux key - you've replaced
that evil logo, right? :D) with Mod1 (Alt key) because QEMU monitor's
sendkey command doesn't support the former).
The shell aliases are used to make the sendkey log output shorter.
Co-authored-by: Patrick Hilhorst <git@hilhorst.be>
2021-05-01 22:24:28 +02:00
|
|
|
# Test swaynag:
|
|
|
|
machine.send_key("alt-shift-e")
|
|
|
|
machine.wait_for_text("You pressed the exit shortcut.")
|
|
|
|
machine.screenshot("sway_exit")
|
|
|
|
|
|
|
|
# Exit Sway and verify process exit status 0:
|
|
|
|
machine.succeed("su - alice -c 'swaymsg exit || true'")
|
|
|
|
machine.wait_for_file("/tmp/sway-exit-ok")
|
|
|
|
'';
|
|
|
|
})
|