[CRIU] [PATCH 2/4] fi: Zdtm preparations for fault injection
Pavel Emelyanov
xemul at parallels.com
Thu Sep 24 08:08:00 PDT 2015
Individual tests can be added to the test list with the
'finj/' prefix. When seeng such a line zdtm will
1. start the test and call criu dump and restore asking
those to fail at the point specified in the 2nd line
of the fault file (the 1st one is #!/bin/bash, see
below)
2. Upon criu dump/restore failure the .fault file will
be called as script. It is then to check whether the
artificially aborted criu resulted in correct state
or not. The test resul is then the result of the
.fault file inspection.
Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
---
test/zdtm.sh | 46 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/test/zdtm.sh b/test/zdtm.sh
index f22f3ca..b0cf868 100755
--- a/test/zdtm.sh
+++ b/test/zdtm.sh
@@ -678,6 +678,8 @@ run_test()
fi
fi
+ expr "$test" : 'finj/' > /dev/null && FINJ=1 || FINJ=""
+ test=${test#finj/}
expr "$test" : 'ns/' > /dev/null && PIDNS=1 || PIDNS=""
test=${test#ns/}
expr "$test" : 'user/' > /dev/null && USERNS=1 || USERNS=""
@@ -691,6 +693,17 @@ run_test()
local rst_args=
DUMP_PATH=""
+ if [ $FINJ -eq 1 ] ; then
+ if [ ! -f "$test".fault ]; then
+ echo "Test $test wants fault injection but cannot"
+ return 0
+ fi
+
+ export CRIU_FAULT=$(cat "$test".fault | sed -n -e '2s/^#fault://p')
+ else
+ unset CRIU_FAULT
+ fi
+
if [ -f "$test".checkskip ] && ! "$test".checkskip; then
echo "Skip $test"
return 0
@@ -802,6 +815,22 @@ EOF
return 0
fi
+ if [ $FINJ -eq 1 ]; then
+ echo "FAULT: $tname dump failed, checking ..."
+ "$test".fault "dump"
+ fetcode=$?
+
+ stop_test $tdir $tname
+
+ if [ "$fetcode" -ne 0 ]; then
+ echo "FAULT: $tname dump failed unexpectedly with $retcode/$fetcode"
+ return 1
+ else
+ echo "FAULT: $tname dump failed as expected with $retcode"
+ return 0
+ fi
+ fi
+
if [ $BATCH_TEST -eq 0 ]; then
echo WARNING: $tname returned $retcode and left running for debug needs
else
@@ -867,7 +894,24 @@ EOF
rm -f $TPID || true
echo Restore
- setsid $CRIU restore -D $ddump -o restore.log -v4 -d $gen_args $rst_args || return 2
+ setsid $CRIU restore -D $ddump -o restore.log -v4 -d $gen_args $rst_args
+ retcode=$?
+ if [ $retcode -ne 0 ]; then
+ [ $FINJ -eq 0 ] && return 2
+
+ echo "FAULT: $tname restore failed, checking ..."
+ "$test".fault "restore"
+ fetcode=$?
+
+ if [ "$fetcode" -ne 0 ]; then
+ echo "FAULT: $tname restore failed unexpectedly with $retcode/$fetcode"
+ return 2
+ else
+ echo "FAULT: $tname restore failed as expected with $retcode"
+ return 0
+ fi
+ fi
+
cat $ddump/restore.log* | grep Error
[ -n "$PIDNS" ] && PID=`cat $TPID`
--
1.9.3
More information about the CRIU
mailing list