selftests: forwarding: Convert log_test() to recognize RET values
authorPetr Machata <petrm@nvidia.com>
Tue, 26 Mar 2024 16:54:37 +0000 (17:54 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 29 Mar 2024 01:03:43 +0000 (18:03 -0700)
In a previous patch, the interpretation of RET value was changed to mean
the kselftest framework constant with the test outcome: $ksft_pass,
$ksft_xfail, etc.

Update log_test() to recognize the various possible RET values.

Then have EXIT_STATUS track the RET value of the current test. This differs
subtly from the way RET tracks the value: while for RET we want to
recognize XFAIL as a separate status, for purposes of exit code, we want to
to conflate XFAIL and PASS, because they both communicate non-failure. Thus
add a new helper, ksft_exit_status_merge().

With this log_test_skip() and log_test_xfail() can be reexpressed as thin
wrappers around log_test.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Link: https://lore.kernel.org/r/e5f807cb5476ab795fd14ac74da53a731a9fc432.1711464583.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/forwarding/lib.sh
tools/testing/selftests/net/lib.sh

index ee8153651b381d7a03b74090995ac051c0a67730..370fc377249b42f28b4827728a55666d1d1673b4 100644 (file)
@@ -438,6 +438,62 @@ check_err_fail()
        fi
 }
 
+log_test_result()
+{
+       local test_name=$1; shift
+       local opt_str=$1; shift
+       local result=$1; shift
+       local retmsg=$1; shift
+
+       printf "TEST: %-60s  [%s]\n" "$test_name $opt_str" "$result"
+       if [[ $retmsg ]]; then
+               printf "\t%s\n" "$retmsg"
+       fi
+}
+
+pause_on_fail()
+{
+       if [[ $PAUSE_ON_FAIL == yes ]]; then
+               echo "Hit enter to continue, 'q' to quit"
+               read a
+               [[ $a == q ]] && exit 1
+       fi
+}
+
+handle_test_result_pass()
+{
+       local test_name=$1; shift
+       local opt_str=$1; shift
+
+       log_test_result "$test_name" "$opt_str" " OK "
+}
+
+handle_test_result_fail()
+{
+       local test_name=$1; shift
+       local opt_str=$1; shift
+
+       log_test_result "$test_name" "$opt_str" FAIL "$retmsg"
+       pause_on_fail
+}
+
+handle_test_result_xfail()
+{
+       local test_name=$1; shift
+       local opt_str=$1; shift
+
+       log_test_result "$test_name" "$opt_str" XFAIL "$retmsg"
+       pause_on_fail
+}
+
+handle_test_result_skip()
+{
+       local test_name=$1; shift
+       local opt_str=$1; shift
+
+       log_test_result "$test_name" "$opt_str" SKIP "$retmsg"
+}
+
 log_test()
 {
        local test_name=$1
@@ -447,40 +503,28 @@ log_test()
                opt_str="($opt_str)"
        fi
 
-       if [[ $RET -ne 0 ]]; then
-               EXIT_STATUS=1
-               printf "TEST: %-60s  [FAIL]\n" "$test_name $opt_str"
-               if [[ ! -z "$retmsg" ]]; then
-                       printf "\t%s\n" "$retmsg"
-               fi
-               if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-                       echo "Hit enter to continue, 'q' to quit"
-                       read a
-                       [ "$a" = "q" ] && exit 1
-               fi
-               return 1
+       if ((RET == ksft_pass)); then
+               handle_test_result_pass "$test_name" "$opt_str"
+       elif ((RET == ksft_xfail)); then
+               handle_test_result_xfail "$test_name" "$opt_str"
+       elif ((RET == ksft_skip)); then
+               handle_test_result_skip "$test_name" "$opt_str"
+       else
+               handle_test_result_fail "$test_name" "$opt_str"
        fi
 
-       printf "TEST: %-60s  [ OK ]\n" "$test_name $opt_str"
-       return 0
+       EXIT_STATUS=$(ksft_exit_status_merge $EXIT_STATUS $RET)
+       return $RET
 }
 
 log_test_skip()
 {
-       local test_name=$1
-       local opt_str=$2
-
-       printf "TEST: %-60s  [SKIP]\n" "$test_name $opt_str"
-       return 0
+       RET=$ksft_skip retmsg= log_test "$@"
 }
 
 log_test_xfail()
 {
-       local test_name=$1
-       local opt_str=$2
-
-       printf "TEST: %-60s  [XFAIL]\n" "$test_name $opt_str"
-       return 0
+       RET=$ksft_xfail retmsg= log_test "$@"
 }
 
 log_info()
index 88f6133ca31990291fdce0894a30ec24b33d9dc7..b7f7b8695165b420335ee3e866d985e160a6ad5e 100644 (file)
@@ -49,6 +49,15 @@ ksft_status_merge()
                $ksft_pass $ksft_xfail $ksft_skip $ksft_fail
 }
 
+ksft_exit_status_merge()
+{
+       local a=$1; shift
+       local b=$1; shift
+
+       __ksft_status_merge "$a" "$b" \
+               $ksft_xfail $ksft_pass $ksft_skip $ksft_fail
+}
+
 busywait()
 {
        local timeout=$1; shift