summaryrefslogtreecommitdiff
path: root/test/TEST-53-ISSUE-16347
diff options
context:
space:
mode:
authorFilipe Brandenburger <filbranden@gmail.com>2020-07-10 14:24:00 -0700
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-07-15 09:23:09 +0200
commit26698337f3842842af51cd007485f1dcd7c43cf2 (patch)
tree1e343fcc6f691b370122a25359f70162826f7382 /test/TEST-53-ISSUE-16347
parentd3e0662c7d531748dd3626861a21c684857fc52e (diff)
downloadsystemd-26698337f3842842af51cd007485f1dcd7c43cf2.tar.gz
timer: Adjust calendar timers based on monotonic timer instead of realtime
When the RTC time at boot is off in the future by a few days, OnCalendar= timers will be scheduled based on the time at boot. But if the time has been adjusted since boot, the timers will end up scheduled way in the future, which may cause them not to fire as shortly or often as expected. Update the logic so that the time will be adjusted based on monotonic time. We do that by calculating the adjusted manager startup realtime from the monotonic time stored at that time, by comparing that time with the realtime and monotonic time of the current time. Added a test case to validate this works as expected. The test case creates a QEMU virtual machine with the clock 3 days in the future. Then we adjust the clock back 3 days, and test creating a timer with an OnCalendar= for every 15 minutes. We also check the manager startup timestamp from both `systemd-analyze dump` and from D-Bus. Test output without the corresponding code changes that fix the issue: Timer elapse outside of the expected 20 minute window. next_elapsed=1594686119 now=1594426921 time_delta=259198 With the code changes in, the test passes as expected.
Diffstat (limited to 'test/TEST-53-ISSUE-16347')
l---------test/TEST-53-ISSUE-16347/Makefile1
-rwxr-xr-xtest/TEST-53-ISSUE-16347/test.sh11
2 files changed, 12 insertions, 0 deletions
diff --git a/test/TEST-53-ISSUE-16347/Makefile b/test/TEST-53-ISSUE-16347/Makefile
new file mode 120000
index 0000000000..e9f93b1104
--- /dev/null
+++ b/test/TEST-53-ISSUE-16347/Makefile
@@ -0,0 +1 @@
+../TEST-01-BASIC/Makefile \ No newline at end of file
diff --git a/test/TEST-53-ISSUE-16347/test.sh b/test/TEST-53-ISSUE-16347/test.sh
new file mode 100755
index 0000000000..089768e8dd
--- /dev/null
+++ b/test/TEST-53-ISSUE-16347/test.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+set -e
+
+TEST_DESCRIPTION="test timer units when initial clock is ahead"
+TEST_NO_NSPAWN=1
+
+future_date=$(date -u +%Y-%m-%dT%H:%M:%S -d '+3 days')
+QEMU_OPTIONS="-rtc base=${future_date}"
+. $TEST_BASE_DIR/test-functions
+
+do_test "$@" 53