Whamcloud - gitweb
LU-1779 tests: fix run_one_logged() to log SKIP status
authorYu Jian <yujian@whamcloud.com>
Sat, 5 Jan 2013 07:28:02 +0000 (15:28 +0800)
committerJohann Lombardi <johann.lombardi@intel.com>
Mon, 14 Jan 2013 11:44:00 +0000 (06:44 -0500)
In the current test framework, only those tests which are in the
$ALWAYS_EXCEPT list are logged with SKIP status, other skipped
tests are all logged with PASS status.

This patch fixes the above issue by setting the SKIP status in
pass() and logging the status in run_one_logged().

Test-Parameters: clientarch=x86_64 serverarch=x86_64 testlist=mmp
Signed-off-by: Yu Jian <yujian@whamcloud.com>
Change-Id: I766cf6d2bb984b6097b20d2c089925890b86f9b1
Reviewed-on: http://review.whamcloud.com/4955
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Minh Diep <minh.diep@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
lustre/tests/test-framework.sh

index 267e33b..6071cf4 100644 (file)
@@ -2942,10 +2942,19 @@ skip_env () {
     $FAIL_ON_SKIP_ENV && error false $@ || skip $@
 }
 
-skip () {
-       log " SKIP: ${TESTSUITE} ${TESTNAME} $@"
-       [ "$TESTSUITELOG" ] && \
-               echo "${TESTSUITE}: SKIP: $TESTNAME $@" >> $TESTSUITELOG || true
+skip() {
+    echo
+    log " SKIP: $TESTSUITE $TESTNAME $@"
+
+    if [[ -n "$ALWAYS_SKIPPED" ]]; then
+        skip_logged $TESTNAME "$@"
+    else
+        mkdir -p $LOGDIR
+        echo "$@" > $LOGDIR/skip
+    fi
+
+    [[ -n "$TESTSUITELOG" ]] &&
+        echo "$TESTSUITE: SKIP: $TESTNAME $@" >> $TESTSUITELOG || true
 }
 
 build_test_filter() {
@@ -2959,9 +2968,12 @@ build_test_filter() {
         log "excepting tests: `echo $EXCEPT $ALWAYS_EXCEPT`"
     [ "$EXCEPT_SLOW" ] && \
         log "skipping tests SLOW=no: `echo $EXCEPT_SLOW`"
-    for E in $EXCEPT $ALWAYS_EXCEPT; do
+    for E in $EXCEPT; do
         eval EXCEPT_${E}=true
     done
+    for E in $ALWAYS_EXCEPT; do
+        eval EXCEPT_ALWAYS_${E}=true
+    done
     for E in $EXCEPT_SLOW; do
         eval EXCEPT_SLOW_${E}=true
     done
@@ -2980,6 +2992,8 @@ basetest() {
 
 # print a newline if the last test was skipped
 export LAST_SKIPPED=
+export ALWAYS_SKIPPED=
+
 run_test() {
     assert_DIR
 
@@ -3001,32 +3015,42 @@ run_test() {
         echo -n "."
         return 0
     fi
+
+    LAST_SKIPPED="y"
+    ALWAYS_SKIPPED="y"
     testname=EXCEPT_$1
     if [ ${!testname}x != x ]; then
-        LAST_SKIPPED="y"
         TESTNAME=test_$1 skip "skipping excluded test $1"
         return 0
     fi
     testname=EXCEPT_$base
     if [ ${!testname}x != x ]; then
-        LAST_SKIPPED="y"
         TESTNAME=test_$1 skip "skipping excluded test $1 (base $base)"
         return 0
     fi
+    testname=EXCEPT_ALWAYS_$1
+    if [ ${!testname}x != x ]; then
+        TESTNAME=test_$1 skip "skipping ALWAYS excluded test $1"
+        return 0
+    fi
+    testname=EXCEPT_ALWAYS_$base
+    if [ ${!testname}x != x ]; then
+        TESTNAME=test_$1 skip "skipping ALWAYS excluded test $1 (base $base)"
+        return 0
+    fi
     testname=EXCEPT_SLOW_$1
     if [ ${!testname}x != x ]; then
-        LAST_SKIPPED="y"
         TESTNAME=test_$1 skip "skipping SLOW test $1"
         return 0
     fi
     testname=EXCEPT_SLOW_$base
     if [ ${!testname}x != x ]; then
-        LAST_SKIPPED="y"
         TESTNAME=test_$1 skip "skipping SLOW test $1 (base $base)"
         return 0
     fi
 
     LAST_SKIPPED=
+    ALWAYS_SKIPPED=
     run_one_logged $1 "$2"
 
     return $?
@@ -3073,13 +3097,15 @@ complete () {
 }
 
 pass() {
-    # Set TEST_STATUS here; will be used for logging the result
-    if [ -f $LOGDIR/err ]; then
+    # Set TEST_STATUS here. It will be used for logging the result.
+    TEST_STATUS="PASS"
+
+    if [[ -f $LOGDIR/err ]]; then
         TEST_STATUS="FAIL"
-    else
-        TEST_STATUS="PASS"
+    elif [[ -f $LOGDIR/skip ]]; then
+        TEST_STATUS="SKIP"
     fi
-    echo $TEST_STATUS " " $@
+    echo "$TEST_STATUS $@" 2>&1 | tee -a $TESTSUITELOG
 }
 
 check_mds() {
@@ -3123,9 +3149,11 @@ run_one_logged() {
     local name=${TESTSUITE}.test_${1}.test_log.$(hostname -s).log
     local test_log=$LOGDIR/$name
     rm -rf $LOGDIR/err
+    rm -rf $LOGDIR/skip
     local SAVE_UMASK=`umask`
     umask 0022
 
+    echo
     log_sub_test_begin test_${1}
     (run_one $1 "$2") 2>&1 | tee $test_log
     local RC=${PIPESTATUS[0]}
@@ -3134,8 +3162,13 @@ run_one_logged() {
         echo "test_$1 returned $RC" | tee $LOGDIR/err
 
     duration=$((`date +%s` - $BEFORE))
-    pass "(${duration}s)"
-    [ -f $LOGDIR/err ] && TEST_ERROR=$(cat $LOGDIR/err)
+    pass "$1" "(${duration}s)"
+
+    if [[ -f $LOGDIR/err ]]; then
+        TEST_ERROR=$(cat $LOGDIR/err)
+    elif [[ -f $LOGDIR/skip ]]; then
+        TEST_ERROR=$(cat $LOGDIR/skip)
+    fi
     log_sub_test_end $TEST_STATUS $duration "$RC" "$TEST_ERROR"
 
     if [ -f $LOGDIR/err ]; then
@@ -3147,6 +3180,16 @@ run_one_logged() {
     return 0
 }
 
+#
+# Print information of skipped tests to result.yml
+#
+skip_logged() {
+    log_sub_test_begin $1
+    shift
+    log_sub_test_end "SKIP" "0" "0" "$@"
+}
+
+
 canonical_path() {
     (cd `dirname $1`; echo $PWD/`basename $1`)
 }