[CRIU] [PATCH cr 13/13] zdtm.sh: execute all test in NEW_PIDNS in
addition (v2)
Andrey Vagin
avagin at openvz.org
Tue Jun 19 07:53:17 EDT 2012
Now the most part of test cases may be executed in pidns.
By default all test cases are executed in current pidns, then
they are executed in new pidns again.
v2: remove the hard coded path to test_init
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
test/zdtm.sh | 91 ++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 70 insertions(+), 21 deletions(-)
diff --git a/test/zdtm.sh b/test/zdtm.sh
index eb84a26..2f5cd3e 100644
--- a/test/zdtm.sh
+++ b/test/zdtm.sh
@@ -25,8 +25,6 @@ static/xids00
streaming/pipe_loop00
streaming/pipe_shared00
transition/file_read
-transition/fork
-static/zombie00
static/sockets00
static/sockets_spair
static/sockets_dgram
@@ -40,12 +38,20 @@ static/socket_udp
static/socket6_udp
static/socket_udplite
static/selfexe00
-static/file_fown
static/unlink_fstat00
static/unlink_fstat02
static/eventfs00
static/inotify00
"
+# Duplicate list with pidns/ prefix
+TEST_LIST=$TEST_LIST$(echo $TEST_LIST | tr ' ' '\n' | sed 's#^#pidns/#')
+
+# These ones are not in pidns
+TEST_LIST=$TEST_LIST "
+static/zombie00
+transition/fork
+static/file_fown
+"
UTS_TEST_LIST="
static/utsname
@@ -60,16 +66,58 @@ transition/ipc
"
CRTOOLS=`pwd`/`dirname $0`/../crtools
+TINIT=`pwd`/`dirname $0`/zdtm/lib/test_init
test -x $CRTOOLS || exit 1
+
ARGS=""
+PID=""
+PIDNS=""
+
+start_test()
+{
+ local tdir=$1
+ local tname=$2
+
+ killall -9 $tname &> /dev/null
+ make -C $tdir cleanout
+
+ if [ -z "$PIDNS" ]; then
+ make -C $tdir $tname.pid
+ PID=`cat $test.pid` || return 1
+ else
+ killall -9 test_init
+ $TINIT $tdir $tname || {
+ echo ERROR: fail to start $tdir/$tname
+ return 1;
+ }
+
+ PID=`ps h -C test_init -o pid`
+ PID=$((PID))
+ fi
+}
+
+stop_test()
+{
+ local tdir=$1
+ local tname=$2
+
+ if [ -z "$PIDNS" ]; then
+ make -C $tdir $tname.out
+ else
+ killall test_init
+ fi
+}
+
save_fds()
{
+ test -n "$PIDNS" && return 0
ls -l /proc/$1/fd | sed 's/\(-> \(pipe\|socket\)\):.*/\1/' | awk '{ print $9,$10,$11; }' > $2
}
diff_fds()
{
+ test -n "$PIDNS" && return 0
if ! diff -up $1 $2; then
echo ERROR: Sets of descriptors are differ:
echo $1
@@ -80,7 +128,11 @@ diff_fds()
run_test()
{
- local test=$ZP/$1
+ local test=$1
+
+ expr "$test" : 'pidns/' && PIDNS=1 || PIDNS=""
+ test=${ZP}/${test#pidns/}
+
shift
local args=$*
local tname=`basename $test`
@@ -89,24 +141,21 @@ run_test()
echo "Execute $test"
- killall -9 $tname &> /dev/null
- make -C $tdir cleanout $tname.pid
-
- local pid ddump
- pid=`cat $test.pid` || return 1
+ start_test $tdir $tname || return 1
- kill -s 0 "$pid" || {
- echo "Get a wrong pid '$pid'"
+ local ddump
+ kill -s 0 "$PID" || {
+ echo "Get a wrong pid '$PID'"
return 1
}
- ddump=dump/$tname/$pid
+ ddump=dump/$tname/$PID
DUMP_PATH=`pwd`/$ddump
- echo Dump $pid
+ echo Dump $PID
mkdir -p $ddump
- save_fds $pid $ddump/dump.fd
- setsid $CRTOOLS dump -D $ddump -o dump.log -v 4 -t $pid $args $ARGS || {
+ save_fds $PID $ddump/dump.fd
+ setsid $CRTOOLS dump -D $ddump -o dump.log -v 4 -t $PID $args $ARGS || {
echo WARNING: process $tname is left running for your debugging needs
return 1
}
@@ -121,15 +170,15 @@ run_test()
sleep 1
done
- echo Restore $pid
- setsid $CRTOOLS restore --log-pid -D $ddump -o restore.log -v 4 -d -t $pid $args || return 2
+ echo Restore $PID
+ setsid $CRTOOLS restore --log-pid -D $ddump -o restore.log -v 4 -d -t $PID $args || return 2
- save_fds $pid $ddump/restore.fd
+ save_fds $PID $ddump/restore.fd
diff_fds $ddump/dump.fd $ddump/restore.fd || return 2
fi
- echo Check results $pid
- make -C $tdir $tname.out
+ echo Check results $PID
+ stop_test $tdir $tname
for i in `seq 50`; do
test -f $test.out && break
echo Waiting...
@@ -141,7 +190,7 @@ run_test()
case_error()
{
- local test=$ZP/$1
+ test=${ZP}/${1#pidns/}
local test_log=`pwd`/$test.out
echo "Test: $test"
--
1.7.1
More information about the CRIU
mailing list