mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
test: add test for OnSuccess= + Uphold= + PropagatesStopTo= + BindsTo=
This commit is contained in:
parent
3ba471facb
commit
0760363274
1
test/TEST-57-ONSUCCESS-UPHOLD/Makefile
Symbolic link
1
test/TEST-57-ONSUCCESS-UPHOLD/Makefile
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../TEST-01-BASIC/Makefile
|
7
test/TEST-57-ONSUCCESS-UPHOLD/test.sh
Executable file
7
test/TEST-57-ONSUCCESS-UPHOLD/test.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
TEST_DESCRIPTION="test OnSuccess= + Uphold= + PropagatesStopTo= + BindsTo="
|
||||||
|
. $TEST_BASE_DIR/test-functions
|
||||||
|
|
||||||
|
do_test "$@" 57
|
8
test/units/testsuite-57-binds-to.service
Normal file
8
test/units/testsuite-57-binds-to.service
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Unit with BindsTo=
|
||||||
|
BindsTo=testsuite-57-bound-by.service
|
||||||
|
After=testsuite-57-bound-by.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/sleep infinity
|
||||||
|
ExecStopPost=systemctl kill --kill-who=main -sRTMIN+1 testsuite-57.service
|
5
test/units/testsuite-57-bound-by.service
Normal file
5
test/units/testsuite-57-bound-by.service
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Unit with BoundBy=
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/sleep 0.7
|
6
test/units/testsuite-57-fail.service
Normal file
6
test/units/testsuite-57-fail.service
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Failing unit
|
||||||
|
OnFailure=testsuite-57-uphold.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/false
|
9
test/units/testsuite-57-prop-stop-one.service
Normal file
9
test/units/testsuite-57-prop-stop-one.service
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Stop Propagation Receiver
|
||||||
|
Wants=testsuite-57-prop-stop-two.service
|
||||||
|
After=testsuite-57-prop-stop-two.service
|
||||||
|
StopPropagatedFrom=testsuite-57-prop-stop-two.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/sleep infinity
|
||||||
|
ExecStopPost=systemctl kill --kill-who=main -sUSR2 testsuite-57.service
|
5
test/units/testsuite-57-prop-stop-two.service
Normal file
5
test/units/testsuite-57-prop-stop-two.service
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Stop Propagation Sender
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/sleep 1.5
|
10
test/units/testsuite-57-short-lived.service
Normal file
10
test/units/testsuite-57-short-lived.service
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Shortlived Unit
|
||||||
|
StopWhenUnneeded=yes
|
||||||
|
|
||||||
|
# Bump up the start limit logic, so that we can be restarted frequently enough
|
||||||
|
StartLimitBurst=15
|
||||||
|
StartLimitIntervalSec=1h
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/lib/systemd/tests/testdata/units/testsuite-57-short-lived.sh
|
18
test/units/testsuite-57-short-lived.sh
Executable file
18
test/units/testsuite-57-short-lived.sh
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
if [ -f /tmp/testsuite-57.counter ] ; then
|
||||||
|
read -r counter < /tmp/testsuite-57.counter
|
||||||
|
counter=$(("$counter" + 1))
|
||||||
|
else
|
||||||
|
counter=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$counter" > /tmp/testsuite-57.counter
|
||||||
|
|
||||||
|
if [ "$counter" -eq 5 ] ; then
|
||||||
|
systemctl kill --kill-who=main -sUSR1 testsuite-57.service
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec sleep 1.5
|
6
test/units/testsuite-57-success.service
Normal file
6
test/units/testsuite-57-success.service
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Succeeding unit
|
||||||
|
OnSuccess=testsuite-57-fail.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/true
|
6
test/units/testsuite-57-uphold.service
Normal file
6
test/units/testsuite-57-uphold.service
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Upholding Unit
|
||||||
|
Upholds=testsuite-57-short-lived.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/sleep infinity
|
7
test/units/testsuite-57.service
Normal file
7
test/units/testsuite-57.service
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=TEST-57-ONSUCCESS-UPHOLD
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStartPre=rm -f /failed /testok
|
||||||
|
ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
|
||||||
|
Type=oneshot
|
68
test/units/testsuite-57.sh
Executable file
68
test/units/testsuite-57.sh
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
systemd-analyze log-level debug
|
||||||
|
systemd-analyze log-target journal
|
||||||
|
|
||||||
|
# Idea is this:
|
||||||
|
# 1. we start testsuite-57-success.service
|
||||||
|
# 2. which through OnSuccess= starts testsuite-57-fail.service,
|
||||||
|
# 3. which through OnFailure= starts testsuite-57-uphold.service,
|
||||||
|
# 4. which through Uphold= starts/keeps testsuite-57-short-lived.service running,
|
||||||
|
# 5. which will sleep 1s when invoked, and on the 5th invocation send us a SIGUSR1
|
||||||
|
# 6. once we got that we finish cleanly
|
||||||
|
|
||||||
|
sigusr1=0
|
||||||
|
trap sigusr1=1 SIGUSR1
|
||||||
|
|
||||||
|
systemctl start testsuite-57-success.service
|
||||||
|
|
||||||
|
while [ "$sigusr1" -eq 0 ] ; do
|
||||||
|
sleep .5
|
||||||
|
done
|
||||||
|
|
||||||
|
systemctl stop testsuite-57-uphold.service
|
||||||
|
|
||||||
|
# Idea is this:
|
||||||
|
# 1. we start testsuite-57-prop-stop-one.service
|
||||||
|
# 2. which through Wants=/After= pulls in testsuite-57-prop-stop-two.service as well
|
||||||
|
# 3. testsuite-57-prop-stop-one.service then sleeps indefinitely
|
||||||
|
# 4. testsuite-57-prop-stop-two.service sleeps a short time and exits
|
||||||
|
# 5. the StopPropagatedFrom= dependency between the two should ensure *both* will exit as result
|
||||||
|
# 6. an ExecStopPost= line on testsuite-57-prop-stop-one.service will send us a SIGUSR2
|
||||||
|
# 7. once we got that we finish cleanly
|
||||||
|
|
||||||
|
sigusr2=0
|
||||||
|
trap sigusr2=1 SIGUSR2
|
||||||
|
|
||||||
|
systemctl start testsuite-57-prop-stop-one.service
|
||||||
|
|
||||||
|
while [ "$sigusr2" -eq 0 ] ; do
|
||||||
|
sleep .5
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# Idea is this:
|
||||||
|
# 1. we start testsuite-57-binds-to.service
|
||||||
|
# 2. which through BindsTo=/After= pulls in testsuite-57-bound-by.service as well
|
||||||
|
# 3. testsuite-57-bound-by.service suddenly dies
|
||||||
|
# 4. testsuite-57-binds-to.service should then also be pulled down (it otherwise just hangs)
|
||||||
|
# 6. an ExecStopPost= line on testsuite-57-binds-to.service will send us a SIGRTMIN1+1
|
||||||
|
# 7. once we got that we finish cleanly
|
||||||
|
|
||||||
|
sigrtmin1=0
|
||||||
|
trap sigrtmin1=1 SIGRTMIN+1
|
||||||
|
|
||||||
|
systemctl start testsuite-57-binds-to.service
|
||||||
|
|
||||||
|
while [ "$sigrtmin1" -eq 0 ] ; do
|
||||||
|
sleep .5
|
||||||
|
done
|
||||||
|
|
||||||
|
systemd-analyze log-level info
|
||||||
|
|
||||||
|
echo OK >/testok
|
||||||
|
|
||||||
|
exit 0
|
Loading…
Reference in New Issue
Block a user