Systemd/test/units
Filipe Brandenburger 26698337f3 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.
2020-07-15 09:23:09 +02:00
..
loopy.service.d
unit-.service.d
unit-with-.service.d
unit-with-multiple-.service.d
unit-with-multiple-dashes.service.d
a-conj.service
a.service
autorelabel.service test/TEST-06: make autorelabel.service a static file too 2020-03-28 11:46:47 +01:00
b.service
basic.target
c.service
d.service
daughter.service
dml-discard-empty.service
dml-discard-set-ml.service
dml-discard.slice
dml-override-empty.service
dml-override.slice
dml-passthrough-empty.service
dml-passthrough-set-dml.service
dml-passthrough-set-ml.service
dml-passthrough.slice
dml.slice
e.service
end.service test: move TEST-01-BASIC setup to static files 2020-03-28 11:46:47 +01:00
f.service
g.service
grandchild.service
h.service
hello-after-sleep.target
hello.service
i.service
loopy.service
loopy2.service
loopy3.service
loopy4.service
nomem.slice
nomemleaf.service
parent-deep.slice
parent.slice
sched_idle_bad.service
sched_idle_ok.service
sched_rr_bad.service
sched_rr_change.service
sched_rr_ok.service
shutdown.target
sleep.service
sockets.target
son.service
sysinit.target
test-honor-first-shutdown.service test: use KILL instead of SIGKILL in TEST-52-HONORFIRSTSHUTDOWN 2020-07-05 11:00:57 +01:00
test-honor-first-shutdown.sh feature to honor first shutdown request to completion 2020-06-24 09:42:01 +02:00
testsuite-01.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-02.service test: make TEST-02-CRYPTSETUP a bit more robust 2020-06-10 17:42:25 +02:00
testsuite-03.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-03.sh test: move TEST-03-JOBS setup to static files 2020-03-28 11:46:47 +01:00
testsuite-04.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-04.sh test: Stricter test case for #15654 (Add more checks) 2020-05-13 21:32:45 +02:00
testsuite-05.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-05.sh test: use show -P in places 2020-04-03 18:24:21 +02:00
testsuite-06.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-06.sh test/TEST-06: skip test if no selinux 2020-03-28 11:46:47 +01:00
testsuite-07.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-07.sh test: move TEST-07-ISSUE-1981 setup to static files 2020-03-28 11:46:47 +01:00
testsuite-08.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-09.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-10.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-11.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-11.sh test: move TEST-11-ISSUE-3166 setup to static files 2020-03-28 11:46:47 +01:00
testsuite-12.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-12.sh test: move TEST-12-ISSUE-3171 setup to static files 2020-03-28 11:46:47 +01:00
testsuite-13.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-13.sh nspawn: implement container host os-release interface 2020-06-23 12:58:21 +01:00
testsuite-14.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-14.sh test: move most of TEST-14-MACHINE-ID setup to static files 2020-03-28 11:46:47 +01:00
testsuite-15.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-15.sh test/TEST-15: call daemon-reload in two more places 2020-03-28 11:46:47 +01:00
testsuite-16.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-16.sh test: move TEST-16-EXTEND-TIMEOUT setup to static files 2020-03-28 11:46:47 +01:00
testsuite-17.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-17.sh test: move TEST-17-WANTS setup to static files 2020-03-28 11:46:47 +01:00
testsuite-18.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-18.sh test: move TEST-18-FAILUREACTION setup to static files 2020-03-28 11:46:47 +01:00
testsuite-19.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-19.sh test: move TEST-19-DELEGATE setup to static files 2020-03-28 11:46:47 +01:00
testsuite-20.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-20.sh test: use show -P in places 2020-04-03 18:24:21 +02:00
testsuite-22.01.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.02.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.03.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.04.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.05.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.06.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.07.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.08.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.09.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-22.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-22.sh test: move TEST-22-TMPFILES setup to static files 2020-03-28 11:46:47 +01:00
testsuite-23.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-23.sh test: move TEST-23-TYPE-EXEC setup to static files 2020-03-28 11:46:47 +01:00
testsuite-24.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-24.sh test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-25.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-25.sh tree-wide: fix spelling errors 2020-04-21 23:21:08 +02:00
testsuite-26.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-26.sh test: move TEST-26-SETENV setup to static files 2020-03-28 11:46:47 +01:00
testsuite-27.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-27.sh test: move TEST-27-STDOUTFILE setup to static files 2020-03-28 11:46:47 +01:00
testsuite-28.service test/TEST-28: avoid race in handling of /testok 2020-03-28 11:51:29 +01:00
testsuite-29.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-29.sh test: move TEST-29-UDEV-ID_RENAMING setup to static files 2020-03-28 11:46:47 +01:00
testsuite-30.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-30.sh test: move TEST-30-ONCLOCKCHANGE setup to static files 2020-03-28 11:46:47 +01:00
testsuite-31.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-31.sh test: move TEST-31-DEVICE-ENUMERATION setup to static files 2020-03-28 11:46:47 +01:00
testsuite-32.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-32.sh test: use show -P in places 2020-04-03 18:24:21 +02:00
testsuite-33.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-33.sh test: move TEST-33-CLEAN-UNIT setup to static files 2020-03-28 11:46:47 +01:00
testsuite-34.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-34.sh test: move TEST-34-DYNAMICUSERMIGRATE setup to static files 2020-03-28 11:46:47 +01:00
testsuite-36.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-36.sh Add quotes for -n 2020-06-26 15:12:29 +02:00
testsuite-37.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-37.sh test: move TEST-37-RUNTIMEDIRECTORYPRESERVE setup to static files 2020-03-28 11:46:48 +01:00
testsuite-38-sleep.service test: add test for cgroup v2 freezer support 2020-04-30 19:02:55 +02:00
testsuite-38.service test: add test for cgroup v2 freezer support 2020-04-30 19:02:55 +02:00
testsuite-38.sh tests: sleep a bit and give kernel time to perform the action after manual freeze/thaw 2020-06-05 16:10:28 +02:00
testsuite-39.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-39.sh test: move TEST-39-EXECRELOAD setup to static files 2020-03-28 11:46:48 +01:00
testsuite-40.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-40.sh test: move TEST-40-EXEC-COMMAND-EX setup to static files 2020-03-28 11:46:48 +01:00
testsuite-41.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-41.sh test: use show -P in places 2020-04-03 18:24:21 +02:00
testsuite-42.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-42.sh test: move TEST-42-EXECSTOPPOST setup to static files 2020-03-28 11:46:48 +01:00
testsuite-43.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-43.sh test: make the systemd-run calls synchronous 2020-05-27 08:36:57 +02:00
testsuite-44.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-44.sh test: move TEST-44-* to static files 2020-03-28 11:46:48 +01:00
testsuite-46.service units: make systemd-homed.service installable 2020-03-31 14:55:14 +02:00
testsuite-46.sh test: drop Disk (Size|Free|Floor|Ceiling) fields prior comparing 2020-04-21 22:09:35 +02:00
testsuite-47-repro.service test: move TEST-47-* to static files 2020-03-28 11:50:53 +01:00
testsuite-47-repro.sh test: move TEST-47-* to static files 2020-03-28 11:50:53 +01:00
testsuite-47.service test: make sure to reset state before starting integration tests 2020-03-28 11:51:27 +01:00
testsuite-47.sh test: bump the TEST-47 sleeps once again 2020-07-08 22:09:55 +02:00
testsuite-48.service core: reload cache if it's dirty when starting a UNIT_NOT_FOUND unit 2020-05-30 16:50:05 +02:00
testsuite-48.sh core: refresh unit cache when building a transaction if UNIT_NOT_FOUND 2020-07-07 10:09:24 +02:00
testsuite-49.service test: add integration test for udev event timeout 2020-06-05 11:09:21 +02:00
testsuite-49.sh test: add integration test for udev event timeout 2020-06-05 11:09:21 +02:00
testsuite-50.service dissect: support single-filesystem verity images with external verity hash 2020-06-09 12:19:21 +01:00
testsuite-50.sh dissect: support single-filesystem verity images with external verity hash 2020-06-09 12:19:21 +01:00
testsuite-51-repro-1.service core: don't consider SERVICE_SKIP_CONDITION for abnormal or failure restarts 2020-06-10 17:12:55 +02:00
testsuite-51-repro-2.service core: don't consider SERVICE_SKIP_CONDITION for abnormal or failure restarts 2020-06-10 17:12:55 +02:00
testsuite-51.service core: don't consider SERVICE_SKIP_CONDITION for abnormal or failure restarts 2020-06-10 17:12:55 +02:00
testsuite-51.sh core: don't consider SERVICE_SKIP_CONDITION for abnormal or failure restarts 2020-06-10 17:12:55 +02:00
testsuite-53.service timer: Adjust calendar timers based on monotonic timer instead of realtime 2020-07-15 09:23:09 +02:00
testsuite-53.sh timer: Adjust calendar timers based on monotonic timer instead of realtime 2020-07-15 09:23:09 +02:00
testsuite.target
timers.target
unit-with-multiple-dashes.service
unstoppable.service