]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-cgroup-util.c
core: there's no point to complain so loudly about non-isolatable boot targets
[thirdparty/systemd.git] / src / test / test-cgroup-util.c
CommitLineData
6c03089c
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3/***
4 This file is part of systemd.
5
6 Copyright 2013 Zbigniew Jędrzejewski-Szmek
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
96cde13a
ZJS
22#include <assert.h>
23
24#include "util.h"
25#include "cgroup-util.h"
26
7027ff61 27static void check_p_d_u(const char *path, int code, const char *result) {
6c03089c 28 _cleanup_free_ char *unit = NULL;
96cde13a 29
7027ff61 30 assert_se(cg_path_decode_unit(path, &unit) == code);
6c03089c
LP
31 assert_se(streq_ptr(unit, result));
32}
96cde13a 33
7027ff61
LP
34static void test_path_decode_unit(void) {
35 check_p_d_u("getty@.service/tty2", 0, "getty@tty2.service");
36 check_p_d_u("getty@.service/tty2/xxx", 0, "getty@tty2.service");
37 check_p_d_u("getty@.service/", -EINVAL, NULL);
38 check_p_d_u("getty@.service", -EINVAL, NULL);
39 check_p_d_u("getty.service", 0, "getty.service");
40 check_p_d_u("getty", -EINVAL, NULL);
6c03089c
LP
41}
42
43static void check_p_g_u(const char *path, int code, const char *result) {
44 _cleanup_free_ char *unit = NULL;
45
46 assert_se(cg_path_get_unit(path, &unit) == code);
47 assert_se(streq_ptr(unit, result));
48}
49
50static void check_p_g_u_u(const char *path, int code, const char *result) {
51 _cleanup_free_ char *unit = NULL;
52
53 assert_se(cg_path_get_user_unit(path, &unit) == code);
54 assert_se(streq_ptr(unit, result));
55}
56
57static void test_path_get_unit(void) {
58 check_p_g_u("/system/foobar.service/sdfdsaf", 0, "foobar.service");
59 check_p_g_u("/system/getty@.service/tty5", 0, "getty@tty5.service");
60 check_p_g_u("/system/getty@.service/tty5/aaa/bbb", 0, "getty@tty5.service");
61 check_p_g_u("/system/getty@.service/tty5/", 0, "getty@tty5.service");
62 check_p_g_u("/system/getty@tty6.service/tty5", 0, "getty@tty6.service");
63 check_p_g_u("sadfdsafsda", -ENOENT, NULL);
64 check_p_g_u("/system/getty####@tty6.service/tty5", -EINVAL, NULL);
7027ff61 65}
6c03089c 66
7027ff61 67static void test_path_get_user_unit(void) {
6c03089c
LP
68 check_p_g_u_u("/user/lennart/2/systemd-21548/foobar.service", 0, "foobar.service");
69 check_p_g_u_u("/user/lennart/2/systemd-21548/foobar.service/waldo", 0, "foobar.service");
70 check_p_g_u_u("/user/lennart/2/systemd-21548/foobar.service/waldo/uuuux", 0, "foobar.service");
71 check_p_g_u_u("/user/lennart/2/systemd-21548/waldo/waldo/uuuux", -EINVAL, NULL);
72 check_p_g_u_u("/user/lennart/2/foobar.service", -ENOENT, NULL);
73 check_p_g_u_u("/user/lennart/2/systemd-21548/foobar@.service/pie/pa/po", 0, "foobar@pie.service");
96cde13a
ZJS
74}
75
7027ff61
LP
76static void test_get_paths(void) {
77 _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL, *d = NULL;
78
79 assert_se(cg_get_root_path(&a) >= 0);
80 log_info("Root = %s", a);
81
82 assert_se(cg_get_system_path(&b) >= 0);
83 log_info("System = %s", b);
84
85 assert_se(cg_get_user_path(&c) >= 0);
86 log_info("User = %s", c);
87
88 assert_se(cg_get_machine_path(&d) >= 0);
89 log_info("Machine = %s", d);
90}
91
aff38e74
LP
92static void test_proc(void) {
93 _cleanup_closedir_ DIR *d = NULL;
94 struct dirent *de;
95 int r;
96
97 d = opendir("/proc");
98 assert_se(d);
99
100 FOREACH_DIRENT(de, d, break) {
101 _cleanup_free_ char *path = NULL, *path_shifted = NULL, *session = NULL, *unit = NULL, *user_unit = NULL, *machine = NULL, *prefix = NULL;
102 pid_t pid;
103
104 if (de->d_type != DT_DIR &&
105 de->d_type != DT_UNKNOWN)
106 continue;
107
108 r = parse_pid(de->d_name, &pid);
109 if (r < 0)
110 continue;
111
112 cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &path);
113 cg_pid_get_path_shifted(pid, &prefix, &path_shifted);
114 cg_pid_get_session(pid, &session);
115 cg_pid_get_unit(pid, &unit);
116 cg_pid_get_user_unit(pid, &user_unit);
117 cg_pid_get_machine_name(pid, &machine);
118
119 printf("%lu\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
120 (unsigned long) pid,
121 path,
122 prefix,
123 path_shifted,
124 session,
125 unit,
126 user_unit,
127 machine);
128 }
129}
130
96cde13a 131int main(void) {
7027ff61 132 test_path_decode_unit();
6c03089c 133 test_path_get_unit();
7027ff61
LP
134 test_path_get_user_unit();
135 test_get_paths();
aff38e74 136 test_proc();
96cde13a
ZJS
137
138 return 0;
139}