From bdbf905df8fd4fed43f60c59d7f0af53c7818aa8 Mon Sep 17 00:00:00 2001 From: Coding Agent Date: Sat, 5 Sep 2026 06:39:47 +0000 Subject: [PATCH] test: exercise PipeWire controls with an emulated sound card --- desktop-test.nix | 19 +++---------------- desktop-test.py | 8 +++++++- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/desktop-test.nix b/desktop-test.nix index be27aa2..d257253 100644 --- a/desktop-test.nix +++ b/desktop-test.nix @@ -35,6 +35,9 @@ pkgs.testers.runNixOSTest { }; qemu.options = [ "-vga none" + "-audiodev none,id=test-audio" + "-device ich9-intel-hda" + "-device hda-duplex,audiodev=test-audio" "-device virtio-gpu${if hostRenderNode == null then "" else "-gl"}-pci,xres=1920,yres=1080" ] ++ pkgs.lib.optionals (hostRenderNode != null) [ @@ -50,7 +53,6 @@ pkgs.testers.runNixOSTest { LIBGL_ALWAYS_SOFTWARE = "1"; LP_NUM_THREADS = "1"; }; - environment.systemPackages = [ pkgs.python3 ]; users.users.dev.hashedPasswordFile = toString ( pkgs.runCommand "test-only-password-hash" { nativeBuildInputs = [ pkgs.mkpasswd ]; } '' mkpasswd --method=sha-512 --salt=nixostest desktop-test > "$out" @@ -60,21 +62,6 @@ pkgs.testers.runNixOSTest { user = "dev"; command = "${pkgs.uwsm}/bin/uwsm start -e -D Hyprland hyprland.desktop"; }; - services.pipewire.extraConfig.pipewire."99-test-audio"."context.objects" = [ - { - factory = "adapter"; - args = { - "factory.name" = "support.null-audio-sink"; - "node.name" = "test-speakers"; - "node.description" = "Test speakers"; - "media.class" = "Audio/Sink"; - "audio.position" = [ - "FL" - "FR" - ]; - }; - } - ]; }; testScript = builtins.readFile ./desktop-test.py; } diff --git a/desktop-test.py b/desktop-test.py index a3a159b..16d91e2 100644 --- a/desktop-test.py +++ b/desktop-test.py @@ -65,7 +65,13 @@ assert "Inter" in user("fc-match Inter") # Pi's real --version is checked natively; avoid costly Node startup under TCG. user("test -x /run/current-system/sw/bin/pi") assert "zsh" in user("getent passwd dev") -assert "test-speakers" in session("wpctl status --name") +# QEMU emulates HDA with a silent host backend; exercise real ALSA/PipeWire nodes. +machine.wait_until_succeeds(in_session("wpctl inspect @DEFAULT_AUDIO_SINK@ | grep -q alsa_output"), timeout=90) +session("wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.42") +assert "0.42" in session("wpctl get-volume @DEFAULT_AUDIO_SINK@") +session("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 1") +assert "MUTED" in session("wpctl get-volume @DEFAULT_AUDIO_SOURCE@") +session("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 0") machine.succeed("systemctl is-active systemd-resolved") launch("terminal", "kitty --title 'Workspace ready' sh -c " + shlex.quote(