From 9784ed760eebbc12407c919d787e9bb1fa7fbc62 Mon Sep 17 00:00:00 2001 From: Matteo Croce Date: Sat, 5 Oct 2024 01:39:37 +0200 Subject: [PATCH] timer: add unit tests for DeferReactivation Create a unit test for systemd timer DeferReactivation config option. The test works by creating a timer which fires every 5 seconds and starts an unit which runs for 5 seconds. With DeferReactivation=true, the timer must fire every 5+5 seconds, instead of the 5 it fires normally. As we need at least two timer runs to check if the delta is correct, the test duration on success will be at least 20 seconds. To be safe, the test script waits 35 seconds: this is enough to get at least three runs but low enough to avoid clogging the CI. --- .../realtime-test.service | 6 +++++ .../realtime-test.timer | 10 ++++++++ test/TEST-74-AUX-UTILS/meson.build | 2 ++ .../TEST-74-AUX-UTILS.defer_reactivation.sh | 23 +++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service create mode 100644 test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer create mode 100755 test/units/TEST-74-AUX-UTILS.defer_reactivation.sh diff --git a/test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service b/test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service new file mode 100644 index 00000000000..a754626828b --- /dev/null +++ b/test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.service @@ -0,0 +1,6 @@ +[Unit] +Description=Testing systemd timers + +[Service] +Type=simple +ExecStart=sh -c 'date +%%s >>/tmp/realtime-test.log ; sleep 5' diff --git a/test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer b/test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer new file mode 100644 index 00000000000..b870b41628b --- /dev/null +++ b/test/TEST-74-AUX-UTILS/TEST-74-AUX-UTILS.units/realtime-test.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Testing systemd timers + +[Timer] +OnCalendar=*:*:0/5 +AccuracySec=1us +DeferReactivation=true + +[Install] +WantedBy=timers.target diff --git a/test/TEST-74-AUX-UTILS/meson.build b/test/TEST-74-AUX-UTILS/meson.build index 668ad492ca6..543eee195ff 100644 --- a/test/TEST-74-AUX-UTILS/meson.build +++ b/test/TEST-74-AUX-UTILS/meson.build @@ -7,3 +7,5 @@ integration_tests += [ 'vm' : true, }, ] + +testdata_subdirs += [meson.current_source_dir() / 'TEST-74-AUX-UTILS.units'] diff --git a/test/units/TEST-74-AUX-UTILS.defer_reactivation.sh b/test/units/TEST-74-AUX-UTILS.defer_reactivation.sh new file mode 100755 index 00000000000..d1b113d1ab0 --- /dev/null +++ b/test/units/TEST-74-AUX-UTILS.defer_reactivation.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -eux +set -o pipefail + +systemctl start realtime-test.timer + +sleep 35 +mindelta=10 + +last= +while read -r time; do + if [ -n "$last" ]; then + delta=$((time - last)) + if [ "$delta" -lt $mindelta ]; then + echo "Timer fired too early: $delta < $mindelta" >/failed + break + fi + fi + last=$time +done