Commit 9d6bc6e4 authored by Pavel Emelyanov's avatar Pavel Emelyanov

zdtm: Remove test_init_ns()

The ns and uns flavors are MUCH better ways of launching tests in namespaces.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
Acked-by: 's avatarAndrew Vagin <avagin@virtuozzo.com>
parent c31c594e
......@@ -229,121 +229,6 @@ skip_pid:
srand48(time(NULL)); /* just in case we need it */
}
#define STACK_SIZE 4096
struct zdtm_clone_arg {
char stack[STACK_SIZE];
char stack_ptr[0];
FILE *pidf;
int argc;
char **argv;
int (*fn)(int argc, char **argv);
};
static int do_test_fn(void *_arg)
{
struct zdtm_clone_arg *ca = _arg;
struct sigaction sa = {
.sa_handler = SIG_DFL,
.sa_flags = SA_RESTART,
};
/* record the test pid to remember the ownership of the pidfile */
master_pid = getpid();
fclose(ca->pidf);
sigemptyset(&sa.sa_mask);
if (sigaction(SIGCHLD, &sa, NULL)) {
pr_perror("Can't reset SIGCHLD handler");
exit(1);
}
if (setsid() < 0) {
pr_perror("Can't become session group leader");
exit(1);
}
srand48(time(NULL)); /* just in case we need it */
if (ca->fn(ca->argc, ca->argv))
exit(1);
exit(0);
}
void test_init_ns(int argc, char **argv, unsigned long clone_flags,
int (*fn)(int , char **))
{
extern void parseargs(int, char **);
pid_t pid;
static FILE *pidf;
struct sigaction sa = {
.sa_handler = sig_hand,
.sa_flags = SA_RESTART,
};
struct zdtm_clone_arg ca;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGTERM, &sa, NULL)) {
fprintf(stderr, "Can't set SIGTERM handler: %m\n");
exit(1);
}
if (sigaction(SIGCHLD, &sa, NULL)) {
fprintf(stderr, "Can't set SIGCHLD handler: %m\n");
exit(1);
}
parseargs(argc, argv);
/* setup_outfile() should be called in a target mount namespace */
if (!(clone_flags & CLONE_NEWNS))
setup_outfile();
redir_stdfds();
pidf = fopen(pidfile, "wx");
if (!pidf) {
pr_perror("Can't create pid file %s", pidfile);
exit(1);
}
ca.pidf = pidf;
ca.fn = fn;
ca.argc = argc;
ca.argv = argv;
pid = clone(do_test_fn, ca.stack_ptr, clone_flags | SIGCHLD, &ca);
if (pid < 0) {
pr_perror("Daemonizing failed");
exit(1);
}
/* parent will exit when the child is ready */
test_waitsig();
if (futex_get(&sig_received) == SIGCHLD) {
int ret;
if (waitpid(pid, &ret, 0) != pid) {
pr_perror("Unable to wait %d", pid);
exit(1);
}
if (WIFEXITED(ret)) {
pr_err("Test exited unexpectedly with code %d\n", WEXITSTATUS(ret));
exit(1);
}
if (WIFSIGNALED(ret)) {
pr_err("Test exited on unexpected signal %d\n", WTERMSIG(ret));
exit(1);
}
}
fprintf(pidf, "%d\n", pid);
fclose(pidf);
_exit(0);
}
void test_daemon()
{
pid_t ppid;
......
......@@ -15,7 +15,6 @@
/* set up test */
extern void test_ext_init(int argc, char **argv);
extern void test_init(int argc, char **argv);
extern void test_init_ns(int argc, char **argv, unsigned long clone_flags, int (*fn)(int , char **));
#ifndef CLONE_NEWUTS
#define CLONE_NEWUTS 0x04000000
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment