[CRIU] [PATCH 4/4] test: add a test for vanilla unshare()

Tycho Andersen tycho.andersen at canonical.com
Wed May 6 07:07:54 PDT 2015


This test currently fails, but replicates (in a slightly hacky way viz. the
unshare in zdtm.sh) the case where criu is too greedy matching external mounts.

Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
---
 test/zdtm.sh                               |  6 +-
 test/zdtm/.gitignore                       |  1 +
 test/zdtm/live/static/Makefile             |  1 +
 test/zdtm/live/static/mnt_ext_vanilla.c    | 94 ++++++++++++++++++++++++++++++
 test/zdtm/live/static/mnt_ext_vanilla.opts |  1 +
 5 files changed, 102 insertions(+), 1 deletion(-)
 create mode 100644 test/zdtm/live/static/mnt_ext_vanilla.c
 create mode 100644 test/zdtm/live/static/mnt_ext_vanilla.opts

diff --git a/test/zdtm.sh b/test/zdtm.sh
index 3dee9d6..1478a9c 100755
--- a/test/zdtm.sh
+++ b/test/zdtm.sh
@@ -546,7 +546,11 @@ start_test()
 	(
 		# Here is no way to set FD_CLOEXEC on 3
 		exec 3>&-
-		make -C $tdir $tname.pid
+		if [ "$tname" = "mnt_ext_vanilla" ]; then
+			unshare -m make -C $tdir $tname.pid
+		else
+			make -C $tdir $tname.pid
+		fi
 	)
 
 	if [ $? -ne 0 ]; then
diff --git a/test/zdtm/.gitignore b/test/zdtm/.gitignore
index 860cf41..8cda656 100644
--- a/test/zdtm/.gitignore
+++ b/test/zdtm/.gitignore
@@ -62,6 +62,7 @@
 /live/static/mmx00
 /live/static/mnt_ext_auto
 /live/static/mnt_ext_master
+/live/static/mnt_ext_vanilla
 /live/static/mntns_link_ghost
 /live/static/mntns_link_remap
 /live/static/mntns_open
diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
index 6e5ffb3..23b8976 100644
--- a/test/zdtm/live/static/Makefile
+++ b/test/zdtm/live/static/Makefile
@@ -122,6 +122,7 @@ TST_NOFILE	=				\
 		remap_dead_pid			\
 		aio00				\
 		fd				\
+		mnt_ext_vanilla			\
 #		jobctl00			\
 
 TST_FILE	=				\
diff --git a/test/zdtm/live/static/mnt_ext_vanilla.c b/test/zdtm/live/static/mnt_ext_vanilla.c
new file mode 100644
index 0000000..ef9db3a
--- /dev/null
+++ b/test/zdtm/live/static/mnt_ext_vanilla.c
@@ -0,0 +1,94 @@
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <unistd.h>
+#include <sched.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <linux/limits.h>
+
+#include "zdtmtst.h"
+
+#ifndef CLONE_NEWNS
+#define CLONE_NEWNS     0x00020000
+#endif
+
+const char *test_doc	= "Test a not-really-external external mount";
+const char *test_author	= "Tycho Andersen <tycho.andersen at canonical.com>";
+
+int main(int argc, char ** argv)
+{
+	/*
+	 * The magic here happens in zdtm.sh, which unshares before it invokes
+	 * the test so that criu incorrectly matches external mounts.
+	 */
+	test_init(argc, argv);
+
+	test_daemon();
+	test_waitsig();
+
+	pass();
+
+	return 0;
+
+	/*
+	char src[PATH_MAX], *root;
+	int status;
+	pid_t pid;
+
+	root = getenv("ZDTM_ROOT");
+	if (root == NULL) {
+		err("root");
+		return 1;
+	}
+
+	if (strcmp(getenv("ZDTM_NEWNS"), "1"))
+		goto test;
+
+	sprintf(src, "%s/src", root);
+
+	mkdir(src, 0700);
+
+	if (mount(NULL, src, "tmpfs", 0, NULL)) {
+		err("mount");
+		return 1;
+	}
+
+	pid = fork();
+	if (pid < 0)
+		return 1;
+	if (pid == 0) {
+		pid_t pid2;
+		test_ext_init(argc, argv);
+		pid2 = fork();
+		if (pid2 < 0) {
+			err("fork2");
+			return 1;
+		}
+
+		if (pid2 == 0) {
+			unshare(CLONE_NEWNS);
+			return 1;
+		}
+
+		wait(NULL);
+
+		return 0;
+	}
+
+	wait(&status);
+	if (status != 0)
+		return 1;
+
+test:
+	test_init(argc, argv);
+
+	test_daemon();
+	test_waitsig();
+
+	pass();
+
+	return 0;
+	*/
+}
diff --git a/test/zdtm/live/static/mnt_ext_vanilla.opts b/test/zdtm/live/static/mnt_ext_vanilla.opts
new file mode 100644
index 0000000..b8a0c84
--- /dev/null
+++ b/test/zdtm/live/static/mnt_ext_vanilla.opts
@@ -0,0 +1 @@
+--ext-mount-map auto --enable-external-sharing --enable-external-masters
-- 
2.1.4



More information about the CRIU mailing list