]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add test case for recent OnSuccess=/OnFailure= state machine changes
authorLennart Poettering <lennart@poettering.net>
Mon, 3 Jul 2023 12:49:46 +0000 (14:49 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 3 Jul 2023 15:31:25 +0000 (17:31 +0200)
test/units/success-failure-test-failure.service [new file with mode: 0644]
test/units/success-failure-test-success.service [new file with mode: 0644]
test/units/success-failure-test.service [new file with mode: 0644]
test/units/testsuite-23.success-failure.sh [new file with mode: 0755]

diff --git a/test/units/success-failure-test-failure.service b/test/units/success-failure-test-failure.service
new file mode 100644 (file)
index 0000000..f4ce013
--- /dev/null
@@ -0,0 +1,3 @@
+[Service]
+Type=notify
+ExecStart=bash -c "echo failure >> /tmp/success-failure-test-result && systemd-notify --ready && sleep infinity"
diff --git a/test/units/success-failure-test-success.service b/test/units/success-failure-test-success.service
new file mode 100644 (file)
index 0000000..8503c45
--- /dev/null
@@ -0,0 +1,3 @@
+[Service]
+Type=notify
+ExecStart=bash -c "echo success >> /tmp/success-failure-test-result && systemd-notify --ready && sleep infinity"
diff --git a/test/units/success-failure-test.service b/test/units/success-failure-test.service
new file mode 100644 (file)
index 0000000..f66ff6c
--- /dev/null
@@ -0,0 +1,9 @@
+[Unit]
+OnSuccess=success-failure-test-success.service
+OnFailure=success-failure-test-failure.service
+
+[Service]
+Type=notify
+Restart=always
+ExecStart=bash -c 'test -f /tmp/success-failure-test-ran && touch /tmp/success-failure-test-ran2 && systemd-notify --ready && sleep infinity'
+ExecStopPost=touch /tmp/success-failure-test-ran
diff --git a/test/units/testsuite-23.success-failure.sh b/test/units/testsuite-23.success-failure.sh
new file mode 100755 (executable)
index 0000000..8fc9596
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+# Test OnSuccess=/OnFailure= in combination
+
+systemd-analyze log-level debug
+
+# Start-up should fail, but the automatic restart should fix it
+(! systemctl start success-failure-test )
+
+# Wait until the first invocation finished & failed
+while test ! -f /tmp/success-failure-test-ran ; do
+    sleep .5
+done
+
+# Wait until the second invocation finished & succeeded
+while test ! -f /tmp/success-failure-test-ran2 ; do
+    sleep .5
+done
+
+# Verify it is indeed running
+systemctl is-active -q success-failure-test
+
+# The above should have caused the failure service to start (asynchronously)
+while test "$(systemctl is-active success-failure-test-failure)" != "active" ; do
+    sleep .5
+done
+
+# But the success service should not have started
+test "$(systemctl is-active success-failure-test-success)" = "inactive"
+
+systemctl stop success-failure-test-failure
+
+# Do a clean kill of the service now
+systemctl kill success-failure-test
+
+# This should result in the success service to start
+while test "$(systemctl is-active success-failure-test-success)" != "active" ; do
+    sleep .5
+done
+
+# But the failure service should not have started again
+test "$(systemctl is-active success-failure-test-failure)" = "inactive"
+
+systemctl stop success-failure-test success-failure-test-success
+
+systemd-analyze log-level info