summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorOPNA2608 <christoph.neidahl@gmail.com>2023-02-04 02:23:14 +0100
committerOPNA2608 <christoph.neidahl@gmail.com>2023-02-04 02:23:14 +0100
commit7ef7d9e26818955dc4bf011fa469718d52179eef (patch)
treeacb610df08274d84644ab17486af33e12174b26b /nixos
parenteca30e7730f7cb8c83472e2c2b2d9733ecce3083 (diff)
nixos/miriway: add test
Diffstat (limited to 'nixos')
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/miriway.nix126
2 files changed, 127 insertions, 0 deletions
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 9bf85cd0b97d..5163df9552dc 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -395,6 +395,7 @@ in {
minidlna = handleTest ./minidlna.nix {};
miniflux = handleTest ./miniflux.nix {};
minio = handleTest ./minio.nix {};
+ miriway = handleTest ./miriway.nix {};
misc = handleTest ./misc.nix {};
mjolnir = handleTest ./matrix/mjolnir.nix {};
mod_perl = handleTest ./mod_perl.nix {};
diff --git a/nixos/tests/miriway.nix b/nixos/tests/miriway.nix
new file mode 100644
index 000000000000..c4c50646f015
--- /dev/null
+++ b/nixos/tests/miriway.nix
@@ -0,0 +1,126 @@
+import ./make-test-python.nix ({ pkgs, lib, ... }: {
+ name = "miriway";
+
+ meta = {
+ maintainers = with lib.maintainers; [ OPNA2608 ];
+ # FIXME On ARM Miriway inside the VM doesn't receive keyboard inputs, why?
+ broken = pkgs.stdenv.hostPlatform.isAarch;
+ };
+
+ nodes.machine = { config, ... }: {
+ imports = [
+ ./common/auto.nix
+ ./common/user-account.nix
+ ];
+
+ # Seems to very rarely get interrupted by oom-killer
+ virtualisation.memorySize = 2047;
+
+ test-support.displayManager.auto = {
+ enable = true;
+ user = "alice";
+ };
+
+ services.xserver = {
+ enable = true;
+ displayManager.defaultSession = lib.mkForce "miriway";
+ };
+
+ programs.miriway = {
+ enable = true;
+ config = ''
+ add-wayland-extensions=all
+
+ ctrl-alt=t:foot --maximized
+ ctrl-alt=a:env WINIT_UNIX_BACKEND=x11 WAYLAND_DISPLAY=invalid alacritty --option window.startup_mode=maximized
+
+ shell-component=dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY
+
+ shell-component=foot --maximized
+ '';
+ };
+
+ environment = {
+ shellAliases = {
+ test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok";
+ test-x11 = "glinfo | tee /tmp/test-x11.out && touch /tmp/test-x11-exit-ok";
+ };
+
+ systemPackages = with pkgs; [
+ mesa-demos
+ wayland-utils
+ foot
+ alacritty
+ ];
+
+ # To help with OCR
+ etc."xdg/foot/foot.ini".text = lib.generators.toINI { } {
+ main = {
+ font = "inconsolata:size=16";
+ };
+ colors = rec {
+ foreground = "000000";
+ background = "ffffff";
+ regular2 = foreground;
+ };
+ };
+ etc."xdg/alacritty/alacritty.yml".text = lib.generators.toYAML { } {
+ font = rec {
+ normal.family = "Inconsolata";
+ bold.family = normal.family;
+ italic.family = normal.family;
+ bold_italic.family = normal.family;
+ size = 16;
+ };
+ colors = rec {
+ primary = {
+ foreground = "0x000000";
+ background = "0xffffff";
+ };
+ normal = {
+ green = primary.foreground;
+ };
+ };
+ };
+ };
+
+ fonts.fonts = [ pkgs.inconsolata ];
+ };
+
+ enableOCR = true;
+
+ testScript = { nodes, ... }: ''
+ start_all()
+ machine.wait_for_unit("multi-user.target")
+
+ # Wait for Miriway to complete startup
+ machine.wait_for_file("/run/user/1000/wayland-0")
+ machine.succeed("pgrep miriway-shell")
+ machine.screenshot("miriway_launched")
+
+ # Test Wayland
+ # We let Miriway start the first terminal, as we might get stuck if it's not ready to process the first keybind
+ # machine.send_key("ctrl-alt-t")
+ machine.wait_for_text("alice@machine")
+ machine.send_chars("test-wayland\n")
+ machine.wait_for_file("/tmp/test-wayland-exit-ok")
+ machine.copy_from_vm("/tmp/test-wayland.out")
+ machine.screenshot("foot_wayland_info")
+ # Only succeeds when a mouse is moved inside an interactive session?
+ # machine.send_chars("exit\n")
+ # machine.wait_until_fails("pgrep foot")
+ machine.succeed("pkill foot")
+
+ # Test XWayland
+ machine.send_key("ctrl-alt-a")
+ machine.wait_for_text("alice@machine")
+ machine.send_chars("test-x11\n")
+ machine.wait_for_file("/tmp/test-x11-exit-ok")
+ machine.copy_from_vm("/tmp/test-x11.out")
+ machine.screenshot("alacritty_glinfo")
+ # Only succeeds when a mouse is moved inside an interactive session?
+ # machine.send_chars("exit\n")
+ # machine.wait_until_fails("pgrep alacritty")
+ machine.succeed("pkill alacritty")
+ '';
+})