[CRIU] [PATCH 4/4] test: add a test for remap_dead_pid

Tycho Andersen tycho.andersen at canonical.com
Mon Sep 15 15:05:37 PDT 2014


On Mon, Sep 15, 2014 at 06:05:35PM +0400, Andrew Vagin wrote:
> On Fri, Sep 12, 2014 at 07:43:31PM -0500, Tycho Andersen wrote:
> > Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> > ---
> >  test/zdtm.sh                           |  1 +
> >  test/zdtm/.gitignore                   |  1 +
> >  test/zdtm/live/static/Makefile         |  1 +
> >  test/zdtm/live/static/remap_dead_pid.c | 74 ++++++++++++++++++++++++++++++++++
> >  4 files changed, 77 insertions(+)
> >  create mode 100644 test/zdtm/live/static/remap_dead_pid.c
> > 
> > diff --git a/test/zdtm.sh b/test/zdtm.sh
> > index f6011ea..09cb1bf 100755
> > --- a/test/zdtm.sh
> > +++ b/test/zdtm.sh
> > @@ -179,6 +179,7 @@ static/cgroup00
> >  static/cgroup01
> >  static/cgroup02
> >  ns/static/clean_mntns
> > +ns/static/remap_dead_pid
> 
> Why can it not be executed in a current set of namespaces?

I think it can, I will fix it before I repost.

Tycho

> >  "
> >  
> >  TEST_CR_KERNEL="
> > diff --git a/test/zdtm/.gitignore b/test/zdtm/.gitignore
> > index a8f60b9..fef561d 100644
> > --- a/test/zdtm/.gitignore
> > +++ b/test/zdtm/.gitignore
> > @@ -90,6 +90,7 @@
> >  /live/static/pty02
> >  /live/static/pty03
> >  /live/static/pty04
> > +/live/static/remap_dead_pid
> >  /live/static/rlimits00
> >  /live/static/rmdir_open
> >  /live/static/rtc
> > diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
> > index e079201..e44bf6a 100644
> > --- a/test/zdtm/live/static/Makefile
> > +++ b/test/zdtm/live/static/Makefile
> > @@ -113,6 +113,7 @@ TST_NOFILE	=				\
> >  		clean_mntns			\
> >  		dumpable01			\
> >  		dumpable02			\
> > +		remap_dead_pid			\
> >  #		jobctl00			\
> >  
> >  TST_FILE	=				\
> > diff --git a/test/zdtm/live/static/remap_dead_pid.c b/test/zdtm/live/static/remap_dead_pid.c
> > new file mode 100644
> > index 0000000..4e3953a
> > --- /dev/null
> > +++ b/test/zdtm/live/static/remap_dead_pid.c
> > @@ -0,0 +1,74 @@
> > +#define _GNU_SOURCE
> > +#include <string.h>
> > +#include <fcntl.h>
> > +#include <unistd.h>
> > +#include <signal.h>
> > +#include <stdio.h>
> > +#include <limits.h>
> > +#include <sys/types.h>
> > +#include <sys/wait.h>
> > +
> > +#include "zdtmtst.h"
> > +
> > +#ifndef CLONE_NEWNS
> > +#define CLONE_NEWNS     0x00020000
> > +#endif
> > +
> > +const char *test_doc	= "Check that dead pid's /proc entries are remapped correctly";
> > +const char *test_author	= "Tycho Andersen <tycho.andersen at canonical.com>";
> > +
> > +int main(int argc, char **argv)
> > +{
> > +	pid_t pid;
> > +
> > +	test_init(argc, argv);
> > +
> > +	pid = fork();
> > +	if (pid < 0) {
> > +		fail("fork() failed");
> > +		return -1;
> > +	}
> > +
> > +	if (pid == 0) {
> > +		test_msg("child is %d\n", pid);
> > +		/* Child process just sleeps until it is killed. All we need
> > +		 * here is a process to open the mountinfo of. */
> > +		while(1)
> > +			sleep(10);
> > +	} else {
> > +		int fd, ret;
> > +		char path[PATH_MAX];
> > +		pid_t result;
> > +
> > +		sprintf(path, "/proc/%d/mountinfo", pid);
> > +
> > +		fd = open(path, O_RDONLY);
> > +
> > +		/* no matter what, we should kill the child */
> > +		kill(pid, SIGINT);
> > +		result = waitpid(pid, NULL, 0);
> > +		if (result < 0) {
> > +			fail("failed waitpid()");
> > +			return -1;
> > +		}
> > +
> > +		if (fd < 0) {
> > +			fail("failed opening %s", path);
> > +			return -1;
> > +		}
> > +
> > +		test_daemon();
> > +		test_waitsig();
> > +
> > +		ret = fcntl(fd, F_GETFD);
> > +		close(fd);
> > +
> > +		if (ret) {
> > +			fail("bad fd after restore");
> > +			return -1;
> > +		}
> > +	}
> > +
> > +	pass();
> > +	return 0;
> > +}
> > -- 
> > 1.9.1
> > 
> > _______________________________________________
> > CRIU mailing list
> > CRIU at openvz.org
> > https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list