Patch "selftests: forwarding: Have RET track kselftest framework constants" has been added to the 6.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    selftests: forwarding: Have RET track kselftest framework constants

to the 6.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     selftests-forwarding-have-ret-track-kselftest-framew.patch
and it can be found in the queue-6.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 217adc45fd16d1cc6ef3997d033e2423cd0f073a
Author: Petr Machata <petrm@xxxxxxxxxx>
Date:   Tue Mar 26 17:54:36 2024 +0100

    selftests: forwarding: Have RET track kselftest framework constants
    
    [ Upstream commit 596c8819cb78c047acc0cab03a863a9983a3cc62 ]
    
    The variable RET keeps track of whether the test under execution has so far
    failed or not. Currently it works in binary fashion: zero means everything
    is fine, non-zero means something failed. log_test() then uses the value to
    given a human-readable message.
    
    In order to allow log_test() to report skips and xfails, the semantics of
    RET need to be more fine-grained. Therefore have RET value be one of
    kselftest framework constants: $ksft_fail, $ksft_xfail, etc.
    
    The current logic in check_err() is such that first non-zero value of RET
    trumps all those that follow. But that is not right when RET has more
    fine-grained value semantics. Different outcomes have different weights.
    
    The results of PASS and XFAIL are mostly the same: they both communicate a
    test that did not go wrong. SKIP communicates lack of tooling, which the
    user should go and try to fix, and as such should not be overridden by the
    passes. So far, the higher-numbered statuses can be considered weightier.
    But FAIL should be the weightiest.
    
    Add a helper, ksft_status_merge(), which merges two statuses in a way that
    respects the above conditions. Express it in a generic manner, because exit
    status merge is subtly different, and we want to reuse the same logic.
    
    Use the new helper when setting RET in check_err().
    
    Re-express check_fail() in terms of check_err() to avoid duplication.
    
    Signed-off-by: Petr Machata <petrm@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/7dfff51cc925c7a3ac879b9050a0d6a327c8d21f.1711464583.git.petrm@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Stable-dep-of: ea63ac142925 ("selftests/net: use tc rule to filter the na packet")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/testing/selftests/net/forwarding/lib.sh b/tools/testing/selftests/net/forwarding/lib.sh
index 9042fe92ca465..258d2082aa991 100644
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -358,14 +358,24 @@ EXIT_STATUS=0
 # Per-test return value. Clear at the beginning of each test.
 RET=0
 
+ret_set_ksft_status()
+{
+	local ksft_status=$1; shift
+	local msg=$1; shift
+
+	RET=$(ksft_status_merge $RET $ksft_status)
+	if (( $? )); then
+		retmsg=$msg
+	fi
+}
+
 check_err()
 {
 	local err=$1
 	local msg=$2
 
-	if [[ $RET -eq 0 && $err -ne 0 ]]; then
-		RET=$err
-		retmsg=$msg
+	if ((err)); then
+		ret_set_ksft_status $ksft_fail "$msg"
 	fi
 }
 
@@ -374,10 +384,7 @@ check_fail()
 	local err=$1
 	local msg=$2
 
-	if [[ $RET -eq 0 && $err -eq 0 ]]; then
-		RET=1
-		retmsg=$msg
-	fi
+	check_err $((!err)) "$msg"
 }
 
 check_err_fail()
diff --git a/tools/testing/selftests/net/lib.sh b/tools/testing/selftests/net/lib.sh
index 56a9454b7ba35..b0bbde83b8461 100644
--- a/tools/testing/selftests/net/lib.sh
+++ b/tools/testing/selftests/net/lib.sh
@@ -14,6 +14,36 @@ NS_LIST=""
 
 ##############################################################################
 # Helpers
+
+__ksft_status_merge()
+{
+	local a=$1; shift
+	local b=$1; shift
+	local -A weights
+	local weight=0
+
+	for i in "$@"; do
+		weights[$i]=$((weight++))
+	done
+
+	if [[ ${weights[$a]} > ${weights[$b]} ]]; then
+		echo "$a"
+		return 0
+	else
+		echo "$b"
+		return 1
+	fi
+}
+
+ksft_status_merge()
+{
+	local a=$1; shift
+	local b=$1; shift
+
+	__ksft_status_merge "$a" "$b" \
+		$ksft_pass $ksft_xfail $ksft_skip $ksft_fail
+}
+
 busywait()
 {
 	local timeout=$1; shift




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux