From 922885e0a5b729a3faaba35676b37013f323d309 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 30 Jul 2025 09:51:55 +0900 Subject: [PATCH] test: several cleanups for DeferReactivation= - move to TEST-07-PID1, as it is a timer setting, - rename the timer and service, to emphasize they are for testing DeferReactivation=, - use timeout command to wait for the timer being triggered several times, - stop the timer when not necessary, - accept 9 seconds as delta, as there are fluctuations. Fixes the following failure: ``` TEST-74-AUX-UTILS.sh[422]: + last= TEST-74-AUX-UTILS.sh[422]: + read -r time TEST-74-AUX-UTILS.sh[422]: + '[' -n '' ']' TEST-74-AUX-UTILS.sh[422]: + last=1753779616 TEST-74-AUX-UTILS.sh[422]: + read -r time TEST-74-AUX-UTILS.sh[422]: + '[' -n 1753779616 ']' TEST-74-AUX-UTILS.sh[422]: + delta=9 TEST-74-AUX-UTILS.sh[422]: + '[' 9 -lt 10 ']' TEST-74-AUX-UTILS.sh[422]: + echo 'Timer fired too early: 9 < 10' ``` Fixes #38403. --- .../defer-reactivation.service | 6 ++++ .../defer-reactivation.timer | 7 +++++ .../realtime-test.service | 6 ---- .../realtime-test.timer | 10 ------- test/meson.build | 1 - test/units/TEST-07-PID1.DeferReactivation.sh | 30 +++++++++++++++++++ .../TEST-74-AUX-UTILS.defer_reactivation.sh | 23 -------------- 7 files changed, 43 insertions(+), 40 deletions(-) create mode 100644 test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.service create mode 100644 test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.timer delete mode 100644 test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service delete mode 100644 test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer create mode 100755 test/units/TEST-07-PID1.DeferReactivation.sh delete mode 100755 test/units/TEST-74-AUX-UTILS.defer_reactivation.sh diff --git a/test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.service b/test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.service new file mode 100644 index 00000000000..9c7332d6c99 --- /dev/null +++ b/test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.service @@ -0,0 +1,6 @@ +[Unit] +Description=Test for DeferReactivation=yes (service) + +[Service] +Type=simple +ExecStart=sh -c 'date +%%s >>/tmp/defer-reactivation.log; sleep 5' diff --git a/test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.timer b/test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.timer new file mode 100644 index 00000000000..4fe56b17da2 --- /dev/null +++ b/test/integration-tests/TEST-07-PID1/TEST-07-PID1.units/defer-reactivation.timer @@ -0,0 +1,7 @@ +[Unit] +Description=Test for DeferReactivation=yes (timer) + +[Timer] +OnCalendar=*:*:0/5 +AccuracySec=1us +DeferReactivation=yes diff --git a/test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service b/test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service deleted file mode 100644 index a754626828b..00000000000 --- a/test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Testing systemd timers - -[Service] -Type=simple -ExecStart=sh -c 'date +%%s >>/tmp/realtime-test.log ; sleep 5' diff --git a/test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer b/test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer deleted file mode 100644 index b870b41628b..00000000000 --- a/test/integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Testing systemd timers - -[Timer] -OnCalendar=*:*:0/5 -AccuracySec=1us -DeferReactivation=true - -[Install] -WantedBy=timers.target diff --git a/test/meson.build b/test/meson.build index 48e0ba7f925..7b760dc5724 100644 --- a/test/meson.build +++ b/test/meson.build @@ -357,7 +357,6 @@ if install_tests 'integration-tests/TEST-30-ONCLOCKCHANGE/TEST-30-ONCLOCKCHANGE.units', 'integration-tests/TEST-52-HONORFIRSTSHUTDOWN/TEST-52-HONORFIRSTSHUTDOWN.units', 'integration-tests/TEST-63-PATH/TEST-63-PATH.units', - 'integration-tests/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units', 'integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units', ] diff --git a/test/units/TEST-07-PID1.DeferReactivation.sh b/test/units/TEST-07-PID1.DeferReactivation.sh new file mode 100755 index 00000000000..ff795ff0022 --- /dev/null +++ b/test/units/TEST-07-PID1.DeferReactivation.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +# shellcheck disable=SC2016 +set -eux +set -o pipefail + +systemctl start defer-reactivation.timer + +timeout 20 bash -c 'until [[ -e /tmp/defer-reactivation.log ]]; do sleep .5; done' +timeout 60 bash -c 'until (( $(cat /tmp/defer-reactivation.log | wc -l) >= 3 )); do sleep 5; done' + +systemctl stop defer-reactivation.timer + +# If the 'date' command is the service called instantaneously when the timer is triggered, each time delta +# must be 10 seconds. But in a realistic situation, the command is slightly delayed after the timer is +# triggered, and the delay has some fluctuations. If a trigger event calls the command at 00:00:01.01, and +# the next event does at 00:00:10.99, the delta is calculated as 9 seconds. So, let's accept 9 here. +mindelta=9 + +last= +while read -r time; do + if [[ -n "$last" ]]; then + delta=$(( time - last )) + if (( delta < mindelta )); then + echo "Timer fired too early: $delta < $mindelta" >/failed + exit 1 + fi + fi + last=$time +done /failed - break - fi - fi - last=$time -done