]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-udev: add an optional timeout argument
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 4 May 2023 20:43:54 +0000 (22:43 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 9 May 2023 06:10:20 +0000 (08:10 +0200)
The tests wants to call some workers with a delay. This implements the delay
directly in test-udev so that the caller can be simplified.

Note that the argument is to be used by the other test file, so this is
purposefully implemented in a simple way.

src/test/test-udev.c

index 3ca132db3bce451e5245d279ec9b733e0090f7c5..00ca79d0eba7bb96ac7f72732f4db542be15e5ab 100644 (file)
@@ -18,6 +18,7 @@
 #include "mkdir-label.h"
 #include "mount-util.h"
 #include "namespace-util.h"
+#include "parse-util.h"
 #include "selinux-util.h"
 #include "signal-util.h"
 #include "string-util.h"
@@ -92,9 +93,9 @@ static int run(int argc, char *argv[]) {
 
         test_setup_logging(LOG_INFO);
 
-        if (!IN_SET(argc, 2, 3))
+        if (!IN_SET(argc, 2, 3, 4))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "This program needs one or two arguments, %d given", argc - 1);
+                                       "This program needs between one and three arguments, %d given", argc - 1);
 
         r = fake_filesystems();
         if (r < 0)
@@ -123,10 +124,18 @@ static int run(int argc, char *argv[]) {
         action = argv[1];
         devpath = argv[2];
 
+        if (argv[3]) {
+                unsigned us;
+
+                r = safe_atou(argv[3], &us);
+                if (r < 0)
+                        return log_error_errno(r, "Invalid delay '%s': %m", argv[3]);
+                usleep(us);
+        }
+
         assert_se(udev_rules_load(&rules, RESOLVE_NAME_EARLY) == 0);
 
-        const char *syspath;
-        syspath = strjoina("/sys", devpath);
+        const char *syspath = strjoina("/sys", devpath);
         r = device_new_from_synthetic_event(&dev, syspath, action);
         if (r < 0)
                 return log_debug_errno(r, "Failed to open device '%s'", devpath);