Files
systemd/test/units/TEST-07-PID1.DeferReactivation.sh
T
Yu Watanabe 922885e0a5 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.
2025-07-30 15:37:18 +01:00

31 lines
1.1 KiB
Bash
Executable File

#!/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 </tmp/defer-reactivation.log