diff --git a/test/sandbox/test.py b/test/sandbox/test.py index f188a01d..a431daab 100644 --- a/test/sandbox/test.py +++ b/test/sandbox/test.py @@ -26,7 +26,7 @@ def swaymsg(command: str = "", succeed=True, type="command"): def check_filter(check_offset, name, pname): - pid = int(machine.wait_until_succeeds(f"pgrep -U {10000+check_offset} -x {pname}", timeout=60)) + pid = int(machine.wait_until_succeeds(f"pgrep -U {10000+check_offset} -x {pname}")) hash = machine.succeed(f"sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 WAYLAND_DISPLAY=wayland-1 check-sandbox-{name} hash") print(machine.succeed(f"hakurei-test -s {hash} filter {pid}")) @@ -47,7 +47,7 @@ check_filter(0, "pdlike", "cat") # Check fd leak: swaymsg("exec exec 127/dev/stdout") @@ -132,11 +132,11 @@ def silent_output_interrupt(flags): wait_for_window("alice@machine") # identity 0 does not have home-manager machine.send_chars(f"exec hakurei exec {flags}-a 0 sh -c 'export PATH=/run/current-system/sw/bin:$PATH && touch /tmp/pd-silent-ready && sleep infinity' &>/tmp/pd-silent\n") - machine.wait_for_file("/tmp/hakurei.0/tmpdir/0/pd-silent-ready", timeout=15) + machine.wait_for_file("/tmp/hakurei.0/tmpdir/0/pd-silent-ready") machine.succeed("rm /tmp/hakurei.0/tmpdir/0/pd-silent-ready") machine.send_key("ctrl-c") - machine.wait_until_fails("pgrep foot", timeout=5) - machine.wait_until_fails(f"pgrep -u alice -f 'hakurei exec {flags}-a 0 '", timeout=5) + machine.wait_until_fails("pgrep foot") + machine.wait_until_fails(f"pgrep -u alice -f 'hakurei exec {flags}-a 0 '") output = machine.succeed("cat /tmp/pd-silent && rm /tmp/pd-silent") if output != "": raise Exception(f"unexpected output\n{output}") @@ -151,7 +151,7 @@ print(machine.fail("sudo -u alice -i hakurei -v exec --wayland true")) # Start hakurei permissive defaults within Wayland session: hakurei('-v exec --wayland --dbus --dbus-log notify-send -a "NixOS Tests" "Test notification" "Notification from within sandbox." && touch /tmp/dbus-ok') -machine.wait_for_file("/tmp/dbus-ok", timeout=15) +machine.wait_for_file("/tmp/dbus-ok") collect_state_ui("dbus_notify_exited") # not in pid namespace, verify termination machine.wait_until_fails("pgrep xdg-dbus-proxy") @@ -165,11 +165,11 @@ hakurei("-v exec --wayland -X --dbus --pulse -u p1 foot && touch /tmp/p1-exit-ok wait_for_window("p1@machine") print(machine.succeed("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000")) machine.send_chars("exit\n") -machine.wait_for_file("/tmp/p1-exit-ok", timeout=15) +machine.wait_for_file("/tmp/p1-exit-ok") # Verify acl is kept alive: print(machine.succeed("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000")) machine.send_chars("exit\n") -machine.wait_for_file("/tmp/p0-exit-ok", timeout=15) +machine.wait_for_file("/tmp/p0-exit-ok") machine.fail("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000") # Check invalid identifier fd behaviour: @@ -181,7 +181,7 @@ print(machine.succeed('grep "^hakurei: cannot write identifier: bad file descrip swaymsg("exec sh -c 'ne-foot; echo -n $? > /tmp/monitor-exit-code'") wait_for_window(f"u0_a{hakurei_identity(0)}@machine") machine.succeed("pkill -INT -f 'hakurei -v run '") -machine.wait_until_fails("pgrep foot", timeout=5) +machine.wait_until_fails("pgrep foot") machine.wait_for_file("/tmp/monitor-exit-code") interrupt_exit_code = int(machine.succeed("cat /tmp/monitor-exit-code")) if interrupt_exit_code != 230: @@ -191,7 +191,7 @@ if interrupt_exit_code != 230: swaymsg("exec sh -c 'ne-foot-immediate; echo -n $? > /tmp/monitor-exit-code'") wait_for_window(f"u0_a{hakurei_identity(0)}@machine") machine.succeed("pkill -INT -f 'hakurei -v run '") -machine.wait_until_fails("pgrep foot", timeout=5) +machine.wait_until_fails("pgrep foot") machine.wait_for_file("/tmp/monitor-exit-code") interrupt_exit_code = int(machine.succeed("cat /tmp/monitor-exit-code")) if interrupt_exit_code != 254: @@ -202,7 +202,7 @@ swaymsg("exec sh -c 'ne-foot &> /tmp/shim-cont-unexpected-pid'") wait_for_window(f"u0_a{hakurei_identity(0)}@machine") machine.succeed("pkill -CONT -f 'hakurei shim'") machine.succeed("pkill -INT -f 'hakurei -v run '") -machine.wait_until_fails("pgrep foot", timeout=5) +machine.wait_until_fails("pgrep foot") machine.wait_for_file("/tmp/shim-cont-unexpected-pid") print(machine.succeed('grep "shim: got SIGCONT from unexpected process$" /tmp/shim-cont-unexpected-pid')) @@ -221,26 +221,26 @@ if sched_rr != 2: swaymsg("exec ne-foot") wait_for_window(f"u0_a{hakurei_identity(0)}@machine") machine.send_chars("clear; wayland-info && touch /var/tmp/client-ok\n") -machine.wait_for_file("/var/tmp/client-ok", timeout=15) +machine.wait_for_file("/var/tmp/client-ok") collect_state_ui("foot_wayland") check_state("ne-foot", {"wayland": True}) # Verify lack of acl on XDG_RUNTIME_DIR: machine.fail(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(0) + 10000}") machine.send_chars("exit\n") -machine.wait_until_fails("pgrep foot", timeout=5) -machine.fail(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(0) + 10000}", timeout=5) +machine.wait_until_fails("pgrep foot") +machine.fail(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(0) + 10000}") # Test pipewire-pulse: swaymsg("exec pa-foot") wait_for_window(f"u0_a{hakurei_identity(1)}@machine") machine.send_chars("clear; pactl info && touch /var/tmp/pulse-ok\n") -machine.wait_for_file("/var/tmp/pulse-ok", timeout=15) +machine.wait_for_file("/var/tmp/pulse-ok") collect_state_ui("pulse_wayland") check_state("pa-foot", {"wayland": True, "pipewire": True}) machine.fail("find /tmp -maxdepth 1 -type d -name '.hakurei-shim-*' -print -exec false '{}' +") machine.send_chars("exit\n") -machine.wait_until_fails("pgrep foot", timeout=5) -machine.wait_until_fails("pgrep -x hakurei", timeout=5) +machine.wait_until_fails("pgrep foot") +machine.wait_until_fails("pgrep -x hakurei") machine.succeed("find /tmp -maxdepth 1 -type d -name '.hakurei-shim-*' -print -exec false '{}' +") # Test PipeWire SecurityContext: machine.succeed("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei -v exec --pulse pactl info") @@ -253,25 +253,25 @@ machine.fail("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei -v exec -- swaymsg("exec x11-alacritty") wait_for_window(f"u0_a{hakurei_identity(0)}@machine") machine.send_chars("clear; glinfo && touch /var/tmp/x11-ok\n") -machine.wait_for_file("/var/tmp/x11-ok", timeout=15) +machine.wait_for_file("/var/tmp/x11-ok") collect_state_ui("alacritty_x11") check_state("x11-alacritty", {"x11": True}) machine.send_chars("exit\n") -machine.wait_until_fails("pgrep alacritty", timeout=5) +machine.wait_until_fails("pgrep alacritty") # Start app (foot) with direct Wayland access: swaymsg("exec da-foot") wait_for_window(f"u0_a{hakurei_identity(3)}@machine") machine.send_chars("clear; wayland-info && touch /var/tmp/direct-ok\n") collect_state_ui("foot_direct") -machine.wait_for_file("/var/tmp/direct-ok", timeout=15) +machine.wait_for_file("/var/tmp/direct-ok") check_state("da-foot", {"wayland": True}) # Verify acl on XDG_RUNTIME_DIR: print(machine.succeed(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(3) + 10000}")) machine.send_chars("exit\n") -machine.wait_until_fails("pgrep foot", timeout=5) +machine.wait_until_fails("pgrep foot") # Verify acl cleanup on XDG_RUNTIME_DIR: -machine.wait_until_fails(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(3) + 10000}", timeout=5) +machine.wait_until_fails(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(3) + 10000}") # Test syscall filter: print(machine.fail("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 strace-failure")) @@ -280,20 +280,20 @@ print(machine.fail("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 strace-failu swaymsg("exec foot $SHELL -c '(ne-foot) & disown && exec $SHELL'") wait_for_window(f"u0_a{hakurei_identity(0)}@machine") machine.send_chars("clear; wayland-info && touch /var/tmp/term-ok\n") -machine.wait_for_file("/var/tmp/term-ok", timeout=15) +machine.wait_for_file("/var/tmp/term-ok") machine.send_key("alt-h") machine.send_chars("clear; hakurei show $(hakurei ps --short) && touch /tmp/ps-show-ok && exec cat\n") -machine.wait_for_file("/tmp/ps-show-ok", timeout=5) +machine.wait_for_file("/tmp/ps-show-ok") collect_state_ui("foot_wayland_term") check_state("ne-foot", {"wayland": True}) machine.send_key("alt-l") machine.send_chars("exit\n") wait_for_window("alice@machine") machine.send_key("ctrl-c") -machine.wait_until_fails("pgrep foot", timeout=5) +machine.wait_until_fails("pgrep foot") # Exit Sway and verify process exit status 0: -machine.wait_until_fails("pgrep -x hakurei", timeout=5) +machine.wait_until_fails("pgrep -x hakurei") swaymsg("exit", succeed=False) machine.wait_for_file("/tmp/sway-exit-ok") @@ -308,4 +308,4 @@ machine.succeed("find /tmp -maxdepth 1 -type d -name '.hakurei-shim-*' -print -e # Verify go test status: machine.wait_for_file("/tmp/hakurei-test-done") print(machine.succeed("cat /tmp/hakurei-test.log")) -machine.wait_for_file("/tmp/hakurei-test-ok", timeout=2) +machine.wait_for_file("/tmp/hakurei-test-ok")