Fix the reporting of failed tests as it was broken in several ways. First, a failed test was reported as both failed and passed messing up the count. Second, tests were not aborted after a failure and could generate more "failures" messing up the count even more. Third, the failure reporting from the application to the shell script was wrong. It always reported pass. And finally, the handling of the failures in the launch script was not correct. Correct all this by propagating the failure up through the function calls to a calling function that can abort the test. A receiver or sender thread will mark the new variable in the test spec called fail, if a test has failed. This is then picked up by the main thread when everyone else has exited and this is then marked and propagated up to the calling script. Also add a summary function in the calling script so that a user does not have to go through the sub tests to see if something has failed. Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com> Link: https://lore.kernel.org/r/20220510115604.8717-5-magnus.karlsson@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
93 lines
1.7 KiB
Bash
Executable File
93 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright(c) 2020 Intel Corporation.
|
|
|
|
ksft_pass=0
|
|
ksft_fail=1
|
|
ksft_xfail=2
|
|
ksft_xpass=3
|
|
ksft_skip=4
|
|
|
|
XSKOBJ=xdpxceiver
|
|
|
|
validate_root_exec()
|
|
{
|
|
msg="skip all tests:"
|
|
if [ $UID != 0 ]; then
|
|
echo $msg must be run as root >&2
|
|
test_exit $ksft_fail
|
|
else
|
|
return $ksft_pass
|
|
fi
|
|
}
|
|
|
|
validate_veth_support()
|
|
{
|
|
msg="skip all tests:"
|
|
if [ $(ip link add $1 type veth 2>/dev/null; echo $?;) != 0 ]; then
|
|
echo $msg veth kernel support not available >&2
|
|
test_exit $ksft_skip
|
|
else
|
|
ip link del $1
|
|
return $ksft_pass
|
|
fi
|
|
}
|
|
|
|
test_status()
|
|
{
|
|
statusval=$1
|
|
if [ $statusval -eq $ksft_fail ]; then
|
|
echo "$2: [ FAIL ]"
|
|
elif [ $statusval -eq $ksft_skip ]; then
|
|
echo "$2: [ SKIPPED ]"
|
|
elif [ $statusval -eq $ksft_pass ]; then
|
|
echo "$2: [ PASS ]"
|
|
fi
|
|
}
|
|
|
|
test_exit()
|
|
{
|
|
if [ $1 -ne 0 ]; then
|
|
test_status $1 $(basename $0)
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
clear_configs()
|
|
{
|
|
if [ $(ip netns show | grep $3 &>/dev/null; echo $?;) == 0 ]; then
|
|
[ $(ip netns exec $3 ip link show $2 &>/dev/null; echo $?;) == 0 ] &&
|
|
{ ip netns exec $3 ip link del $2; }
|
|
ip netns del $3
|
|
fi
|
|
#Once we delete a veth pair node, the entire veth pair is removed,
|
|
#this is just to be cautious just incase the NS does not exist then
|
|
#veth node inside NS won't get removed so we explicitly remove it
|
|
[ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] &&
|
|
{ ip link del $1; }
|
|
}
|
|
|
|
cleanup_exit()
|
|
{
|
|
clear_configs $1 $2 $3
|
|
}
|
|
|
|
validate_ip_utility()
|
|
{
|
|
[ ! $(type -P ip) ] && { echo "'ip' not found. Skipping tests."; test_exit $ksft_skip; }
|
|
}
|
|
|
|
execxdpxceiver()
|
|
{
|
|
if [[ $busy_poll -eq 1 ]]; then
|
|
ARGS+="-b "
|
|
fi
|
|
|
|
./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${ARGS}
|
|
|
|
retval=$?
|
|
test_status $retval "${TEST_NAME}"
|
|
statusList+=($retval)
|
|
nameList+=(${TEST_NAME})
|
|
}
|