]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
TEST-13-NSPAWN: fix race between container exit and varlink call
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 23 Oct 2024 21:00:53 +0000 (06:00 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 31 Oct 2024 01:59:14 +0000 (10:59 +0900)
Follow-up for 3cb72c7862d8950bc2a963aaa3ca3255eea374b6.

The test container exits shortly, hence when varlinkctl is called, the
container may be already terminated. Let's make the container live
infinitely.
Also, this makes the os-release files removed after the container is started.

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

index 244582677de86aa71134334bc0f3479150ec8e80..24eb673af30f16faa5725d5bfc2475ce099b2201 100755 (executable)
@@ -304,7 +304,26 @@ varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Unreg
 
 # test io.systemd.Machine.List with addresses, OSRelease, and UIDShift fields
 create_dummy_container "/var/lib/machines/container-without-os-release"
+cat >>/var/lib/machines/container-without-os-release/sbin/init <<\EOF
+PID=0
+
+trap 'kill 0' RTMIN+3
+trap 'kill $PID' EXIT
+
+# We need to wait for the sleep process asynchronously in order to allow
+# bash to process signals
+sleep infinity &
+
+# notify that the process is ready
+touch /ready
+
+PID=$!
+while :; do
+    wait || :
+done
+EOF
 machinectl start "container-without-os-release"
+timeout 30 bash -c "until test -e /var/lib/machines/container-without-os-release/ready; do sleep .5; done"
 rm -f /var/lib/machines/container-without-os-release/etc/os-release /var/lib/machines/container-without-os-release/usr/lib/os-release
 (! varlinkctl --more call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{"name": "container-without-os-release", "acquireMetadata": "yes"}')
 varlinkctl --more call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{"name": "container-without-os-release", "acquireMetadata": "graceful"}'