From 4e9ed04401d24aa47cd7fd2394db241d60292523 Mon Sep 17 00:00:00 2001 From: Nick Rosbrook Date: Thu, 13 Apr 2023 11:29:32 -0400 Subject: [PATCH] test: add some tests for RuntimeMaxSec Make sure the RuntimeMaxSec is applied correctly to service and scope units when they are started, and also on coldplug. (cherry picked from commit af4688398f55b110c9d7d57be5cd0199b06e18c8) (cherry picked from commit f152cdabaed160c767de2857b9c22513e8518b3e) (cherry picked from commit 6da4d102e1a37011bb7c897e492268bb71bc069d) --- test/units/testsuite-16.sh | 66 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/test/units/testsuite-16.sh b/test/units/testsuite-16.sh index 1b8cd018bb..9b8a7bd6fa 100755 --- a/test/units/testsuite-16.sh +++ b/test/units/testsuite-16.sh @@ -23,6 +23,25 @@ function wait_for() fi } +function wait_for_timeout() +{ + local unit="$1" + local time="$2" + + while [[ $time -gt 0 ]]; do + if [[ "$(systemctl show --property=Result "$unit")" == "Result=timeout" ]]; then + return 0 + fi + + sleep 1 + time=$((time - 1)) + done + + journalctl -u "$unit" >>"$TESTLOG" + + return 1 +} + # This checks all stages, start, runtime and stop, can be extended by # EXTEND_TIMEOUT_USEC @@ -44,6 +63,53 @@ wait_for fail_start startfail wait_for fail_stop stopfail wait_for fail_runtime runtimefail +# These ensure that RuntimeMaxSec is honored for scope and service units +# when they are created. +runtime_max_sec=5 + +systemd-run \ + --property=RuntimeMaxSec=${runtime_max_sec}s \ + -u runtime-max-sec-test-1.service \ + /usr/bin/sh -c "while true; do sleep 1; done" +wait_for_timeout runtime-max-sec-test-1.service $((runtime_max_sec + 2)) + +systemd-run \ + --property=RuntimeMaxSec=${runtime_max_sec}s \ + --scope \ + -u runtime-max-sec-test-2.scope \ + /usr/bin/sh -c "while true; do sleep 1; done" & +wait_for_timeout runtime-max-sec-test-2.scope $((runtime_max_sec + 2)) + +# These ensure that RuntimeMaxSec is honored for scope and service +# units if the value is changed and then the manager is reloaded. +systemd-run \ + -u runtime-max-sec-test-3.service \ + /usr/bin/sh -c "while true; do sleep 1; done" +mkdir -p /etc/systemd/system/runtime-max-sec-test-3.service.d/ +cat > /etc/systemd/system/runtime-max-sec-test-3.service.d/override.conf << EOF +[Service] +RuntimeMaxSec=${runtime_max_sec}s +EOF +systemctl daemon-reload +wait_for_timeout runtime-max-sec-test-3.service $((runtime_max_sec + 2)) + +systemd-run \ + --scope \ + -u runtime-max-sec-test-4.scope \ + /usr/bin/sh -c "while true; do sleep 1; done" & + +# Wait until the unit is running to avoid race with creating the override. +until systemctl is-active runtime-max-sec-test-4.scope; do + sleep 1 +done +mkdir -p /etc/systemd/system/runtime-max-sec-test-4.scope.d/ +cat > /etc/systemd/system/runtime-max-sec-test-4.scope.d/override.conf << EOF +[Scope] +RuntimeMaxSec=${runtime_max_sec}s +EOF +systemctl daemon-reload +wait_for_timeout runtime-max-sec-test-4.scope $((runtime_max_sec + 2)) + if [[ -f "$TESTLOG" ]]; then # no mv cp "$TESTLOG" /test.log