[CRIU] [PATCH 10/10] test: generate a random tree of mounts

Andrey Vagin avagin at openvz.org
Tue Aug 13 09:02:53 EDT 2013


Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 test/mounts/mounts.py | 31 +++++++++++++++++++++++++++++++
 test/mounts/mounts.sh | 27 +++++++++++++++++++++++++++
 test/mounts/run.sh    | 24 ++++++++++++++++++++++++
 3 files changed, 82 insertions(+)
 create mode 100755 test/mounts/mounts.py
 create mode 100755 test/mounts/mounts.sh
 create mode 100755 test/mounts/run.sh

diff --git a/test/mounts/mounts.py b/test/mounts/mounts.py
new file mode 100755
index 0000000..7f11d7d
--- /dev/null
+++ b/test/mounts/mounts.py
@@ -0,0 +1,31 @@
+import os
+import tempfile, random
+
+def mount(src, dst, shared, private, slave):
+	cmd = "mount"
+	if shared:
+		cmd += " --make-shared"
+	if private:
+		cmd += " --make-private"
+	if slave:
+		cmd += " --make-slave"
+	if src:
+		cmd += " --bind '%s' '%s'" % (src, dst)
+	else:
+		cmd += " -t tmpfs none '%s'" % (dst)
+
+	print cmd
+	ret = os.system(cmd)
+	if ret:
+		print "failed"
+
+root = tempfile.mkdtemp(prefix = "root.mount", dir = "/tmp")
+mount(None, root, 1, 0, 0)
+mounts = [root]
+
+for i in xrange(10):
+	dstdir = random.choice(mounts)
+	dst = tempfile.mkdtemp(prefix = "mount", dir = dstdir)
+	src = random.choice(mounts + [None])
+	mount(src, dst, random.randint(0,100) > 50, random.randint(0,100) > 90, random.randint(0,100) > 50)
+	mounts.append(dst)
diff --git a/test/mounts/mounts.sh b/test/mounts/mounts.sh
new file mode 100755
index 0000000..19116d0
--- /dev/null
+++ b/test/mounts/mounts.sh
@@ -0,0 +1,27 @@
+[ -z "$INMNTNS" ] && {
+	export INMNTNS=`pwd`
+	export INMNTNS_PID=$$
+	unshare -m -- setsid bash -x "$0" "$@" < /dev/null &> mounts.log &
+	echo $! > mounts.pid
+	while :; do
+		sleep 1
+	done
+}
+
+cd $INMNTNS
+
+mount --make-rprivate /
+
+for i in `cat /proc/self/mounts | awk '{ print $2 }'`; do
+	[ '/' = "$i" ] && continue
+	[ '/proc' = "$i" ] && continue
+	[ '/dev' = "$i" ] && continue
+	echo $i
+	umount -l $i
+done
+
+python mounts.py
+kill $INMNTNS_PID
+while :; do
+	sleep 10
+done
diff --git a/test/mounts/run.sh b/test/mounts/run.sh
new file mode 100755
index 0000000..23d05e5
--- /dev/null
+++ b/test/mounts/run.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+CRIU=../../criu
+set -x
+
+mkdir -p dump
+
+./mounts.sh
+pid=`cat mounts.pid`
+kill -0 $pid || exit
+
+cat /proc/$pid/mountinfo | sort -k 4
+echo "Suspend server"
+${CRIU} dump -D dump -o dump.log -t $pid -v4 || {
+	cat dump/dump.log | grep Error
+	exit 1
+}
+echo "Resume server"
+${CRIU} restore -d -D dump -o restore.log -v4 || {
+	cat dump/dump.log | grep Error
+	exit 1
+}
+cat /proc/$pid/mountinfo | sort -k 4
+kill $pid
-- 
1.8.3.1



More information about the CRIU mailing list