]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-watch-pid.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
6 #include "test-helper.h"
9 int main(int argc
, char *argv
[]) {
10 _cleanup_(rm_rf_physical_and_freep
) char *runtime_dir
= NULL
;
15 log_set_max_level(LOG_DEBUG
);
16 log_parse_environment();
20 log_notice("Not running as root, skipping kernel related tests.");
21 return EXIT_TEST_SKIP
;
24 r
= enter_cgroup_subroot();
25 if (r
== -ENOMEDIUM
) {
26 log_notice("cgroupfs not available, skipping tests");
27 return EXIT_TEST_SKIP
;
30 assert_se(set_unit_path(get_testdata_dir("")) >= 0);
31 assert_se(runtime_dir
= setup_fake_runtime_dir());
33 assert_se(manager_new(UNIT_FILE_USER
, true, &m
) >= 0);
34 assert_se(manager_startup(m
, NULL
, NULL
) >= 0);
36 assert_se(a
= unit_new(m
, sizeof(Service
)));
37 assert_se(unit_add_name(a
, "a.service") >= 0);
38 assert_se(set_isempty(a
->pids
));
40 assert_se(b
= unit_new(m
, sizeof(Service
)));
41 assert_se(unit_add_name(b
, "b.service") >= 0);
42 assert_se(set_isempty(b
->pids
));
44 assert_se(c
= unit_new(m
, sizeof(Service
)));
45 assert_se(unit_add_name(c
, "c.service") >= 0);
46 assert_se(set_isempty(c
->pids
));
48 assert_se(hashmap_isempty(m
->watch_pids
));
49 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
51 assert_se(unit_watch_pid(a
, 4711) >= 0);
52 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
54 assert_se(unit_watch_pid(a
, 4711) >= 0);
55 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
57 assert_se(unit_watch_pid(b
, 4711) >= 0);
58 u
= manager_get_unit_by_pid(m
, 4711);
59 assert_se(u
== a
|| u
== b
);
61 assert_se(unit_watch_pid(b
, 4711) >= 0);
62 u
= manager_get_unit_by_pid(m
, 4711);
63 assert_se(u
== a
|| u
== b
);
65 assert_se(unit_watch_pid(c
, 4711) >= 0);
66 u
= manager_get_unit_by_pid(m
, 4711);
67 assert_se(u
== a
|| u
== b
|| u
== c
);
69 assert_se(unit_watch_pid(c
, 4711) >= 0);
70 u
= manager_get_unit_by_pid(m
, 4711);
71 assert_se(u
== a
|| u
== b
|| 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(b
, 4711);
78 u
= manager_get_unit_by_pid(m
, 4711);
79 assert_se(u
== a
|| u
== c
);
81 unit_unwatch_pid(a
, 4711);
82 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
84 unit_unwatch_pid(a
, 4711);
85 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
87 unit_unwatch_pid(c
, 4711);
88 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
90 unit_unwatch_pid(c
, 4711);
91 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);