From: Christian Brauner Date: Fri, 15 Dec 2017 16:03:09 +0000 (+0100) Subject: tests: expand lxc_raw_clone() tests X-Git-Tag: lxc-2.0.10~455 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7831a82c45cdfcb7a0da6e908665a765f4e13228;p=thirdparty%2Flxc.git tests: expand lxc_raw_clone() tests - test CLONE_VFORK - test CLONE_FILES Signed-off-by: Christian Brauner --- 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); }