]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-watch-pid: use a real PID, not a made up one
authorLennart Poettering <lennart@poettering.net>
Wed, 20 Sep 2023 09:34:57 +0000 (11:34 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 28 Sep 2023 21:22:58 +0000 (23:22 +0200)
This matters once we track processes with pidfds rather than just pid_t,
because made up PIDs likely won't exist.

The essence of the test remains unmodified, we just use a real, existing
PID instead of 4711.

src/test/test-watch-pid.c

index 01bf4c1cbe3919b94c5f4c91c4dc48ce7544e459..87e2867f79e606e5107758eab46b75c3ba4c3d62 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "log.h"
 #include "manager.h"
 
 #include "log.h"
 #include "manager.h"
+#include "process-util.h"
 #include "rm-rf.h"
 #include "service.h"
 #include "tests.h"
 #include "rm-rf.h"
 #include "service.h"
 #include "tests.h"
@@ -41,50 +42,61 @@ int main(int argc, char *argv[]) {
         assert_se(unit_add_name(c, "c.service") >= 0);
         assert_se(set_isempty(c->pids));
 
         assert_se(unit_add_name(c, "c.service") >= 0);
         assert_se(set_isempty(c->pids));
 
+        /* Fork off a child so thta we have a PID to watch */
+        _cleanup_(sigkill_waitp) pid_t pid = 0;
+        pid = fork();
+        if (pid == 0) {
+                /* Child */
+                pause();
+                _exit(EXIT_SUCCESS);
+        }
+
+        assert_se(pid >= 0);
+
         assert_se(hashmap_isempty(m->watch_pids));
         assert_se(hashmap_isempty(m->watch_pids));
-        assert_se(manager_get_unit_by_pid(m, 4711) == NULL);
+        assert_se(manager_get_unit_by_pid(m, pid) == NULL);
 
 
-        assert_se(unit_watch_pid(a, 4711, false) >= 0);
-        assert_se(manager_get_unit_by_pid(m, 4711) == a);
+        assert_se(unit_watch_pid(a, pid, false) >= 0);
+        assert_se(manager_get_unit_by_pid(m, pid) == a);
 
 
-        assert_se(unit_watch_pid(a, 4711, false) >= 0);
-        assert_se(manager_get_unit_by_pid(m, 4711) == a);
+        assert_se(unit_watch_pid(a, pid, false) >= 0);
+        assert_se(manager_get_unit_by_pid(m, pid) == a);
 
 
-        assert_se(unit_watch_pid(b, 4711, false) >= 0);
-        u = manager_get_unit_by_pid(m, 4711);
+        assert_se(unit_watch_pid(b, pid, false) >= 0);
+        u = manager_get_unit_by_pid(m, pid);
         assert_se(u == a || u == b);
 
         assert_se(u == a || u == b);
 
-        assert_se(unit_watch_pid(b, 4711, false) >= 0);
-        u = manager_get_unit_by_pid(m, 4711);
+        assert_se(unit_watch_pid(b, pid, false) >= 0);
+        u = manager_get_unit_by_pid(m, pid);
         assert_se(u == a || u == b);
 
         assert_se(u == a || u == b);
 
-        assert_se(unit_watch_pid(c, 4711, false) >= 0);
-        u = manager_get_unit_by_pid(m, 4711);
+        assert_se(unit_watch_pid(c, pid, false) >= 0);
+        u = manager_get_unit_by_pid(m, pid);
         assert_se(u == a || u == b || u == c);
 
         assert_se(u == a || u == b || u == c);
 
-        assert_se(unit_watch_pid(c, 4711, false) >= 0);
-        u = manager_get_unit_by_pid(m, 4711);
+        assert_se(unit_watch_pid(c, pid, false) >= 0);
+        u = manager_get_unit_by_pid(m, pid);
         assert_se(u == a || u == b || u == c);
 
         assert_se(u == a || u == b || u == c);
 
-        unit_unwatch_pid(b, 4711);
-        u = manager_get_unit_by_pid(m, 4711);
+        unit_unwatch_pid(b, pid);
+        u = manager_get_unit_by_pid(m, pid);
         assert_se(u == a || u == c);
 
         assert_se(u == a || u == c);
 
-        unit_unwatch_pid(b, 4711);
-        u = manager_get_unit_by_pid(m, 4711);
+        unit_unwatch_pid(b, pid);
+        u = manager_get_unit_by_pid(m, pid);
         assert_se(u == a || u == c);
 
         assert_se(u == a || u == c);
 
-        unit_unwatch_pid(a, 4711);
-        assert_se(manager_get_unit_by_pid(m, 4711) == c);
+        unit_unwatch_pid(a, pid);
+        assert_se(manager_get_unit_by_pid(m, pid) == c);
 
 
-        unit_unwatch_pid(a, 4711);
-        assert_se(manager_get_unit_by_pid(m, 4711) == c);
+        unit_unwatch_pid(a, pid);
+        assert_se(manager_get_unit_by_pid(m, pid) == c);
 
 
-        unit_unwatch_pid(c, 4711);
-        assert_se(manager_get_unit_by_pid(m, 4711) == NULL);
+        unit_unwatch_pid(c, pid);
+        assert_se(manager_get_unit_by_pid(m, pid) == NULL);
 
 
-        unit_unwatch_pid(c, 4711);
-        assert_se(manager_get_unit_by_pid(m, 4711) == NULL);
+        unit_unwatch_pid(c, pid);
+        assert_se(manager_get_unit_by_pid(m, pid) == NULL);
 
         return 0;
 }
 
         return 0;
 }