[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