From b911a6122b4e52d5202ad9d8e9c1a25605ebf4a4 Mon Sep 17 00:00:00 2001 From: Felix Singer Date: Sat, 5 Apr 2025 10:02:19 +0200 Subject: [PATCH] nixosTests.mumble: Migrate to runTest Signed-off-by: Felix Singer --- nixos/tests/all-tests.nix | 2 +- nixos/tests/mumble.nix | 160 +++++++++++++++++++------------------- 2 files changed, 80 insertions(+), 82 deletions(-) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index b932dd0f6cf0..4e05418517ca 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -807,7 +807,7 @@ in mpv = runTest ./mpv.nix; mtp = handleTest ./mtp.nix { }; multipass = handleTest ./multipass.nix { }; - mumble = handleTest ./mumble.nix { }; + mumble = runTest ./mumble.nix; # Fails on aarch64-linux at the PDF creation step - need to debug this on an # aarch64 machine.. musescore = handleTestOn [ "x86_64-linux" ] ./musescore.nix { }; diff --git a/nixos/tests/mumble.nix b/nixos/tests/mumble.nix index c8bbe473c2b1..f4b5405a2e4c 100644 --- a/nixos/tests/mumble.nix +++ b/nixos/tests/mumble.nix @@ -1,95 +1,93 @@ -import ./make-test-python.nix ( - { pkgs, ... }: +{ pkgs, ... }: - let - client = - { pkgs, ... }: +let + client = + { pkgs, ... }: + { + imports = [ ./common/x11.nix ]; + environment.systemPackages = [ pkgs.mumble ]; + }; + + # outside of tests, this file should obviously not come from the nix store + envFile = pkgs.writeText "nixos-test-mumble-murmurd.env" '' + MURMURD_PASSWORD=testpassword + ''; + +in +{ + name = "mumble"; + meta = with pkgs.lib.maintainers; { + maintainers = [ thoughtpolice ]; + }; + + nodes = { + server = + { config, ... }: { - imports = [ ./common/x11.nix ]; - environment.systemPackages = [ pkgs.mumble ]; + security.apparmor.enable = true; + services.murmur.enable = true; + services.murmur.registerName = "NixOS tests"; + services.murmur.password = "$MURMURD_PASSWORD"; + services.murmur.environmentFile = envFile; + networking.firewall.allowedTCPPorts = [ config.services.murmur.port ]; }; - # outside of tests, this file should obviously not come from the nix store - envFile = pkgs.writeText "nixos-test-mumble-murmurd.env" '' - MURMURD_PASSWORD=testpassword - ''; + client1 = client; + client2 = client; + }; - in - { - name = "mumble"; - meta = with pkgs.lib.maintainers; { - maintainers = [ thoughtpolice ]; - }; + testScript = '' + start_all() - nodes = { - server = - { config, ... }: - { - security.apparmor.enable = true; - services.murmur.enable = true; - services.murmur.registerName = "NixOS tests"; - services.murmur.password = "$MURMURD_PASSWORD"; - services.murmur.environmentFile = envFile; - networking.firewall.allowedTCPPorts = [ config.services.murmur.port ]; - }; + server.wait_for_unit("murmur.service") + client1.wait_for_x() + client2.wait_for_x() - client1 = client; - client2 = client; - }; + client1.execute("mumble mumble://client1:testpassword\@server/test >&2 &") + client2.execute("mumble mumble://client2:testpassword\@server/test >&2 &") - testScript = '' - start_all() + # cancel client audio configuration + client1.wait_for_window(r"Audio Tuning Wizard") + client2.wait_for_window(r"Audio Tuning Wizard") + server.sleep(5) # wait because mumble is slow to register event handlers + client1.send_key("esc") + client2.send_key("esc") - server.wait_for_unit("murmur.service") - client1.wait_for_x() - client2.wait_for_x() + # cancel client cert configuration + client1.wait_for_window(r"Certificate Management") + client2.wait_for_window(r"Certificate Management") + server.sleep(5) # wait because mumble is slow to register event handlers + client1.send_key("esc") + client2.send_key("esc") - client1.execute("mumble mumble://client1:testpassword\@server/test >&2 &") - client2.execute("mumble mumble://client2:testpassword\@server/test >&2 &") + # accept server certificate + client1.wait_for_window(r"^Mumble$") + client2.wait_for_window(r"^Mumble$") + server.sleep(5) # wait because mumble is slow to register event handlers + client1.send_chars("y") + client2.send_chars("y") + server.sleep(5) # wait because mumble is slow to register event handlers - # cancel client audio configuration - client1.wait_for_window(r"Audio Tuning Wizard") - client2.wait_for_window(r"Audio Tuning Wizard") - server.sleep(5) # wait because mumble is slow to register event handlers - client1.send_key("esc") - client2.send_key("esc") + # sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again + client1.send_key("alt-tab") + client2.send_key("alt-tab") + server.sleep(5) # wait because mumble is slow to register event handlers + client1.send_chars("y") + client2.send_chars("y") - # cancel client cert configuration - client1.wait_for_window(r"Certificate Management") - client2.wait_for_window(r"Certificate Management") - server.sleep(5) # wait because mumble is slow to register event handlers - client1.send_key("esc") - client2.send_key("esc") + # Find clients in logs + server.wait_until_succeeds( + "journalctl -eu murmur -o cat | grep -q 'client1.\+Authenticated'" + ) + server.wait_until_succeeds( + "journalctl -eu murmur -o cat | grep -q 'client2.\+Authenticated'" + ) - # accept server certificate - client1.wait_for_window(r"^Mumble$") - client2.wait_for_window(r"^Mumble$") - server.sleep(5) # wait because mumble is slow to register event handlers - client1.send_chars("y") - client2.send_chars("y") - server.sleep(5) # wait because mumble is slow to register event handlers + server.sleep(5) # wait to get screenshot + client1.screenshot("screen1") + client2.screenshot("screen2") - # sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again - client1.send_key("alt-tab") - client2.send_key("alt-tab") - server.sleep(5) # wait because mumble is slow to register event handlers - client1.send_chars("y") - client2.send_chars("y") - - # Find clients in logs - server.wait_until_succeeds( - "journalctl -eu murmur -o cat | grep -q 'client1.\+Authenticated'" - ) - server.wait_until_succeeds( - "journalctl -eu murmur -o cat | grep -q 'client2.\+Authenticated'" - ) - - server.sleep(5) # wait to get screenshot - client1.screenshot("screen1") - client2.screenshot("screen2") - - # check if apparmor denied anything - server.fail('journalctl -b --no-pager --grep "^audit: .*apparmor=\\"DENIED\\""') - ''; - } -) + # check if apparmor denied anything + server.fail('journalctl -b --no-pager --grep "^audit: .*apparmor=\\"DENIED\\""') + ''; +}