From b01b36e9ad01048a34de6d2b807a1e7041e657fa Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Fri, 15 Dec 2017 17:03:09 +0100 Subject: [PATCH] tests: expand lxc_raw_clone() tests - test CLONE_VFORK - test CLONE_FILES Signed-off-by: Christian Brauner --- src/tests/lxc_raw_clone.c | 94 ++++++++++++++++++++++++++++++++++----- 1 file changed, 82 insertions(+), 12 deletions(-) diff --git a/src/tests/lxc_raw_clone.c b/src/tests/lxc_raw_clone.c index 2eadf98e7..779023141 100644 --- a/src/tests/lxc_raw_clone.c +++ b/src/tests/lxc_raw_clone.c @@ -116,9 +116,16 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - pid = lxc_raw_clone(CLONE_NEWUSER | CLONE_NEWCGROUP | CLONE_NEWNS | - CLONE_NEWIPC | CLONE_NEWNET | CLONE_NEWIPC | - CLONE_NEWPID | CLONE_NEWUTS); + flags |= CLONE_NEWUSER; + if (cgns_supported()) + flags |= CLONE_NEWCGROUP; + flags |= CLONE_NEWNS; + flags |= CLONE_NEWIPC; + flags |= CLONE_NEWNET; + flags |= CLONE_NEWIPC; + flags |= CLONE_NEWPID; + flags |= CLONE_NEWUTS; + pid = lxc_raw_clone(flags); if (pid < 0) { lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_NEWUSER " "| CLONE_NEWCGROUP | CLONE_NEWNS | " @@ -138,15 +145,6 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - flags |= CLONE_NEWUSER; - if (cgns_supported()) - flags |= CLONE_NEWCGROUP; - flags |= CLONE_NEWNS; - flags |= CLONE_NEWIPC; - flags |= CLONE_NEWNET; - flags |= CLONE_NEWIPC; - flags |= CLONE_NEWPID; - flags |= CLONE_NEWUTS; pid = lxc_raw_clone(flags); if (pid < 0) { lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_NEWUSER " @@ -165,9 +163,81 @@ int main(int argc, char *argv[]) status = wait_for_pid(pid); if (status == 0) { lxc_error("%s\n", "Failed to retrieve correct exit status"); + exit(EXIT_FAILURE); + } + + pid = lxc_raw_clone(CLONE_VFORK); + if (pid < 0) { + lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_VFORK);"); + exit(EXIT_FAILURE); + } + + + if (pid == 0) { + lxc_error("%s\n", "Child will exit(EXIT_SUCCESS)"); exit(EXIT_SUCCESS); } + status = wait_for_pid(pid); + if (status != 0) { + lxc_error("%s\n", "Failed to retrieve correct exit status"); + exit(EXIT_FAILURE); + } + + pid = lxc_raw_clone(CLONE_VFORK); + if (pid < 0) { + lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_VFORK);"); + exit(EXIT_FAILURE); + } + + + if (pid == 0) { + lxc_error("%s\n", "Child will exit(EXIT_FAILURE)"); + exit(EXIT_FAILURE); + } + + status = wait_for_pid(pid); + if (status == 0) { + lxc_error("%s\n", "Failed to retrieve correct exit status"); + exit(EXIT_FAILURE); + } + + pid = lxc_raw_clone(CLONE_FILES); + if (pid < 0) { + lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_FILES);"); + exit(EXIT_FAILURE); + } + + + if (pid == 0) { + lxc_error("%s\n", "Child will exit(EXIT_SUCCESS)"); + exit(EXIT_SUCCESS); + } + + status = wait_for_pid(pid); + if (status != 0) { + lxc_error("%s\n", "Failed to retrieve correct exit status"); + exit(EXIT_FAILURE); + } + + pid = lxc_raw_clone(CLONE_FILES); + if (pid < 0) { + lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_FILES);"); + exit(EXIT_FAILURE); + } + + + if (pid == 0) { + lxc_error("%s\n", "Child will exit(EXIT_FAILURE)"); + exit(EXIT_FAILURE); + } + + status = wait_for_pid(pid); + if (status == 0) { + lxc_error("%s\n", "Failed to retrieve correct exit status"); + exit(EXIT_FAILURE); + } + lxc_debug("%s\n", "All lxc_raw_clone() tests successful"); exit(EXIT_SUCCESS); } -- 2.47.2