]>
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 "tests.h" |
8 | ||
9 | int main(int argc, char *argv[]) { | |
10 | _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; | |
c70cac54 | 11 | _cleanup_(manager_freep) Manager *m = NULL; |
62a76913 | 12 | Unit *a, *b, *c, *u; |
62a76913 LP |
13 | int r; |
14 | ||
6d7c4033 | 15 | test_setup_logging(LOG_DEBUG); |
62a76913 | 16 | |
317bb217 ZJS |
17 | if (getuid() != 0) |
18 | return log_tests_skipped("not root"); | |
64ad9e08 | 19 | r = enter_cgroup_subroot(NULL); |
317bb217 ZJS |
20 | if (r == -ENOMEDIUM) |
21 | return log_tests_skipped("cgroupfs not available"); | |
62a76913 | 22 | |
55890a40 | 23 | assert_se(set_unit_path(get_testdata_dir()) >= 0); |
62a76913 LP |
24 | assert_se(runtime_dir = setup_fake_runtime_dir()); |
25 | ||
ed4ac965 | 26 | assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); |
62a76913 LP |
27 | assert_se(manager_startup(m, NULL, NULL) >= 0); |
28 | ||
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)); | |
32 | ||
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)); | |
36 | ||
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)); | |
40 | ||
41 | assert_se(hashmap_isempty(m->watch_pids)); | |
42 | assert_se(manager_get_unit_by_pid(m, 4711) == NULL); | |
43 | ||
f75f613d | 44 | assert_se(unit_watch_pid(a, 4711, false) >= 0); |
62a76913 LP |
45 | assert_se(manager_get_unit_by_pid(m, 4711) == a); |
46 | ||
f75f613d | 47 | assert_se(unit_watch_pid(a, 4711, false) >= 0); |
62a76913 LP |
48 | assert_se(manager_get_unit_by_pid(m, 4711) == a); |
49 | ||
f75f613d | 50 | assert_se(unit_watch_pid(b, 4711, false) >= 0); |
62a76913 LP |
51 | u = manager_get_unit_by_pid(m, 4711); |
52 | assert_se(u == a || u == b); | |
53 | ||
f75f613d | 54 | assert_se(unit_watch_pid(b, 4711, false) >= 0); |
62a76913 LP |
55 | u = manager_get_unit_by_pid(m, 4711); |
56 | assert_se(u == a || u == b); | |
57 | ||
f75f613d | 58 | assert_se(unit_watch_pid(c, 4711, false) >= 0); |
62a76913 LP |
59 | u = manager_get_unit_by_pid(m, 4711); |
60 | assert_se(u == a || u == b || u == c); | |
61 | ||
f75f613d | 62 | assert_se(unit_watch_pid(c, 4711, false) >= 0); |
62a76913 LP |
63 | u = manager_get_unit_by_pid(m, 4711); |
64 | assert_se(u == a || u == b || u == c); | |
65 | ||
66 | unit_unwatch_pid(b, 4711); | |
67 | u = manager_get_unit_by_pid(m, 4711); | |
68 | assert_se(u == a || u == c); | |
69 | ||
70 | unit_unwatch_pid(b, 4711); | |
71 | u = manager_get_unit_by_pid(m, 4711); | |
72 | assert_se(u == a || u == c); | |
73 | ||
74 | unit_unwatch_pid(a, 4711); | |
75 | assert_se(manager_get_unit_by_pid(m, 4711) == c); | |
76 | ||
77 | unit_unwatch_pid(a, 4711); | |
78 | assert_se(manager_get_unit_by_pid(m, 4711) == c); | |
79 | ||
80 | unit_unwatch_pid(c, 4711); | |
81 | assert_se(manager_get_unit_by_pid(m, 4711) == NULL); | |
82 | ||
83 | unit_unwatch_pid(c, 4711); | |
84 | assert_se(manager_get_unit_by_pid(m, 4711) == NULL); | |
85 | ||
62a76913 LP |
86 | return 0; |
87 | } |