[CRIU] [PATCH 2/2] tests: remove zdtm.sh

Andrey Vagin avagin at openvz.org
Fri Feb 19 13:11:40 PST 2016


From: Andrew Vagin <avagin at virtuozzo.com>

It was replaced by zdtm.py.

Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
---
 test/maps.py |   16 -
 test/zdtm.sh | 1249 ----------------------------------------------------------
 2 files changed, 1265 deletions(-)
 delete mode 100644 test/maps.py
 delete mode 100755 test/zdtm.sh

diff --git a/test/maps.py b/test/maps.py
deleted file mode 100644
index 1b7f96c..0000000
--- a/test/maps.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import sys
-start = 0;
-end = 0;
-
-for l in sys.stdin:
-	l = l.split()[0]
-	s, e = l.split('-')
-	s = int("0x" + s, 0)
-	e = int("0x" + e, 0)
-	if end == s:
-		end = e;
-	else:
-		print "%x-%x" % (start, end)
-		start = s
-		end = e
-print "%x-%x" % (start, end)
diff --git a/test/zdtm.sh b/test/zdtm.sh
deleted file mode 100755
index 8b8faf5..0000000
--- a/test/zdtm.sh
+++ /dev/null
@@ -1,1249 +0,0 @@
-#!/bin/bash
-
-# duplicate stdout into 3
-exec 3<&1
-# duplicate stderr into stdout
-exec 1>&2
-
-ARCH=`uname -m | sed			\
-		-e s/i.86/i386/		\
-		-e s/sun4u/sparc64/	\
-		-e s/s390x/s390/	\
-		-e s/parisc64/parisc/	\
-		-e s/mips.*/mips/	\
-		-e s/sh[234].*/sh/`
-
-ZP="zdtm/live"
-
-source $(readlink -f `dirname $0`/env.sh) || exit 1
-
-generate_test_list()
-{
-
-	check_mainstream || exit 1
-
-	TEST_LIST="
-		static/pipe00
-		static/pipe01
-		static/pipe02
-		static/busyloop00
-		static/cwd00
-		static/cwd01
-		static/cwd02
-		static/env00
-		static/maps00
-		static/maps01
-		static/maps02
-		static/maps04
-		static/maps05
-		static/mlock_setuid
-		static/maps_file_prot
-		static/mprotect00
-		static/mtime_mmap
-		static/sleeping00
-		static/write_read00
-		static/write_read01
-		static/write_read02
-		static/write_read10
-		static/wait00
-		static/vdso00
-		static/sched_prio00
-		static/sched_policy00
-		static/file_shared
-		static/file_append
-		static/timers
-		static/posix_timers
-		static/futex
-		static/futex-rl
-		static/xids00
-		static/groups
-		static/pthread00
-		static/pthread01
-		static/umask00
-		streaming/pipe_loop00
-		streaming/pipe_shared00
-		transition/file_read
-		static/sockets00
-		static/sockets01
-		static/sockets02
-		static/sock_opts00
-		static/sock_opts01
-		static/sockets_spair
-		static/sockets_dgram
-		static/socket_dgram_data
-		static/socket_queues
-		static/deleted_unix_sock
-		static/sk-unix-unconn
-		static/sk-unix-rel
-		static/pid00
-		static/pstree
-		static/caps00
-		static/cmdlinenv00
-		static/socket_listen
-		static/socket_listen6
-		static/packet_sock
-		static/packet_sock_mmap
-		static/socket_udp
-		static/sock_filter
-		static/socket6_udp
-		static/socket_udplite
-		static/selfexe00
-		static/link10
-		static/unlink_fstat00
-		static/unlink_fstat01
-		static/unlink_fstat02
-		static/unlink_fstat03
-		static/unlink_mmap00
-		static/unlink_mmap01
-		static/unlink_mmap02
-		static/rmdir_open
-		static/eventfs00
-		static/signalfd00
-		static/inotify00
-		static/inotify02
-		static/inotify_irmap
-		static/fanotify00
-		static/unbound_sock
-		static/fifo-rowo-pair
-		static/fifo-ghost
-		static/fifo
-		static/fifo_wronly
-		static/fifo_ro
-		static/unlink_fifo
-		static/unlink_fifo_wronly
-		static/zombie00
-		static/rlimits00
-		transition/fork
-		transition/fork2
-		transition/thread-bomb
-		static/pty00
-		static/pty01
-		static/pty04
-		static/tty02
-		static/tty03
-		static/console
-		static/vt
-		static/child_opened_proc
-		static/cow01
-		static/pdeath_sig
-		static/fdt_shared
-		static/file_locks00
-		static/file_locks01
-		static/file_locks02
-		static/file_locks03
-		static/file_locks04
-		static/file_locks05
-		static/sigpending
-		static/sigaltstack
-		static/sk-netlink
-		static/proc-self
-		static/grow_map
-		static/grow_map02
-		static/grow_map03
-		static/stopped
-		static/chroot
-		static/chroot-file
-		static/rtc
-		transition/maps007
-		static/dumpable01
-		static/dumpable02
-		static/deleted_dev
-		static/socket-tcpbuf-local
-		static/socket-tcpbuf6-local
-		static/socket-tcp-local
-		static/socket-tcp6-local
-	"
-
-	#
-	# Arch specific tests
-	if [ $ARCH = "x86_64" ]; then
-		TEST_LIST_ARCH="
-			static/fpu00
-			static/fpu01
-			static/mmx00
-			static/sse00
-			static/sse20
-			static/vdso01
-		"
-	fi
-
-	if [ $ARCH = "ppc64le" ]; then
-		TEST_LIST_ARCH="
-			static/vsx
-		"
-	fi
-
-	TEST_LIST=$TEST_LIST$TEST_LIST_ARCH
-
-	# Duplicate list with ns/ prefix
-	TEST_LIST=$TEST_LIST$(echo $TEST_LIST | tr ' ' '\n' | sed 's#^#ns/#')
-
-	# These ones are not in ns
-	TEST_LIST="$TEST_LIST
-		static/file_fown
-		static/socket-ext
-		static/socket-tcp
-		static/socket-tcp6
-		streaming/socket-tcp
-		streaming/socket-tcp6
-		static/socket-tcpbuf
-		static/socket-tcpbuf6
-		static/pty03
-		ns/static/mountpoints
-		ns/static/session00
-		ns/static/session01
-		ns/static/tempfs
-		ns/static/tempfs_ro
-		ns/static/tempfs_subns
-		ns/static/mnt_ro_bind
-		ns/static/mount_paths
-		ns/static/bind-mount
-		ns/static/utsname
-		ns/static/ipc_namespace
-		ns/static/shm
-		ns/static/msgque
-		ns/static/sem
-		ns/transition/ipc
-		ns/static/netns-dev
-		static/cgroup00
-		static/cgroup01
-		static/cgroup02
-		static/cgroup03
-		ns/static/clean_mntns
-		static/remap_dead_pid
-		static/poll
-		static/apparmor
-		ns/static/apparmor
-		static/different_creds
-	"
-
-	TEST_CR_KERNEL="
-	"
-
-	TEST_MNTNS="
-		ns/static/mnt_ext_auto
-		ns/static/mnt_ext_master
-		ns/static/mntns_open
-		ns/static/mntns_link_remap
-		ns/static/mntns_link_ghost
-		ns/static/mntns_shared_bind
-		ns/static/mntns_shared_bind02
-		ns/static/mntns_root_bind
-		ns/static/mntns_root_bind02
-		ns/static/mntns_deleted
-		ns/static/inotify01
-		ns/static/mntns_rw_ro_rw
-	"
-
-	TEST_AIO="
-		static/aio00
-		ns/static/aio00
-	"
-
-	TEST_TIMERFD="
-		static/timerfd
-		ns/static/timerfd
-	"
-
-	TEST_TUN="
-		ns/static/tun
-	"
-	TEST_SECCOMP_SUSPEND="
-		static/seccomp_strict
-	"
-
-	TEST_SECCOMP_FILTERS="
-		static/seccomp_filter
-		static/seccomp_filter_tsync
-		static/seccomp_filter_inheritance
-	"
-
-	$CRIU check -v0 --feature "mnt_id"
-	if [ $? -eq 0 ]; then
-		TEST_LIST="$TEST_LIST$TEST_MNTNS"
-	else
-		export ZDTM_NOSUBNS=1
-	fi
-
-	$CRIU check -v0 --feature "aio_remap"
-	if [ $? -eq 0 ]; then
-		TEST_LIST="$TEST_LIST$TEST_AIO"
-	fi
-
-	$CRIU check -v0 --feature "timerfd"
-	if [ $? -eq 0 ]; then
-		TEST_LIST="$TEST_LIST$TEST_TIMERFD"
-	fi
-
-	$CRIU check -v0 --feature "tun"
-	if [ $? -eq 0 ]; then
-		TEST_LIST="$TEST_LIST$TEST_TUN"
-	fi
-
-	$CRIU check -v0 --feature "seccomp_suspend"
-	if [ $? -eq 0 ]; then
-		TEST_LIST="$TEST_LIST$TEST_SECCOMP_SUSPEND"
-	fi
-
-	$CRIU check -v0 --feature "seccomp_filters"
-	if [ $? -eq 0 ]; then
-		TEST_LIST="$TEST_LIST$TEST_SECCOMP_FILTERS"
-	fi
-
-	# ns/static/clean_mntns: proc can't be mounted in userns, if it isn't mounted yet
-
-	BLACKLIST_FOR_USERNS="
-		ns/static/maps01
-		ns/static/mlock_setuid
-		ns/static/sched_prio00
-		ns/static/sched_policy00
-		ns/static/fanotify00
-		ns/static/dumpable02
-		ns/static/deleted_dev
-		ns/static/clean_mntns
-		ns/static/mntns_link_remap
-		ns/static/mntns_link_ghost
-		ns/static/console
-		ns/static/vt
-		ns/static/rtc
-		ns/static/cow01
-		ns/static/tempfs_ro
-		ns/static/ipc_namespace
-	"
-
-	# Add tests which can be executed in an user namespace
-	$CRIU check -v0 --feature "userns"
-	if [ $? -eq 0 ]; then
-		blist=`mktemp /tmp/zdtm.black.XXXXXX`
-		echo "$BLACKLIST_FOR_USERNS" | tr -d "[:blank:]" | sort > $blist
-
-
-		TEST_LIST="$TEST_LIST
-		`echo "$TEST_LIST" | tr -d "[:blank:]" | grep "^ns/" | sort | \
-		diff --changed-group-format="%<" --unchanged-group-format="" - $blist | \
-		sed s#ns/#ns/user/#`"
-		unlink $blist
-	fi
-
-	TEST_LIST=$(echo $TEST_LIST | tr " " "\n")
-}
-
-TEST_SUID_LIST="
-pid00
-caps00
-maps01
-mlock_setuid
-groups
-sched_prio00
-sched_policy00
-sock_opts00
-sock_opts01
-cmdlinenv00
-packet_sock
-packet_sock_mmap
-fanotify00
-sk-netlink
-tun
-chroot
-chroot-file
-console
-vt
-rtc
-maps007
-tempfs
-tempfs_ro
-tempfs_subns
-mnt_ro_bind
-bind-mount
-mountpoints
-inotify_irmap
-cgroup00
-cgroup01
-cgroup02
-cgroup03
-clean_mntns
-deleted_dev
-mntns_open
-mntns_link_remap
-mntns_link_ghost
-mntns_shared_bind
-mntns_shared_bind02
-mntns_root_bind
-mntns_root_bind02
-mntns_rw_ro_rw
-mntns_deleted
-mount_paths
-netns-dev
-sockets00
-cow01
-apparmor
-seccomp_strict
-seccomp_filter
-seccomp_filter_tsync
-seccomp_filter_inheritance
-different_creds
-inotify01
-ipc_namespace
-utsname
-"
-
-TEST_EXPECTED_FAILURE="
-static/different_creds
-"
-
-CRIU_CPT=$CRIU
-TMP_TREE=""
-SCRIPTDIR=`dirname $CRIU`/test
-POSTDUMP="--action-script $SCRIPTDIR/post-dump.sh"
-VERBOSE=0
-
-PID=""
-PIDNS=""
-
-ITERATIONS=1
-EXCLUDE_PATTERN=""
-CLEANUP=0
-PAGE_SERVER=0
-PS_PORT=12345
-COMPILE_ONLY=0
-START_ONLY=0
-BATCH_TEST=0
-SPECIFIED_NAME_USED=0
-START_FROM="."
-RESTORE_SIBLING=""
-FREEZE_CGROUP=""
-
-zdtm_sep()
-{ (
-	set +x
-	local msg=$1
-	[ -n "$msg" ] && msg=" $msg "
-	awk -v m=${2:-=} -v "msg=$msg" '
-		BEGIN {
-			l=length(msg);
-			s=int((79-l)/2);
-			sep = sprintf("%"s"s", " ")
-			gsub(/ /, m, sep);
-			printf("%s%s%s\n",sep,msg,sep);
-		}' < /dev/null
-) }
-
-check_criu()
-{
-	if [ ! -x $CRIU ]; then
-		echo "$CRIU is unavailable"
-		return 1
-	fi
-}
-
-check_mainstream()
-{
-	zdtm_sep "CRIU CHECK"
-
-	$CRIU check -v1 && return 0
-	MAINSTREAM_KERNEL=1
-
-	cat >&2 <<EOF
-============================= WARNING =============================
-Not all features needed for CRIU are merged to upstream kernel yet,
-so for now we maintain our own branch which can be cloned from:
-git://git.kernel.org/pub/scm/linux/kernel/git/gorcunov/linux-cr.git
-===================================================================
-EOF
-
-	set -- `uname -r | sed 's/[\.-]/ /g'`
-
-	[ $1 -gt 3 ] && return 0
-	[ $1 -eq 3 -a $2 -ge 11 ] && return 0
-
-	echo "Kernel version should be greater than or equal to 3.11" >&2
-
-	return 1
-}
-
-exit_callback()
-{
-	echo $@
-	if [ -n "$ZDTM_ROOT" ]; then
-		umount -l "$ZDTM_ROOT"
-		rmdir "$ZDTM_ROOT"
-	fi
-
-	[[ -n "$ZDTM_FAILED" && -n "$DUMP_ARCHIVE" ]] && tar -czf $DUMP_ARCHIVE dump
-	[ -n "$TMPFS_DUMP" ] &&
-		umount -l "$TMPFS_DUMP"
-}
-trap exit_callback EXIT
-
-construct_root()
-{
-	local root=$1
-	local test_path=$2
-	local ps_path=`type -P ps`
-	local libdir=$root/lib
-	local libdir2=$root/lib64
-	local tmpdir=$root/tmp
-	local lname tname
-
-	# inotify_irmap creates files in /etc so it should be able to do
-	# this from userns.
-	mkdir -m 0777 -p $root/etc
-
-	mkdir -p $root/bin
-	cp $ps_path $root/bin
-
-	mkdir -p $libdir $libdir2
-
-	# $ ldd /bin/ps test/zdtm/live/static/env00
-	# /bin/ps:
-	#	/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f39000)
-	#	libprocps.so.0 => /lib/arm-linux-gnueabihf/libprocps.so.0 (0xb6f04000)
-	#	libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6edc000)
-	#	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6dad000)
-	#	/lib/ld-linux-armhf.so.3 (0xb6f46000)
-	# test/zdtm/live/static/env00:
-	#	/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6efe000)
-	#	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6dc5000)
-	#	/lib/ld-linux-armhf.so.3 (0xb6f0b000)
-
-	local libs=$(ldd $test_path $ps_path | awk '
-		!/^[ \t]/ { next }
-		/linux-vdso\.so/ { next }
-		/linux-vdso64\.so/ { next }
-		/linux-gate\.so/ { next }
-		/not a dynamic executable$/ { next }
-		$2 ~ /^=>$/ { print $3; next }
-		{ print $1 }
-	')
-	for i in ${libs}; do
-		local ldir lib=`basename $i`
-
-		[ -f $libdir2/$lib ] && continue # fast path
-
-		if [ -f $i ]; then
-			lname=$i
-		elif [ -f /lib64/$i ]; then
-			lname=/lib64/$i
-		elif [ -f /usr/lib64/$i ]; then
-			lname=/usr/lib64/$i
-		elif [ -f /lib/x86_64-linux-gnu/$i ]; then
-			lname=/lib/x86_64-linux-gnu/$i
-		elif [ -f /lib/arm-linux-gnueabi/$i ]; then
-			lname=/lib/arm-linux-gnueabi/$i
-		else
-			echo "Failed at " $i
-			return 1
-		fi
-
-		# When tests are executed concurrently all of them use the same root,
-		# so libraries must be copied atomically.
-
-		for ldir in "$libdir" "$libdir2"; do
-			tname=$(mktemp $ldir/lib.XXXXXX)
-			cp -pf $lname $tname &&
-			mv -n $tname $ldir/$lib || return 1
-			[ -f $tname ] && unlink $tname
-		done
-	done
-
-	mkdir -p $root/dev
-	mkdir -p $root/dev/pts
-	mknod -m 0666 $root/dev/tty c 5 0
-	mknod -m 0666 $root/dev/null c 1 3
-	if [ -r "/dev/net/tun" ]; then
-		mkdir -p $root/dev/net/
-		mknod -m 0666 $root/dev/net/tun c $(stat -c "0x%t" /dev/net/tun) $(stat -c "0x%T" /dev/net/tun)
-	fi
-	if [ -r "/dev/rtc" ]; then
-		mknod -m 0666 $root/dev/rtc c $(stat -c "0x%t" /dev/rtc) $(stat -c "0x%T" /dev/rtc)
-	fi
-
-	mkdir -p $root/proc
-
-	# make 'tmp' dir under new root
-	mkdir -p $tmpdir
-	chmod 0777 $tmpdir
-}
-
-export MAKEFLAGS=--no-print-directory
-
-start_test()
-{
-	local tdir=$1
-	local tname=$2
-	local test=$(readlink -f $tdir)/$tname
-	export ZDTM_ROOT
-
-	killall -9 $tname > /dev/null 2>&1
-	make -C $tdir $tname.cleanout
-
-	unset ZDTM_UID
-	unset ZDTM_GID
-	unset ZDTM_GROUPS
-
-	if ! echo $TEST_SUID_LIST | grep -q $tname; then
-		export ZDTM_UID=18943
-		export ZDTM_GID=58467
-		export ZDTM_GROUPS="27495 48244"
-		chmod a+w $tdir
-	fi
-
-	if [ -z "$USERNS" ]; then
-		unset ZDTM_USERNS
-	else
-		# we need to be able to create a temporary directory in a test
-		# root for restoring mount namespaces
-		chmod go+wxr .
-		export ZDTM_USERNS=1
-	fi
-
-	if [ -z "$PIDNS" ]; then
-		TPID="$test.pid"
-		unset ZDTM_NEWNS
-	else
-		TPID=$test.init.pid
-		if [ -z "$ZDTM_ROOT" ]; then
-			mkdir -p dump
-			ZDTM_ROOT=`mktemp -d /tmp/criu-root.XXXXXX`
-			ZDTM_ROOT=`readlink -f $ZDTM_ROOT`
-			mount --make-private --bind . $ZDTM_ROOT || return 1
-		fi
-		construct_root $ZDTM_ROOT $test || return 1
-		export ZDTM_NEWNS=1
-		export ZDTM_PIDFILE=$TPID
-		cd $ZDTM_ROOT
-		rm -f $ZDTM_PIDFILE
-	fi
-
-	(
-		if [ -n "$FREEZE_CGROUP" ]; then
-			mkdir -p $FREEZE_CGROUP
-			echo 0 > $FREEZE_CGROUP/tasks || exit 1
-		else
-			export ZDTM_THREAD_BOMB=5
-		fi
-		# Here is no way to set FD_CLOEXEC on 3
-		exec 3>&-
-		make -C $tdir $tname.pid
-	)
-
-	if [ $? -ne 0 ]; then
-		echo ERROR: fail to start $test
-		return 1
-	fi
-
-	if [ -n "$FREEZE_CGROUP" ] && [ -n "$FREEZER_STATE" ]; then
-		echo $FREEZER_STATE > $FREEZE_CGROUP/freezer.state
-	fi
-
-	[ -z "$PIDNS" ] || cd -
-
-	PID=`cat "$TPID"` || return 1
-	if ! kill -0 $PID ; then
-		echo "Test failed to start"
-		return 1
-	fi
-
-	if [ -n "$ZDTM_ROOT" ]; then
-		mount --make-private "$ZDTM_ROOT"
-		umount -l "$ZDTM_ROOT"
-		mount --make-private --bind . $ZDTM_ROOT || return 1
-	fi
-}
-
-stop_test()
-{
-	kill $PID
-}
-
-save_fds()
-{
-	test -z "$PIDNS" && return 0
-	echo -n > $2 # Busybox doesn't have truncate
-	for p in `ls /proc/$1/root/proc/ | grep "^[0-9]*$"`; do
-		ls -l /proc/$1/root/proc/$p/fd |
-			sed 's/\(-> \(pipe\|socket\)\):.*/\1/' |
-			sed -e 's/\/.nfs[0-9a-zA-Z]*/.nfs-silly-rename/' |
-			sed 's/net:\[[0-9].*\]/net/' |
-			awk '{ print $9,$10,$11; }' | sort >> $2
-	done
-}
-
-save_maps()
-{
-	test -z "$PIDNS" && return 0
-	echo -n > $2 # Busybox doesn't have truncate
-	for p in `ls /proc/$1/root/proc/ | grep "^[0-9]*$"`; do
-		cat /proc/$1/root/proc/$p/maps | python maps.py >> $2
-	done
-}
-
-diff_maps()
-{
-	test -z "$PIDNS" && return 0
-	if ! diff -up $1 $2; then
-		echo ERROR: Sets of mappings differ:
-		echo $1
-		echo $2
-		return 1
-	fi
-}
-
-diff_fds()
-{
-	test -z "$PIDNS" && return 0
-	if ! diff -up $1 $2; then
-		echo ERROR: Sets of descriptors differ:
-		echo $1
-		echo $2
-		return 1
-	fi
-}
-
-run_test()
-{
-	local test_name=$1
-	local test=$1
-	local snappdir=
-	local ps_pid=
-
-	[ -n "$EXCLUDE_PATTERN" ] && echo $test | grep "$EXCLUDE_PATTERN" && return 0
-
-	if [ -n "$MAINSTREAM_KERNEL" ] && [ $COMPILE_ONLY -eq 0 ]; then
-		if echo $TEST_CR_KERNEL | grep -q ${test#ns/}; then
-			echo "Skip $test"
-			return 0
-		fi
-	fi
-
-	expr "$test" : 'ns/' > /dev/null && PIDNS=1 || PIDNS=""
-	test=${test#ns/}
-	expr "$test" : 'user/' > /dev/null && USERNS=1 || USERNS=""
-	test=${test#user/}
-	test=${ZP}/${test}
-
-	shift
-	local gen_args=$*
-	local tname=`basename $test`
-	local tdir=`dirname $test`
-	local rst_args=
-	DUMP_PATH=""
-
-	if [ -f "$test".checkskip ] && ! "$test".checkskip; then
-		echo "Skip $test"
-		return 0
-	fi
-
-	if [ $COMPILE_ONLY -eq 1 ]; then
-		echo "Compile $test"
-		make -C $tdir $tname && return 0 || return 1
-	fi
-
-	echo "Execute $test_name"
-
-	start_test $tdir $tname || return 1
-
-	if [ $START_ONLY -eq 1 ]; then
-		echo "Test is started"
-		return 0
-	fi
-
-	local ddump
-
-	if [ -f "${test}.opts" ]; then
-		gen_args="$gen_args $(cat "${test}.opts")"
-	fi
-
-	if [ -n "$PIDNS" ]; then
-		[ -z "$CR_IP_TOOL" ] && CR_IP_TOOL=ip
-		if ! $CR_IP_TOOL a help 2>&1 | grep -q showdump; then
-			cat >&2 <<EOF
-The util "ip" is incompatible. The good one can be cloned from
-git://git.criu.org/iproute2. It should be compiled and a path
-to ip is written in \$CR_IP_TOOL.
-EOF
-			exit 1
-		fi
-		gen_args="--root $ZDTM_ROOT --pidfile $TPID $gen_args"
-	fi
-
-	if [ $tname = "rtc" ]; then
-		gen_args="$gen_args -L `pwd`/$tdir/lib"
-	fi
-
-	if [ -n "$AUTO_DEDUP" ]; then
-		gen_args="$gen_args --auto-dedup"
-		ps_args="--auto-dedup"
-	fi
-
-	if [ -n "$RESTORE_SIBLING" ]; then
-		rst_args="$rst_args --restore-sibling"
-	fi
-
-	if echo $tname | fgrep -q 'irmap'; then
-		gen_args="$gen_args --force-irmap"
-	fi
-
-	# X will be substituted with an iteration number
-	ddump=`pwd`/dump/$test_name/$PID/X
-	for i in `seq $ITERATIONS`; do
-		local cpt_args=
-		local dump_only=
-		local dump_cmd="dump"
-		ddump=`dirname $ddump`/$i
-		DUMP_PATH=$ddump
-		echo Dump $PID
-		mkdir -p $ddump
-
-		[ -n "$DUMP_ONLY" ] && dump_only=1
-
-		if [ $PAGE_SERVER -eq 1 ]; then
-			$CRIU page-server -D $ddump -o page_server.log -v4 --port $PS_PORT $ps_args --daemon --pidfile $ddump/page-server.pid || return 1
-			ps_pid=`cat $ddump/page-server.pid`
-			ps -p "$ps_pid" -o cmd h | grep -q page-server || {
-				echo "Unable to determing PID of page-server"
-				return 1
-			}
-			cpt_args="$cpt_args --page-server --address 127.0.0.1 --port $PS_PORT"
-		fi
-
-		if [ -n "$SNAPSHOT" ]; then
-			cpt_args="$cpt_args --track-mem"
-			if [ "$i" -ne "$ITERATIONS" ]; then
-				cpt_args="$cpt_args -R"
-				dump_only=1
-				[ -n "$PRE_DUMP" ] && dump_cmd="pre-dump"
-			fi
-			[ -n "$snappdir" ] && cpt_args="$cpt_args --prev-images-dir=$snappdir"
-		fi
-		if [ -n "$FREEZE_CGROUP" ]; then
-			cpt_args="$cpt_args --freeze-cgroup $FREEZE_CGROUP --manage-cgroups"
-			rst_args="$rst_args --manage-cgroups"
-		fi
-
-		[ -n "$dump_only" ] && cpt_args="$cpt_args $POSTDUMP"
-
-		expr $tdir : ".*static$" > /dev/null && {
-			save_fds $PID  $ddump/dump.fd
-			save_maps $PID  $ddump/dump.maps
-		}
-		setsid $CRIU_CPT $dump_cmd -D $ddump -o dump.log -v4 -t $PID $gen_args $cpt_args
-		retcode=$?
-
-		cat $ddump/dump.log | grep Error
-
-		#
-		# Here we may have two cases: either checkpoint is failed
-		# with some error code, or checkpoint is complete but return
-		# code is non-zero because of post dump action.
-		if echo $TEST_EXPECTED_FAILURE | grep -q $tname; then
-			echo "Expect dump falure: $retcode"
-			if [ "$retcode" -eq 0 ]; then
-				return 1
-			fi
-			dump_only=1
-			retcode=32
-		fi
-		if [ "$retcode" -ne 0 ] && [[ "$retcode" -ne 32 || -z "$dump_only" ]]; then
-			if [ $BATCH_TEST -eq 0 ]; then
-				echo WARNING: $tname returned $retcode and left running for debug needs
-			else
-				echo WARNING: $tname failed and returned $retcode
-			fi
-			return 1
-		fi
-
-		if [ -n "$SNAPSHOT" ]; then
-			snappdir=../`basename $ddump`
-			[ "$i" -ne "$ITERATIONS" ] && continue
-		fi
-
-		if [ $PAGE_SERVER -eq 1 ]; then
-			while :; do
-				kill -0 $ps_pid > /dev/null 2>&1 || break
-				echo Waiting the process $ps_pid
-				sleep 0.1
-			done
-		fi
-
-		if [ -n "$dump_only" ]; then
-			expr $tdir : ".*static$" > /dev/null && {
-				save_fds $PID  $ddump/dump.fd.after
-				diff_fds $ddump/dump.fd $ddump/dump.fd.after || return 1
-
-				save_maps $PID  $ddump/dump.maps.after
-				diff_maps $ddump/dump.maps $ddump/dump.maps.after || return 1
-			}
-
-			if [ -n "$FREEZE_CGROUP" ] && [ -n "$FREEZER_STATE" ]; then
-				while :; do
-					echo freezer.state=`cat $FREEZE_CGROUP/freezer.state`
-					cat $FREEZE_CGROUP/freezer.state | grep -q $FREEZER_STATE && break;
-					sleep 0.1
-				done
-			fi
-			echo THAWED > $FREEZE_CGROUP/freezer.state
-
-			rm -f ./$tdir/link_remap.*
-		else
-			# Wait while tasks are dying, otherwise PIDs would be busy.
-			for i in $ddump/core-*.img; do
-				local pid
-
-				[ -n "$PIDNS" ] && break
-
-				pid=`expr "$i" : '.*/core-\([0-9]*\).img'`
-				while :; do
-					kill -0 $pid > /dev/null 2>&1 || break
-					echo Waiting the process $pid
-					sleep 0.1
-				done
-			done
-
-			if [ -x "${test}.hook" ]; then
-				echo "Executing pre-restore hook"
-				"${test}.hook" --pre-restore || return 2
-			fi
-
-			# Restore fails if --pidfile exists, so remove it.
-			rm -f $TPID || true
-
-			echo Restore
-			setsid $CRIU restore -D $ddump -o restore.log -v4 -d $gen_args $rst_args || return 2
-			cat $ddump/restore.log* | grep Error
-
-			[ -n "$PIDNS" ] && PID=`cat $TPID`
-
-			expr $tdir : ".*static$" > /dev/null && {
-				save_fds $PID  $ddump/restore.fd
-				save_maps $PID $ddump/restore.maps
-				diff_fds $ddump/dump.fd $ddump/restore.fd || return 2
-				diff_maps $ddump/dump.maps $ddump/restore.maps || return 2
-			}
-			[ "$CLEANUP" -ne 0 ] && rm -f --one-file-system $ddump/pages-*.img
-		fi
-
-	done
-
-	echo Check results $PID
-	if ! stop_test $tdir $tname; then
-		echo "Unable to stop $tname ($PID)"
-		return 2
-	fi
-
-	sltime=1
-	for i in `seq 200`; do
-		kill -0 $PID > /dev/null 2>&1 || break
-		echo Waiting...
-		sleep 0.$sltime
-		[ $sltime -lt 9 ] && sltime=$((sltime+1))
-	done
-
-	if [ -x "${test}.hook" ]; then
-		echo "Executing cleanup hook"
-		"${test}.hook" --clean || return 2
-	fi
-
-	if [ -n "$AUTO_DEDUP" ]; then
-		for img in $ddump/pages-*.img; do
-			img_name="${img##*/}"
-			size=$(du -sh -BK "$img" | grep -Eo '[0-9]+' | head -1)
-			echo "Size of $img_name is $size"
-			if [ "$size" -ne 0 ]; then
-				echo "Check: $test, Auto-dedup: image size is more than 0"
-				return 2
-			fi
-		done
-	fi
-
-	cat $test.out
-	[ $i -gt 50 ] && return 2 # waiting too long
-	cat $test.out | grep -q PASS || return 2
-	[ "$CLEANUP" -ne 0 ] && rm -rf --one-file-system `dirname $ddump`
-	echo "Test: $test, Result: PASS"
-	return 0
-}
-
-case_error()
-{
-	local test=${ZP}/${1#ns/}
-	local test_log=`pwd`/$test.out
-
-	echo "Test: $test, Result: FAIL"
-	ZDTM_FAILED=1
-
-(	exec >&2
-
-	zdtm_sep ERROR
-
-	echo "Test: $test, Namespace: $PIDNS"
-
-	if [ -n "$DUMP_PATH" ]; then
-		if [ -e "$DUMP_PATH/dump.log" ]; then
-			echo "Dump log   : $DUMP_PATH/dump.log"
-			zdtm_sep "grep Error" "-"
-			cat $DUMP_PATH/dump.log* | grep Error
-			if [ $VERBOSE -gt 0 ]; then
-				zdtm_sep "" "-"
-				tail -n 40 $DUMP_PATH/dump.log*
-			fi
-			zdtm_sep "END" "-"
-		fi
-		if [ -e "$DUMP_PATH/restore.log" ]; then
-			echo "Restore log: $DUMP_PATH/restore.log"
-			zdtm_sep "grep Error" "-"
-			cat $DUMP_PATH/restore.log* | grep Error
-			if [ $VERBOSE -gt 0 ]; then
-				zdtm_sep "" "-"
-				tail -n 40 $DUMP_PATH/restore.log*
-			fi
-			zdtm_sep "END" "-"
-		fi
-	fi
-	if [ -e "$test_log" ]; then
-		echo "Output file: $test_log"
-		zdtm_sep "" "-"
-		cat $test_log*
-		zdtm_sep "END" "-"
-	fi
-
-	[ -n "$HEAD" ] &&
-		echo "The initial HEAD was $HEAD"
-
-	zdtm_sep "ERROR OVER"
-)
-	if [ $BATCH_TEST -eq 0 ]; then
-		exit 1
-	else
-		# kill failed test
-		local tname=`basename $test`
-		killall -9 $tname > /dev/null 2>&1
-	fi
-}
-
-checkout()
-{
-	local commit=`git describe $1` &&
-	TMP_TREE=`dirname $CRIU`/criu.$commit &&
-	mkdir -p $TMP_TREE &&
-	git --git-dir `dirname $CRIU`/.git archive $commit . | tar -x -C $TMP_TREE &&
-	make -C $TMP_TREE -j 32
-}
-
-usage() {
-	cat << EOF
-This script is used for executing unit tests.
-Usage:
-zdtm.sh [OPTIONS]
-zdtm.sh [OPTIONS] [TEST PATTERN]
-Options:
-	-l : Show list of tests.
-	-d : Dump a test process and check that this process can continue working.
-	-i : Number of ITERATIONS of dump/restore
-	-p : Test page server
-	-C : Delete dump files if a test completed successfully
-	-b <commit> : Check backward compatibility
-	-x <PATTERN>: Exclude pattern
-	-t : mount tmpfs for dump files
-	-a <FILE>.tar.gz : save archive with dump files and logs
-	-g : Generate executables only
-	-S : Only start the test
-	-n : Batch test
-	-r : Run test with specified name directly without match or check
-	-f <name>: Run tests starting from @name
-	-v : Verbose mode
-	-P : Make pre-dump instead of dump on all iterations except the last one
-	-s : Make iterative snapshots. Only the last one will be checked.
-	--auto-dedup : Make auto-dedup on restore. Check sizes of pages imges, it must be zero.
-	--ct : re-execute $0 in a container
-EOF
-}
-
-cd `dirname $0` || exit 1
-
-while :; do
-	case $1 in
-	  -d)
-		DUMP_ONLY=1
-		shift
-		;;
-	  -i)
-		shift
-		ITERATIONS=$1
-		shift
-		;;
-	  -b)
-		shift
-		checkout $1 || exit 1
-		CRIU_CPT=$TMP_TREE/criu
-		shift
-		;;
-	  -c)
-		shift
-		checkout $1 || exit 1
-		shift
-		$TMP_TREE/test/zdtm.sh "$@"
-		exit
-		;;
-	  -p)
-		shift
-		PAGE_SERVER=1
-		;;
-	  -C)
-		shift
-		CLEANUP=1
-		;;
-	  -x)
-		shift
-		if [ -z "$EXCLUDE_PATTERN" ]; then
-			EXCLUDE_PATTERN=$1
-		else
-			EXCLUDE_PATTERN="${EXCLUDE_PATTERN}\|$1"
-		fi
-		shift
-		;;
-	  -t)
-		shift
-		TMPFS_DUMP=dump
-		[ -d dump ] || mkdir -p $TMPFS_DUMP
-		mount -t tmpfs none $TMPFS_DUMP || exit 1
-		;;
-	  -a)
-		shift
-		DUMP_ARCHIVE=$1
-		shift
-		;;
-	  -s)
-		if [ -n "$PRE_DUMP" ]; then
-			echo "-P and -s can not be used together"
-			exit 1
-		fi
-		SNAPSHOT=1
-		shift
-		;;
-	  -P)
-		if [ -n "$SNAPSHOT" ]; then
-			echo "-P and -s can not be used together"
-			exit 1
-		fi
-		PRE_DUMP=1
-		SNAPSHOT=1
-		shift
-		;;
-	  --auto-dedup)
-		AUTO_DEDUP=1
-		shift
-		;;
-	  --freeze-cgroup)
-		shift
-		FREEZE_CGROUP=$1
-		shift
-		;;
-	  --frozen)
-		FREEZER_STATE=FROZEN
-		shift
-		;;
-	  -g)
-		COMPILE_ONLY=1
-		shift
-		;;
-	  -S)
-	  	START_ONLY=1
-		shift
-		;;
-	  -f)
-	  	shift
-	  	START_FROM="^${1}$"
-		shift
-		;;
-	  -n)
-		BATCH_TEST=1
-		shift
-		;;
-	  -r)
-		SPECIFIED_NAME_USED=1
-		shift
-		;;
-	  -l)
-		generate_test_list
-		echo "$TEST_LIST" >&3
-		exit 0
-		;;
-	  -v)
-		VERBOSE=1
-		shift
-		;;
-	  -h)
-		usage
-		exit 0
-		;;
-	  --ct)
-		[ -z "$ZDTM_SH_IN_CT" ] && {
-			export ZDTM_SH_IN_CT=1
-			shift
-			# pidns is used to avoid conflicts
-			# mntns is used to mount /proc
-			# net is used to avoid conflicts of parasite sockets
-			./zdtm_ct ./zdtm.sh "$@"
-			exit
-		}
-		shift
-		;;
-	  --restore-sibling)
-		RESTORE_SIBLING=1
-		shift
-		;;
-	  -*)
-		echo "Unrecognized option $1, aborting!" 1>&2
-		usage
-		exit 1
-		;;
-	  *)
-		break
-		;;
-	esac
-done
-
-if [ $# -gt 1 ]; then
-	echo "Too many arguments: $*" 1>&2
-	exit 1
-fi
-
-if [ $COMPILE_ONLY -eq 0 ]; then
-	check_criu || exit 1
-fi
-
-if [ $SPECIFIED_NAME_USED -eq 1 ]; then
-	if [ $# -eq 0 ]; then
-		echo "test name should be provided"
-		exit 1
-	fi
-	$CRIU check -v0 --feature "mnt_id" || export ZDTM_NOSUBNS=1
-	# don't run file_locks* tests simultaneously
-	(
-		expr $1 : ".*file_locks" > /dev/null && flock 10
-		run_test $1 10<&-
-	) 10<zdtm.sh || case_error $1
-else
-	if [ $# -eq 0 ]; then
-		pattern='.*'
-	else
-		pattern=$1
-	fi
-
-	generate_test_list
-	for t in $(echo "$TEST_LIST" | sed -n -e "/${START_FROM////\/}/,\$p" | grep -x "$pattern"); do
-		run_test $t || case_error $t
-	done
-
-	if [ $COMPILE_ONLY -eq 0 ]; then
-		if [ -n "$ZDTM_FAILED" ]; then
-			echo ZDTM tests FAIL.
-		else
-			echo ZDTM tests PASS.
-		fi
-	fi
-fi
-
-[ -n "$TMP_TREE" ] && rm -rf --one-file-system $TMP_TREE
-[ -n "$ZDTM_FAILED" ] && exit 1 || exit 0
-- 
2.5.0



More information about the CRIU mailing list