mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -205,6 +205,8 @@ tests += [
|
||||
|
||||
[files('test-ratelimit.c')],
|
||||
|
||||
[files('test-raw-clone.c')],
|
||||
|
||||
[files('test-limits-util.c')],
|
||||
|
||||
[files('test-util.c')],
|
||||
|
||||
41
src/test/test-raw-clone.c
Normal file
41
src/test/test-raw-clone.c
Normal file
@@ -0,0 +1,41 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#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);
|
||||
@@ -1,8 +1,6 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#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);
|
||||
|
||||
Reference in New Issue
Block a user