]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-watch-pid.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
9 int main(int argc
, char *argv
[]) {
10 _cleanup_(rm_rf_physical_and_freep
) char *runtime_dir
= NULL
;
11 _cleanup_(manager_freep
) Manager
*m
= NULL
;
15 test_setup_logging(LOG_DEBUG
);
18 return log_tests_skipped("not root");
19 r
= enter_cgroup_subroot(NULL
);
21 return log_tests_skipped("cgroupfs not available");
23 assert_se(set_unit_path(get_testdata_dir()) >= 0);
24 assert_se(runtime_dir
= setup_fake_runtime_dir());
26 assert_se(manager_new(UNIT_FILE_USER
, MANAGER_TEST_RUN_BASIC
, &m
) >= 0);
27 assert_se(manager_startup(m
, NULL
, NULL
) >= 0);
29 assert_se(a
= unit_new(m
, sizeof(Service
)));
30 assert_se(unit_add_name(a
, "a.service") >= 0);
31 assert_se(set_isempty(a
->pids
));
33 assert_se(b
= unit_new(m
, sizeof(Service
)));
34 assert_se(unit_add_name(b
, "b.service") >= 0);
35 assert_se(set_isempty(b
->pids
));
37 assert_se(c
= unit_new(m
, sizeof(Service
)));
38 assert_se(unit_add_name(c
, "c.service") >= 0);
39 assert_se(set_isempty(c
->pids
));
41 assert_se(hashmap_isempty(m
->watch_pids
));
42 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
44 assert_se(unit_watch_pid(a
, 4711, false) >= 0);
45 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
47 assert_se(unit_watch_pid(a
, 4711, false) >= 0);
48 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
50 assert_se(unit_watch_pid(b
, 4711, false) >= 0);
51 u
= manager_get_unit_by_pid(m
, 4711);
52 assert_se(u
== a
|| u
== b
);
54 assert_se(unit_watch_pid(b
, 4711, false) >= 0);
55 u
= manager_get_unit_by_pid(m
, 4711);
56 assert_se(u
== a
|| u
== b
);
58 assert_se(unit_watch_pid(c
, 4711, false) >= 0);
59 u
= manager_get_unit_by_pid(m
, 4711);
60 assert_se(u
== a
|| u
== b
|| u
== c
);
62 assert_se(unit_watch_pid(c
, 4711, false) >= 0);
63 u
= manager_get_unit_by_pid(m
, 4711);
64 assert_se(u
== a
|| u
== b
|| u
== c
);
66 unit_unwatch_pid(b
, 4711);
67 u
= manager_get_unit_by_pid(m
, 4711);
68 assert_se(u
== a
|| u
== c
);
70 unit_unwatch_pid(b
, 4711);
71 u
= manager_get_unit_by_pid(m
, 4711);
72 assert_se(u
== a
|| u
== c
);
74 unit_unwatch_pid(a
, 4711);
75 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
77 unit_unwatch_pid(a
, 4711);
78 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
80 unit_unwatch_pid(c
, 4711);
81 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
83 unit_unwatch_pid(c
, 4711);
84 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);