]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-cgroup.c
nspawn: introduce the new /machine/ tree in the cgroup tree and move containers there
[thirdparty/systemd.git] / src / test / test-cgroup.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
8c6db833
LP
2
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
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
8c6db833
LP
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
5430f7f2 16 Lesser General Public License for more details.
8c6db833 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
8c6db833
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22#include <unistd.h>
23#include <string.h>
24
8c6db833 25#include "cgroup-util.h"
9eb977db 26#include "path-util.h"
8c6db833
LP
27#include "util.h"
28#include "log.h"
29
30int main(int argc, char*argv[]) {
31 char *path;
35d2e7ec 32 char *c, *p;
8c6db833 33
a32360f1
LP
34 assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a", NULL) == 0);
35 assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a", NULL) == 0);
36 assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b", NULL) == 0);
37 assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-c", NULL) == 0);
c6c18be3 38 assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0) == 0);
8c6db833 39
7027ff61 40 assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
8c6db833
LP
41 assert_se(streq(path, "/test-b"));
42 free(path);
43
c6c18be3 44 assert_se(cg_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0) == 0);
8c6db833 45
7027ff61 46 assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
8c6db833
LP
47 assert_se(path_equal(path, "/test-a"));
48 free(path);
49
c6c18be3 50 assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-d", 0) == 0);
8c6db833 51
7027ff61 52 assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
8c6db833
LP
53 assert_se(path_equal(path, "/test-b/test-d"));
54 free(path);
55
c6c18be3 56 assert_se(cg_get_path(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-d", NULL, &path) == 0);
77d5f105 57 assert_se(path_equal(path, "/sys/fs/cgroup/systemd/test-b/test-d"));
8c6db833
LP
58 free(path);
59
c6c18be3
LP
60 assert_se(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, "/test-a", false) > 0);
61 assert_se(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, "/test-b", false) > 0);
62 assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", false) > 0);
63 assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", false) == 0);
8c6db833 64
430c18ed
LP
65 assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, false, false, false, NULL) == 0);
66 assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, false, false, false, NULL) > 0);
8c6db833 67
246aa6dd 68 assert_se(cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", SYSTEMD_CGROUP_CONTROLLER, "/test-a", false, false) > 0);
8c6db833 69
c6c18be3
LP
70 assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", false) == 0);
71 assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", false) > 0);
8c6db833 72
430c18ed
LP
73 assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, false, false, false, NULL) > 0);
74 assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, false, false, false, NULL) == 0);
8c6db833 75
c6c18be3 76 cg_trim(SYSTEMD_CGROUP_CONTROLLER, "/", false);
8c6db833 77
c6c18be3 78 assert_se(cg_delete(SYSTEMD_CGROUP_CONTROLLER, "/test-b") < 0);
35d2e7ec
LP
79 assert_se(cg_delete(SYSTEMD_CGROUP_CONTROLLER, "/test-a") >= 0);
80
81 assert_se(cg_split_spec("foobar:/", &c, &p) == 0);
82 assert(streq(c, "foobar"));
83 assert(streq(p, "/"));
84 free(c);
85 free(p);
86
87 assert_se(cg_split_spec("foobar:", &c, &p) < 0);
88 assert_se(cg_split_spec("foobar:asdfd", &c, &p) < 0);
89 assert_se(cg_split_spec(":///", &c, &p) < 0);
90 assert_se(cg_split_spec(":", &c, &p) < 0);
91 assert_se(cg_split_spec("", &c, &p) < 0);
92 assert_se(cg_split_spec("fo/obar:/", &c, &p) < 0);
93
94 assert_se(cg_split_spec("/", &c, &p) >= 0);
95 assert(c == NULL);
96 assert(streq(p, "/"));
97 free(p);
98
99 assert_se(cg_split_spec("foo", &c, &p) >= 0);
100 assert(streq(c, "foo"));
101 assert(p == NULL);
102 free(c);
8c6db833
LP
103
104 return 0;
105}