From: Lennart Poettering Date: Wed, 20 Sep 2023 09:34:57 +0000 (+0200) Subject: test-watch-pid: use a real PID, not a made up one X-Git-Tag: v255-rc1~387^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;ds=sidebyside;h=c407bfa68ff303eee230939461acf3fa8870b8f9;p=thirdparty%2Fsystemd.git test-watch-pid: use a real PID, not a made up one 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. --- diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c index 01bf4c1cbe3..87e2867f79e 100644 --- a/src/test/test-watch-pid.c +++ b/src/test/test-watch-pid.c @@ -2,6 +2,7 @@ #include "log.h" #include "manager.h" +#include "process-util.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)); + /* 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(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(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(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(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); - 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); - 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); - 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; }