]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-namespace.c
2 This file is part of systemd.
4 Copyright 2013 Zbigniew Jędrzejewski-Szmek
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 #include <sys/socket.h>
22 #include "alloc-util.h"
24 #include "namespace.h"
25 #include "process-util.h"
26 #include "string-util.h"
29 static void test_tmpdir(const char *id
, const char *A
, const char *B
) {
30 _cleanup_free_
char *a
, *b
;
34 assert_se(setup_tmp_dirs(id
, &a
, &b
) == 0);
35 assert_se(startswith(a
, A
));
36 assert_se(startswith(b
, B
));
38 assert_se(stat(a
, &x
) >= 0);
39 assert_se(stat(b
, &y
) >= 0);
41 assert_se(S_ISDIR(x
.st_mode
));
42 assert_se(S_ISDIR(y
.st_mode
));
44 assert_se((x
.st_mode
& 01777) == 0700);
45 assert_se((y
.st_mode
& 01777) == 0700);
47 c
= strjoina(a
, "/tmp");
48 d
= strjoina(b
, "/tmp");
50 assert_se(stat(c
, &x
) >= 0);
51 assert_se(stat(d
, &y
) >= 0);
53 assert_se(S_ISDIR(x
.st_mode
));
54 assert_se(S_ISDIR(y
.st_mode
));
56 assert_se((x
.st_mode
& 01777) == 01777);
57 assert_se((y
.st_mode
& 01777) == 01777);
59 assert_se(rmdir(c
) >= 0);
60 assert_se(rmdir(d
) >= 0);
62 assert_se(rmdir(a
) >= 0);
63 assert_se(rmdir(b
) >= 0);
66 static void test_netns(void) {
67 _cleanup_close_pair_
int s
[2] = { -1, -1 };
68 pid_t pid1
, pid2
, pid3
;
75 assert_se(socketpair(AF_UNIX
, SOCK_DGRAM
, 0, s
) >= 0);
104 r
= wait_for_terminate(pid1
, &si
);
106 assert_se(si
.si_code
== CLD_EXITED
);
109 r
= wait_for_terminate(pid2
, &si
);
111 assert_se(si
.si_code
== CLD_EXITED
);
114 r
= wait_for_terminate(pid3
, &si
);
116 assert_se(si
.si_code
== CLD_EXITED
);
122 int main(int argc
, char *argv
[]) {
124 char boot_id
[SD_ID128_STRING_MAX
];
125 _cleanup_free_
char *x
= NULL
, *y
= NULL
, *z
= NULL
, *zz
= NULL
;
127 assert_se(sd_id128_get_boot(&bid
) >= 0);
128 sd_id128_to_string(bid
, boot_id
);
130 x
= strjoin("/tmp/systemd-private-", boot_id
, "-abcd.service-", NULL
);
131 y
= strjoin("/var/tmp/systemd-private-", boot_id
, "-abcd.service-", NULL
);
134 test_tmpdir("abcd.service", x
, y
);
136 z
= strjoin("/tmp/systemd-private-", boot_id
, "-sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device-", NULL
);
137 zz
= strjoin("/var/tmp/systemd-private-", boot_id
, "-sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device-", NULL
);
141 test_tmpdir("sys-devices-pci0000:00-0000:00:1a.0-usb3-3\\x2d1-3\\x2d1:1.0-bluetooth-hci0.device", z
, zz
);