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.
#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"
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);