diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c index 01bf4c1cbe..87e2867f79 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; }