diff --git a/flake.nix b/flake.nix index 659e73da..46bfc12d 100644 --- a/flake.nix +++ b/flake.nix @@ -124,8 +124,7 @@ /* set host specific properties here */ PubSolarOS = { tests = [ - (import ./tests/first-test.nix {}) - (import ./tests/second-test.nix {}) + (import ./tests/first-test.nix { pkgs = nixos.legacyPackages.x86_64-linux; lib = nixos.lib; }) ]; }; fae = { diff --git a/tests/first-test.nix b/tests/first-test.nix index 14576dc7..1e9af9f9 100644 --- a/tests/first-test.nix +++ b/tests/first-test.nix @@ -1,11 +1,20 @@ -{ }: +{ pkgs, lib, ... }: { name = "firstTest"; nodes.test-machine = { suites ? null, ... }: { imports = suites.iso; + home-manager.users.pub-solar.programs.zsh.shellAliases = { + test-x11 = "glinfo | 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"; + }; + + # source: https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/tests/sway.nix environment = { + # For glinfo and wayland-info: + systemPackages = with pkgs; [ mesa-demos wayland-utils alacritty ]; + # Use a fixed SWAYSOCK path (for swaymsg): variables = { "SWAYSOCK" = "/tmp/sway-ipc.sock"; # TODO: Investigate if we can get hardware acceleration to work (via @@ -16,37 +25,61 @@ "WLR_RENDERER" = "pixman"; }; - shellAliases = { - test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok"; + # To help with OCR: + etc."xdg/foot/foot.ini".text = lib.generators.toINI { } { + main = { + font = "inconsolata:size=14"; + }; + colors = rec { + foreground = "000000"; + background = "ffffff"; + regular2 = foreground; + }; }; }; + fonts.fonts = [ pkgs.inconsolata ]; + # Need to switch to a different GPU driver than the default one (-vga std) so that Sway can launch: virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ]; + virtualisation.cores = 4; + virtualisation.memorySize = 2048; }; enableOCR = true; testScript = '' + import shlex + def swaymsg(command: str, succeed=True): + with machine.nested(f"sending swaymsg {command!r}" + " (allowed to fail)" * (not succeed)): + (machine.succeed if succeed else machine.execute)( + f"su - pub-solar -c {shlex.quote('swaymsg -- ' + command)}" + ) + + 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") + machine.wait_for_file("/run/user/1000/pipewire-0") - # Start a terminal (alacritty) on workspace 3: - machine.send_key("super-3") + # Start a terminal (foot) on workspace 3: + machine.wait_for_text("1") + machine.send_key("meta_l-3") machine.sleep(3) - machine.send_key("super-ret") + machine.send_key("meta_l-ret") + machine.sleep(10) machine.send_chars("whoami\n") + machine.sleep(3) machine.wait_for_text("pub-solar") machine.send_chars("test-wayland\n") - machine.wait_for_file("/tmp/test-wayland-exit-ok") - print(machine.succeed("cat /tmp/test-wayland.out")) - machine.copy_from_vm("/tmp/test-wayland.out") - machine.screenshot("alacritty_wayland_info") - machine.send_key("super-shift-q") - machine.wait_until_fails("pgrep alacritty") + machine.sleep(3) + machine.screenshot("foot_wayland_info") + machine.send_key("meta_l-shift-q") + machine.wait_until_fails("pgrep foot") ''; }