]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Try to fix exittype test flakyness
authorHenri Chain <henri.chain@enioka.com>
Tue, 23 Nov 2021 15:47:18 +0000 (16:47 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 25 Nov 2021 19:12:59 +0000 (20:12 +0100)
The test was changed at @bluca 's request to avoid sleeps,
but the change insufficient to avoid all races.
The kill command is now run from the script itself to avoid using
ExecStartPost

test/units/testsuite-56.sh

index b167320615504dd70676c207ae47c70fefc6c522..ffdd35287253be6affd105c9a00e90d3ddf0b3bc 100755 (executable)
@@ -17,6 +17,9 @@ disown
 
 systemd-notify --ready
 
+# Run the stop/kill command
+\$1 &
+
 # process tree: systemd -> bash -> sleep
 sleep infinity
 EOF
@@ -24,14 +27,12 @@ chmod +x /tmp/test56-exit-cgroup.sh
 
 # service should be stopped cleanly
 systemd-run --wait --unit=one -p Type=notify -p ExitType=cgroup \
-    -p ExecStartPost='bash -c "systemctl stop one &"' \
-    /tmp/test56-exit-cgroup.sh
+    /tmp/test56-exit-cgroup.sh 'systemctl stop one'
 
 # same thing with a truthy exec condition
 systemd-run --wait --unit=two -p Type=notify -p ExitType=cgroup \
     -p ExecCondition=true \
-    -p ExecStartPost='bash -c "systemctl stop two &"' \
-    /tmp/test56-exit-cgroup.sh
+    /tmp/test56-exit-cgroup.sh 'systemctl stop two'
 
 # false exec condition: systemd-run should exit immediately with status code: 1
 systemd-run --wait --unit=three -p Type=notify -p ExitType=cgroup \
@@ -41,8 +42,7 @@ systemd-run --wait --unit=three -p Type=notify -p ExitType=cgroup \
 
 # service should exit uncleanly (main process exits with SIGKILL)
 systemd-run --wait --unit=four -p Type=notify -p ExitType=cgroup \
-    -p ExecStartPost='bash -c "systemctl kill --signal 9 four &"' \
-    /tmp/test56-exit-cgroup.sh \
+    /tmp/test56-exit-cgroup.sh 'systemctl kill --signal 9 four' \
     && { echo 'unexpected success'; exit 1; }
 
 
@@ -58,18 +58,19 @@ sleep infinity &
 ((sleep infinity); true) &
 
 systemd-notify --ready
+
+# Run the stop/kill command after this bash process exits
+(sleep 1; \$1) &
 EOF
 chmod +x /tmp/test56-exit-cgroup-parentless.sh
 
 # service should be stopped cleanly
 systemd-run --wait --unit=five -p Type=notify -p ExitType=cgroup \
-    -p ExecStartPost='bash -c "systemctl stop five &"' \
-    /tmp/test56-exit-cgroup-parentless.sh
+    /tmp/test56-exit-cgroup-parentless.sh 'systemctl stop five'
 
 # service should still exit cleanly despite SIGKILL (the main process already exited cleanly)
 systemd-run --wait --unit=six -p Type=notify -p ExitType=cgroup \
-    -p ExecStartPost='bash -c "systemctl kill --signal 9 six &"' \
-    /tmp/test56-exit-cgroup-parentless.sh
+    /tmp/test56-exit-cgroup-parentless.sh 'systemctl kill --signal 9 six'
 
 
 systemd-analyze log-level info