]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
TEST-13-NSPAWN: add test for 'machinectl terminate'
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Oct 2024 20:15:18 +0000 (05:15 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Oct 2024 20:58:25 +0000 (05:58 +0900)
This also fixes the test for io.systemd.Machine.Terminate.

When systemd-nspawn@.service receives stop signal, then systemd-nspawn
sends SIGRTMIN+3 to the container, which was previously ignored by the
custom init script used by the container.
Let's introduce another trap for the signal, and correctly handle it.

Follow-up for 164af66f9abdfd8935098d9f10c746ff29dea7df.

test/units/TEST-13-NSPAWN.machined.sh

index f117c305b2f9ad2c8d331bbe099d84c985ddf871..92daf70acf5381dafe6b4cbc30e7e5f14b1d7521 100755 (executable)
@@ -39,6 +39,7 @@ cat >/var/lib/machines/long-running/sbin/init <<\EOF
 
 PID=0
 
+trap "touch /terminate; kill $PID" RTMIN+3
 trap "touch /poweroff" RTMIN+4
 trap "touch /reboot" INT
 trap "touch /trap" TRAP
@@ -115,7 +116,14 @@ timeout 10 bash -c "until test -e /var/lib/machines/long-running/poweroff; do sl
 rm -f /var/lib/machines/long-running/reboot
 machinectl reboot long-running
 timeout 10 bash -c "until test -e /var/lib/machines/long-running/reboot; do sleep .5; done"
-# Skip machinectl terminate for now, as it doesn't play well with our "init"
+# Test for 'machinectl terminate'
+rm -f /var/lib/machines/long-running/terminate
+machinectl terminate long-running
+timeout 10 bash -c "until test -e /var/lib/machines/long-running/terminate; do sleep .5; done"
+timeout 10 bash -c "while machinectl status long-running; do sleep .5; done"
+# Restart container
+long_running_machine_start
+# Test for 'machinectl kill'
 rm -f /var/lib/machines/long-running/trap
 machinectl kill --signal=SIGTRAP --kill-whom=leader long-running
 timeout 10 bash -c "until test -e /var/lib/machines/long-running/trap; do sleep .5; done"
@@ -271,8 +279,10 @@ timeout 30 bash -c "while varlinkctl call /run/systemd/machine/io.systemd.Machin
 
 # test io.systemd.Machine.Terminate
 long_running_machine_start
+rm -f /var/lib/machines/long-running/terminate
 varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Terminate '{"name":"long-running"}'
-timeout 120 bash -c "while varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{\"name\":\"long-running\"}'; do sleep 0.5; done"
+timeout 10 bash -c "until test -e /var/lib/machines/long-running/terminate; do sleep .5; done"
+timeout 30 bash -c "while varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{\"name\":\"long-running\"}'; do sleep 0.5; done"
 
 # test io.systemd.Machine.Register
 varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Register '{"name": "registered-container", "class": "container"}'