This adds a very minimalistic (in terms of functionality and dependencies) test for wlroots, Wayland, and related packages. The Sway test covers more functionality and packages (e.g. XWayland) but this test has tree advantages: - Less dependencies: Much fewer rebuilds are required when testing core changes that need to go through staging. - Testing wlroots updates: The Sway package isn't immediately updated after a new wlroots version is released and a lot of other packages depend on wlroots as well. - Determining whether a bug only affects Sway or wlroots/TinyWL as well.
57 lines
1.9 KiB
Nix
57 lines
1.9 KiB
Nix
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
|
|
|
{
|
|
name = "tinywl";
|
|
meta = {
|
|
maintainers = with lib.maintainers; [ primeos ];
|
|
};
|
|
|
|
machine = { config, ... }: {
|
|
# Automatically login on tty1 as a normal user:
|
|
imports = [ ./common/user-account.nix ];
|
|
services.getty.autologinUser = "alice";
|
|
|
|
environment = {
|
|
systemPackages = with pkgs; [ tinywl foot wayland-utils ];
|
|
};
|
|
|
|
# Automatically start TinyWL when logging in on tty1:
|
|
programs.bash.loginShellInit = ''
|
|
if [ "$(tty)" = "/dev/tty1" ]; then
|
|
set -e
|
|
test ! -e /tmp/tinywl.log # Only start tinywl once
|
|
readonly TEST_CMD="wayland-info |& tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok; read"
|
|
readonly FOOT_CMD="foot sh -c '$TEST_CMD'"
|
|
tinywl -s "$FOOT_CMD" |& tee /tmp/tinywl.log
|
|
touch /tmp/tinywl-exit-ok
|
|
fi
|
|
'';
|
|
|
|
# Switch to a different GPU driver (default: -vga std), otherwise TinyWL segfaults:
|
|
virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
|
|
};
|
|
|
|
testScript = { nodes, ... }: ''
|
|
start_all()
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
# Wait for complete startup:
|
|
machine.wait_until_succeeds("pgrep tinywl")
|
|
machine.wait_for_file("/run/user/1000/wayland-0")
|
|
machine.wait_until_succeeds("pgrep foot")
|
|
machine.wait_for_file("/tmp/test-wayland-exit-ok")
|
|
|
|
# Make a screenshot and save the result:
|
|
machine.screenshot("tinywl_foot")
|
|
print(machine.succeed("cat /tmp/test-wayland.out"))
|
|
machine.copy_from_vm("/tmp/test-wayland.out")
|
|
|
|
# Terminate cleanly:
|
|
machine.send_key("alt-esc")
|
|
machine.wait_until_fails("pgrep foot")
|
|
machine.wait_until_fails("pgrep tinywl")
|
|
machine.wait_for_file("/tmp/tinywl-exit-ok")
|
|
machine.copy_from_vm("/tmp/tinywl.log")
|
|
'';
|
|
})
|