3
0
Fork 0
forked from mirrors/nixpkgs

nixos/tests/tinywl: init

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.
This commit is contained in:
Michael Weiss 2021-12-28 21:32:26 +01:00
parent 2bc8eed5b9
commit e9efbc0bbb
No known key found for this signature in database
GPG key ID: 5BE487C4D4771D83
4 changed files with 62 additions and 1 deletions

View file

@ -476,6 +476,7 @@ in
timezone = handleTest ./timezone.nix {};
tinc = handleTest ./tinc {};
tinydns = handleTest ./tinydns.nix {};
tinywl = handleTest ./tinywl.nix {};
tor = handleTest ./tor.nix {};
# traefik test relies on docker-containers
traefik = handleTestOn ["x86_64-linux"] ./traefik.nix {};

56
nixos/tests/tinywl.nix Normal file
View file

@ -0,0 +1,56 @@
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")
'';
})

View file

@ -21,7 +21,7 @@ stdenv.mkDerivation {
meta = with lib; {
homepage = "https://github.com/swaywm/wlroots/tree/master/tinywl";
description = ''A "minimum viable product" Wayland compositor based on wlroots'';
maintainers = with maintainers; [ qyliss ];
maintainers = with maintainers; [ qyliss ] ++ wlroots.meta.maintainers;
license = licenses.cc0;
inherit (wlroots.meta) platforms;
};

View file

@ -2,6 +2,7 @@
, libGL, wayland, wayland-protocols, libinput, libxkbcommon, pixman
, xcbutilwm, libX11, libcap, xcbutilimage, xcbutilerrors, mesa
, libpng, ffmpeg, xcbutilrenderutil, seatd, vulkan-loader, glslang
, nixosTests
, enableXWayland ? true, xwayland ? null
}:
@ -49,6 +50,9 @@ stdenv.mkDerivation rec {
done
'';
# Test via TinyWL (the "minimum viable product" Wayland compositor based on wlroots):
passthru.tests.tinywl = nixosTests.tinywl;
meta = with lib; {
description = "A modular Wayland compositor library";
longDescription = ''