]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-watch-pid.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
7 #include "test-helper.h"
10 int main(int argc
, char *argv
[]) {
11 _cleanup_(rm_rf_physical_and_freep
) char *runtime_dir
= NULL
;
12 _cleanup_(manager_freep
) Manager
*m
= NULL
;
16 log_set_max_level(LOG_DEBUG
);
17 log_parse_environment();
21 log_notice("Not running as root, skipping kernel related tests.");
22 return EXIT_TEST_SKIP
;
25 r
= enter_cgroup_subroot();
26 if (r
== -ENOMEDIUM
) {
27 log_notice("cgroupfs not available, skipping tests");
28 return EXIT_TEST_SKIP
;
31 assert_se(set_unit_path(get_testdata_dir("")) >= 0);
32 assert_se(runtime_dir
= setup_fake_runtime_dir());
34 assert_se(manager_new(UNIT_FILE_USER
, true, &m
) >= 0);
35 assert_se(manager_startup(m
, NULL
, NULL
) >= 0);
37 assert_se(a
= unit_new(m
, sizeof(Service
)));
38 assert_se(unit_add_name(a
, "a.service") >= 0);
39 assert_se(set_isempty(a
->pids
));
41 assert_se(b
= unit_new(m
, sizeof(Service
)));
42 assert_se(unit_add_name(b
, "b.service") >= 0);
43 assert_se(set_isempty(b
->pids
));
45 assert_se(c
= unit_new(m
, sizeof(Service
)));
46 assert_se(unit_add_name(c
, "c.service") >= 0);
47 assert_se(set_isempty(c
->pids
));
49 assert_se(hashmap_isempty(m
->watch_pids
));
50 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
52 assert_se(unit_watch_pid(a
, 4711) >= 0);
53 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
55 assert_se(unit_watch_pid(a
, 4711) >= 0);
56 assert_se(manager_get_unit_by_pid(m
, 4711) == a
);
58 assert_se(unit_watch_pid(b
, 4711) >= 0);
59 u
= manager_get_unit_by_pid(m
, 4711);
60 assert_se(u
== a
|| u
== b
);
62 assert_se(unit_watch_pid(b
, 4711) >= 0);
63 u
= manager_get_unit_by_pid(m
, 4711);
64 assert_se(u
== a
|| u
== b
);
66 assert_se(unit_watch_pid(c
, 4711) >= 0);
67 u
= manager_get_unit_by_pid(m
, 4711);
68 assert_se(u
== a
|| u
== b
|| u
== c
);
70 assert_se(unit_watch_pid(c
, 4711) >= 0);
71 u
= manager_get_unit_by_pid(m
, 4711);
72 assert_se(u
== a
|| u
== b
|| u
== c
);
74 unit_unwatch_pid(b
, 4711);
75 u
= manager_get_unit_by_pid(m
, 4711);
76 assert_se(u
== a
|| u
== c
);
78 unit_unwatch_pid(b
, 4711);
79 u
= manager_get_unit_by_pid(m
, 4711);
80 assert_se(u
== a
|| u
== c
);
82 unit_unwatch_pid(a
, 4711);
83 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
85 unit_unwatch_pid(a
, 4711);
86 assert_se(manager_get_unit_by_pid(m
, 4711) == c
);
88 unit_unwatch_pid(c
, 4711);
89 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);
91 unit_unwatch_pid(c
, 4711);
92 assert_se(manager_get_unit_by_pid(m
, 4711) == NULL
);