selftests: forwarding: Support for performance sensitive tests

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 <petrm@nvidia.com>
Link: https://lore.kernel.org/r/99a376a2d2ffdaeee7752b1910cb0c3ea5d80fbe.1711464583.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Petr Machata 2024-03-26 17:54:38 +01:00 committed by Jakub Kicinski
parent a923af1cee
commit e16a8d209c

@ -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 @@ ret_set_ksft_status()
fi
}
# Whether FAILs should be interpreted as XFAILs. Internal.
FAIL_TO_XFAIL=
check_err()
{
local err=$1
local msg=$2
if ((err)); then
ret_set_ksft_status $ksft_fail "$msg"
if [[ $FAIL_TO_XFAIL = yes ]]; then
ret_set_ksft_status $ksft_xfail "$msg"
else
ret_set_ksft_status $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