]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-event: add a simple test for checking the timeout parameter of sd_event_wait()
authorLennart Poettering <lennart@poettering.net>
Fri, 12 Mar 2021 16:54:12 +0000 (17:54 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 12 Mar 2021 16:56:33 +0000 (17:56 +0100)
Related to: #18973

src/libsystemd/sd-event/test-event.c

index 737595bc33ea40c4ce89e4d07adac4bc93d03bca..0bc2f507aa78850b868291285753134f6544c388 100644 (file)
@@ -13,6 +13,7 @@
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "random-util.h"
 #include "rm-rf.h"
 #include "signal-util.h"
 #include "stdio-util.h"
@@ -693,9 +694,30 @@ static void test_ratelimit(void) {
         assert_se(count == 20);
 }
 
+static void test_simple_timeout(void) {
+        _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+        usec_t f, t, some_time;
+
+        some_time = random_u64_range(2 * USEC_PER_SEC);
+
+        assert_se(sd_event_default(&e) >= 0);
+
+        assert_se(sd_event_prepare(e) == 0);
+
+        f = now(CLOCK_MONOTONIC);
+        assert_se(sd_event_wait(e, some_time) >= 0);
+        t = now(CLOCK_MONOTONIC);
+
+        /* The event loop may sleep longer than the specified time (timer accuracy, scheduling latencies, …),
+         * but never shorter. Let's check that. */
+        assert_se(t >= usec_add(f, some_time));
+}
+
 int main(int argc, char *argv[]) {
         test_setup_logging(LOG_DEBUG);
 
+        test_simple_timeout();
+
         test_basic(true);   /* test with pidfd */
         test_basic(false);  /* test without pidfd */