1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-27 01:55:22 +03:00

test: add test case for recent OnSuccess=/OnFailure= state machine changes

This commit is contained in:
Lennart Poettering 2023-07-03 14:49:46 +02:00
parent 09d04ad325
commit f4b24db7c3
4 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,3 @@
[Service]
Type=notify
ExecStart=bash -c "echo failure >> /tmp/success-failure-test-result && systemd-notify --ready && sleep infinity"

View File

@ -0,0 +1,3 @@
[Service]
Type=notify
ExecStart=bash -c "echo success >> /tmp/success-failure-test-result && systemd-notify --ready && sleep infinity"

View File

@ -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

View File

@ -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