]>
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 _cleanup_free_
char *unit_dir
= NULL
;
24 assert_se(get_testdata_dir("units/", &unit_dir
) >= 0);
25 assert_se(set_unit_path(unit_dir
) >= 0);
27 assert_se(runtime_dir
= setup_fake_runtime_dir());
29 assert_se(manager_new(UNIT_FILE_USER
, MANAGER_TEST_RUN_BASIC
, &m
) >= 0);
30 assert_se(manager_startup(m
, NULL
, NULL
) >= 0);
32 assert_se(a
= unit_new(m
, sizeof(Service
)));
33 assert_se(unit_add_name(a
, "a.service") >= 0);
34 assert_se(set_isempty(a
->pids
));
36 assert_se(b
= unit_new(m
, sizeof(Service
)));
37 assert_se(unit_add_name(b
, "b.service") >= 0);
38 assert_se(set_isempty(b
->pids
));
40 assert_se(c
= unit_new(m
, sizeof(Service
)));
41 assert_se(unit_add_name(c
, "c.service") >= 0);
42 assert_se(set_isempty(c
->pids
));
44 assert_se(hashmap_isempty(m
->watch_pids
));
45 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
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(a
, 4711, false) >= 0);
51 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
53 assert_se(unit_watch_pid(b
, 4711, false) >= 0);
54 u
= manager_get_unit_by_pid(m
, 4711);
55 assert_se(u
== a
|| u
== b
);
57 assert_se(unit_watch_pid(b
, 4711, false) >= 0);
58 u
= manager_get_unit_by_pid(m
, 4711);
59 assert_se(u
== a
|| u
== b
);
61 assert_se(unit_watch_pid(c
, 4711, false) >= 0);
62 u
= manager_get_unit_by_pid(m
, 4711);
63 assert_se(u
== a
|| u
== b
|| u
== c
);
65 assert_se(unit_watch_pid(c
, 4711, false) >= 0);
66 u
= manager_get_unit_by_pid(m
, 4711);
67 assert_se(u
== a
|| u
== b
|| u
== c
);
69 unit_unwatch_pid(b
, 4711);
70 u
= manager_get_unit_by_pid(m
, 4711);
71 assert_se(u
== a
|| u
== c
);
73 unit_unwatch_pid(b
, 4711);
74 u
= manager_get_unit_by_pid(m
, 4711);
75 assert_se(u
== a
|| u
== c
);
77 unit_unwatch_pid(a
, 4711);
78 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
80 unit_unwatch_pid(a
, 4711);
81 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
83 unit_unwatch_pid(c
, 4711);
84 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
86 unit_unwatch_pid(c
, 4711);
87 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);