Several tests in the suite use large amounts of traffic to e.g. cause
congestion and evaluate RED or shaper performance. These tests will not run
well on a slow machine, be it one with heavy debug kernel, or a VM, or e.g.
a single-board computer. Allow users to specify an environment variable,
KSFT_MACHINE_SLOW=yes, to indicate that the tests are being run on one such
machine.

Performance sensitive tests can then use a new helper, xfail_on_slow(), to
mark parts of the test that are sensitive to low-performance machines.
The helper can be used to just mark the whole suite, like so:

        xfail_on_slow tests_run

... or, on the other side of the granularity spectrum, to override
individual checks:

        xfail_on_slow check_err $? "Expected much, got little."

Signed-off-by: Petr Machata <pe...@nvidia.com>
---
 tools/testing/selftests/net/forwarding/lib.sh | 23 ++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/forwarding/lib.sh 
b/tools/testing/selftests/net/forwarding/lib.sh
index 942f38988941..cc32bf11739b 100644
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -79,6 +79,11 @@ declare -A NETIFS=(
 # Flags for TC filters.
 : "${TC_FLAG:=skip_hw}"
 
+# Whether the machine is "slow" -- i.e. might be incapable of running tests
+# involving heavy traffic. This might be the case on a debug kernel, a VM, or
+# e.g. a low-power board.
+: "${KSFT_MACHINE_SLOW:=no}"
+
 net_forwarding_dir=$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")
 
 if [[ -f $net_forwarding_dir/forwarding.config ]]; then
@@ -407,13 +412,20 @@ set_ret()
        fi
 }
 
+# Whether FAILs should be interpreted as XFAILs. Internal.
+FAIL_TO_XFAIL=
+
 check_err()
 {
        local err=$1
        local msg=$2
 
        if ((err)); then
-               set_ret $ksft_fail "$msg"
+               if [[ $FAIL_TO_XFAIL = yes ]]; then
+                       set_ret $ksft_xfail "$msg"
+               else
+                       set_ret $ksft_fail "$msg"
+               fi
        fi
 }
 
@@ -438,6 +450,15 @@ check_err_fail()
        fi
 }
 
+xfail_on_slow()
+{
+       if [[ $KSFT_MACHINE_SLOW = yes ]]; then
+               FAIL_TO_XFAIL=yes "$@"
+       else
+               "$@"
+       fi
+}
+
 log_test_result()
 {
        local test_name=$1; shift
-- 
2.43.0


Reply via email to