]>
Commit | Line | Data |
---|---|---|
62a76913 LP |
1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
2 | ||
3 | #include "log.h" | |
4 | #include "manager.h" | |
5 | #include "rm-rf.h" | |
57b7a260 | 6 | #include "service.h" |
62a76913 LP |
7 | #include "test-helper.h" |
8 | #include "tests.h" | |
9 | ||
10 | int main(int argc, char *argv[]) { | |
11 | _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; | |
c70cac54 | 12 | _cleanup_(manager_freep) Manager *m = NULL; |
62a76913 | 13 | Unit *a, *b, *c, *u; |
62a76913 LP |
14 | int r; |
15 | ||
6d7c4033 | 16 | test_setup_logging(LOG_DEBUG); |
62a76913 | 17 | |
317bb217 ZJS |
18 | if (getuid() != 0) |
19 | return log_tests_skipped("not root"); | |
62a76913 | 20 | r = enter_cgroup_subroot(); |
317bb217 ZJS |
21 | if (r == -ENOMEDIUM) |
22 | return log_tests_skipped("cgroupfs not available"); | |
62a76913 | 23 | |
55890a40 | 24 | assert_se(set_unit_path(get_testdata_dir()) >= 0); |
62a76913 LP |
25 | assert_se(runtime_dir = setup_fake_runtime_dir()); |
26 | ||
ed4ac965 | 27 | assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); |
62a76913 LP |
28 | assert_se(manager_startup(m, NULL, NULL) >= 0); |
29 | ||
30 | assert_se(a = unit_new(m, sizeof(Service))); | |
31 | assert_se(unit_add_name(a, "a.service") >= 0); | |
32 | assert_se(set_isempty(a->pids)); | |
33 | ||
34 | assert_se(b = unit_new(m, sizeof(Service))); | |
35 | assert_se(unit_add_name(b, "b.service") >= 0); | |
36 | assert_se(set_isempty(b->pids)); | |
37 | ||
38 | assert_se(c = unit_new(m, sizeof(Service))); | |
39 | assert_se(unit_add_name(c, "c.service") >= 0); | |
40 | assert_se(set_isempty(c->pids)); | |
41 | ||
42 | assert_se(hashmap_isempty(m->watch_pids)); | |
43 | assert_se(manager_get_unit_by_pid(m, 4711) == NULL); | |
44 | ||
f75f613d | 45 | assert_se(unit_watch_pid(a, 4711, false) >= 0); |
62a76913 LP |
46 | assert_se(manager_get_unit_by_pid(m, 4711) == a); |
47 | ||
f75f613d | 48 | assert_se(unit_watch_pid(a, 4711, false) >= 0); |
62a76913 LP |
49 | assert_se(manager_get_unit_by_pid(m, 4711) == a); |
50 | ||
f75f613d | 51 | assert_se(unit_watch_pid(b, 4711, false) >= 0); |
62a76913 LP |
52 | u = manager_get_unit_by_pid(m, 4711); |
53 | assert_se(u == a || u == b); | |
54 | ||
f75f613d | 55 | assert_se(unit_watch_pid(b, 4711, false) >= 0); |
62a76913 LP |
56 | u = manager_get_unit_by_pid(m, 4711); |
57 | assert_se(u == a || u == b); | |
58 | ||
f75f613d | 59 | assert_se(unit_watch_pid(c, 4711, false) >= 0); |
62a76913 LP |
60 | u = manager_get_unit_by_pid(m, 4711); |
61 | assert_se(u == a || u == b || u == c); | |
62 | ||
f75f613d | 63 | assert_se(unit_watch_pid(c, 4711, false) >= 0); |
62a76913 LP |
64 | u = manager_get_unit_by_pid(m, 4711); |
65 | assert_se(u == a || u == b || u == c); | |
66 | ||
67 | unit_unwatch_pid(b, 4711); | |
68 | u = manager_get_unit_by_pid(m, 4711); | |
69 | assert_se(u == a || u == c); | |
70 | ||
71 | unit_unwatch_pid(b, 4711); | |
72 | u = manager_get_unit_by_pid(m, 4711); | |
73 | assert_se(u == a || u == c); | |
74 | ||
75 | unit_unwatch_pid(a, 4711); | |
76 | assert_se(manager_get_unit_by_pid(m, 4711) == c); | |
77 | ||
78 | unit_unwatch_pid(a, 4711); | |
79 | assert_se(manager_get_unit_by_pid(m, 4711) == c); | |
80 | ||
81 | unit_unwatch_pid(c, 4711); | |
82 | assert_se(manager_get_unit_by_pid(m, 4711) == NULL); | |
83 | ||
84 | unit_unwatch_pid(c, 4711); | |
85 | assert_se(manager_get_unit_by_pid(m, 4711) == NULL); | |
86 | ||
62a76913 LP |
87 | return 0; |
88 | } |