From: Zbigniew Jędrzejewski-Szmek Date: Sun, 6 Nov 2022 16:13:57 +0000 (+0100) Subject: tests: create test-raw-clone.c for raw-clone.h X-Git-Tag: v253-rc1~572^2~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ba6823716a5177ecd537b56e73c37ef092ef81a;p=thirdparty%2Fsystemd.git tests: create test-raw-clone.c for raw-clone.h The include for process-util.h is added for reset_cached_pid(). This essentially fixes a pre-existing missing include. --- diff --git a/src/basic/raw-clone.h b/src/basic/raw-clone.h index becf42e70bf..a3b768f8261 100644 --- a/src/basic/raw-clone.h +++ b/src/basic/raw-clone.h @@ -11,6 +11,7 @@ #include "log.h" #include "macro.h" +#include "process-util.h" /** * raw_clone() - uses clone to create a new process with clone flags diff --git a/src/test/meson.build b/src/test/meson.build index d59ea44aa10..bb095989661 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -205,6 +205,8 @@ tests += [ [files('test-ratelimit.c')], + [files('test-raw-clone.c')], + [files('test-limits-util.c')], [files('test-util.c')], diff --git a/src/test/test-raw-clone.c b/src/test/test-raw-clone.c new file mode 100644 index 00000000000..23ec7d1aa08 --- /dev/null +++ b/src/test/test-raw-clone.c @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include + +#include "errno-util.h" +#include "format-util.h" +#include "missing_syscall.h" +#include "raw-clone.h" +#include "tests.h" + +TEST(raw_clone) { + pid_t parent, pid, pid2; + + parent = getpid(); + log_info("before clone: getpid()→"PID_FMT, parent); + assert_se(raw_getpid() == parent); + + pid = raw_clone(0); + assert_se(pid >= 0); + + pid2 = raw_getpid(); + log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" raw_getpid()→"PID_FMT, + pid, getpid(), pid2); + if (pid == 0) { + assert_se(pid2 != parent); + _exit(EXIT_SUCCESS); + } else { + int status; + + assert_se(pid2 == parent); + waitpid(pid, &status, __WCLONE); + assert_se(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS); + } + + errno = 0; + assert_se(raw_clone(CLONE_FS|CLONE_NEWNS) == -1); + assert_se(errno == EINVAL || ERRNO_IS_PRIVILEGE(errno)); /* Certain container environments prohibit namespaces to us, don't fail in that case */ +} + +DEFINE_TEST_MAIN(LOG_INFO); diff --git a/src/test/test-util.c b/src/test/test-util.c index a5263875284..ecbe08687a5 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include -#include -#include #include "fileio.h" #include "fs-util.h" @@ -128,33 +126,4 @@ TEST(eqzero) { assert_se(!eqzero(longer)); } -TEST(raw_clone) { - pid_t parent, pid, pid2; - - parent = getpid(); - log_info("before clone: getpid()→"PID_FMT, parent); - assert_se(raw_getpid() == parent); - - pid = raw_clone(0); - assert_se(pid >= 0); - - pid2 = raw_getpid(); - log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" raw_getpid()→"PID_FMT, - pid, getpid(), pid2); - if (pid == 0) { - assert_se(pid2 != parent); - _exit(EXIT_SUCCESS); - } else { - int status; - - assert_se(pid2 == parent); - waitpid(pid, &status, __WCLONE); - assert_se(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS); - } - - errno = 0; - assert_se(raw_clone(CLONE_FS|CLONE_NEWNS) == -1); - assert_se(errno == EINVAL || ERRNO_IS_PRIVILEGE(errno)); /* Certain container environments prohibit namespaces to us, don't fail in that case */ -} - DEFINE_TEST_MAIN(LOG_INFO);