From 795d64574da4086888532175c55898e9a3bd7148 Mon Sep 17 00:00:00 2001 From: Stanislav Kinsbursky Date: Mon, 30 Jan 2012 16:28:45 +0300 Subject: [PATCH 1/3] zdtm: print test dir, dump and restore path (if any) in case of error v7: cosmetic chages due to public pressure v6: silly "/" miss fixed v5: it finally workks as expected v4: fixed wrong error print after successfull run on all zdtm tests v3: spaces removed v2: print test output file path (if present) Print dump and restore file in case of running all tests suit. Signed-off-by: Stanislav Kinsbursky Signed-off-by: Andrey Vagin --- test/zdtm.sh | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/test/zdtm.sh b/test/zdtm.sh index 5b6f1aed5..44caae2d0 100644 --- a/test/zdtm.sh +++ b/test/zdtm.sh @@ -1,6 +1,6 @@ #!/bin/bash -ZP="zdtm/live/" +ZP="zdtm/live" TEST_LIST="\ $ZP/static/pipe00 @@ -47,7 +47,7 @@ run_test() make -C $tdir cleanout $tname.pid pid=`cat $test.pid` ddump="dump/$tname/$pid" - dump_path=`pwd`"/"$ddump + DUMP_PATH=`pwd`"/"$ddump mkdir -p $ddump ls -l /proc/$pid/fd/ setsid $CRTOOLS dump -D $ddump -o dump.log -t $pid $2 || return 1 @@ -68,34 +68,42 @@ run_test() cat $test.out | grep PASS || return 2 } +case_error() +{ + test=$1 + test_log="`pwd`/$test.out" + + echo "Test: $test" + echo "====================== ERROR ======================" + + [ -e "$DUMP_PATH/dump.log" ] && echo "Dump log : $DUMP_PATH/dump.log" + [ -e "$DUMP_PATH/restore.log" ] && echo "Restore log: $DUMP_PATH/restore.log" + [ -e "$test_log" ] && echo "Output file: $test_log" + exit 1 +} + cd `dirname $0` || exit 1 if [ $# -eq 0 ]; then for t in $TEST_LIST; do - run_test $t "" || exit 1 + run_test $t "" || case_error $t done for t in $UTS_TEST_LIST; do - run_test $t "-n uts" || exit 1 + run_test $t "-n uts" || case_error $t done for t in $IPC_TEST_LIST; do - run_test $t "-n ipc" || exit 1 + run_test $t "-n ipc" || case_error $t done elif [ "$1" == "-l" ]; then echo $TEST_LIST | sed -e "s#$ZP/##g" -e 's/ /\n/g' echo $UTS_TEST_LIST | sed -e "s#$ZP/##g" -e 's/ /\n/g' + echo $IPC_TEST_LIST | sed -e "s#$ZP/##g" -e 's/ /\n/g' else if echo "$UTS_TEST_LIST" | fgrep -q "$1" ; then - run_test "$ZP/$1" "-n uts" && exit 0 + run_test "$ZP/$1" "-n uts" || case_error "$ZP/$1" elif echo "$IPC_TEST_LIST" | fgrep -q "$1" ; then - run_test "$ZP/$1" "-n ipc" && exit 0 + run_test "$ZP/$1" "-n ipc" || case_error "$ZP/$1" else - run_test "$ZP/$1" && exit 0 - fi - result=$? - echo "====================== ERROR ======================" - if [ $result == 1 ]; then - echo "Dump log: "$dump_path"/dump.log" - else - echo "Restore log: "$dump_path"/restore.log" + run_test "$ZP/$1" || case_error "$ZP/$1" fi fi From 0981f36179aac4c7319077d6a576e45a55e39fb0 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Tue, 31 Jan 2012 15:11:40 +0400 Subject: [PATCH 2/3] zdtm.sh: clean up --- test/zdtm.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/zdtm.sh b/test/zdtm.sh index 44caae2d0..a4ba86865 100644 --- a/test/zdtm.sh +++ b/test/zdtm.sh @@ -45,19 +45,24 @@ run_test() killall -9 $tname make -C $tdir cleanout $tname.pid + pid=`cat $test.pid` ddump="dump/$tname/$pid" DUMP_PATH=`pwd`"/"$ddump + + echo Dump $pid mkdir -p $ddump - ls -l /proc/$pid/fd/ setsid $CRTOOLS dump -D $ddump -o dump.log -t $pid $2 || return 1 while :; do killall -9 $tname &> /dev/null || break; echo Waiting... sleep 1 done + + echo Restore $pid setsid $CRTOOLS restore -D $ddump -o restore.log -d -t $pid $2 || return 2 - ls -l /proc/$pid/fd/ + + echo Check results $pid make -C $tdir $tname.out for i in `seq 50`; do test -f $test.out && break; From dd73699b374031077f64b3b708fa218bd14b5382 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Wed, 1 Feb 2012 16:44:57 +0400 Subject: [PATCH 3/3] zdtm: set SA_RESTART everywhere --- test/zdtm/lib/test.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/zdtm/lib/test.c b/test/zdtm/lib/test.c index 980bafbfc..4490f02b5 100644 --- a/test/zdtm/lib/test.c +++ b/test/zdtm/lib/test.c @@ -167,7 +167,10 @@ struct zdtm_clone_arg { static int do_test_fn(void *_arg) { struct zdtm_clone_arg *ca = _arg; - struct sigaction sa; + struct sigaction sa = { + .sa_handler = SIG_DFL, + .sa_flags = SA_RESTART, + }; /* record the test pid to remember the ownership of the pidfile */ master_pid = getpid(); @@ -175,7 +178,6 @@ static int do_test_fn(void *_arg) fclose(ca->pidf); sigemptyset(&sa.sa_mask); - sa.sa_handler = SIG_DFL; if (sigaction(SIGCHLD, &sa, NULL)) { err("Can't reset SIGCHLD handler: %m\n"); exit(1); @@ -200,6 +202,7 @@ void test_init_ns(int argc, char **argv, unsigned long clone_flags, void (*fn)(v static FILE *pidf; struct sigaction sa = { .sa_handler = sig_hand, + .sa_flags = SA_RESTART, }; struct zdtm_clone_arg ca; void *stack;