selftests: pmtu: Introduce support for multiple tests
Introduce list of tests and their descriptions, and loop on it in main body. Tests will now just take care of calling setup with a list of "units" they need, and return 0 on success, 1 on failure, 2 if the test had to be skipped. Main script body will take care of displaying results and cleaning up after every test. Introduce guard variable so that we don't clean up twice in case of interrupts or unexpected failures. The pmtu_vti6_exception test can now run its third step even if the previous one failed, as we can return values from it. Also introduce support to display test descriptions, and display aligned OK/FAIL/SKIP test outcomes. Buffer error strings so that in case of failure we can display them right under the outcome for each test. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f2c929feec
commit
36455bd1e9
1 changed files with 60 additions and 25 deletions
|
@ -5,13 +5,16 @@
|
|||
#
|
||||
# Tests currently implemented:
|
||||
#
|
||||
# - test_pmtu_vti6_exception
|
||||
# - pmtu_vti6_exception
|
||||
# Set up vti6 tunnel on top of veth, with xfrm states and policies, in two
|
||||
# namespaces with matching endpoints. Check that route exception is
|
||||
# created by exceeding link layer MTU with ping to other endpoint. Then
|
||||
# decrease and increase MTU of tunnel, checking that route exception PMTU
|
||||
# changes accordingly
|
||||
|
||||
tests="
|
||||
pmtu_vti6_exception vti6: PMTU exceptions"
|
||||
|
||||
NS_A="ns-$(mktemp -u XXXXXX)"
|
||||
NS_B="ns-$(mktemp -u XXXXXX)"
|
||||
ns_a="ip netns exec ${NS_A}"
|
||||
|
@ -25,6 +28,19 @@ vti6_a_addr="fd00:2::a"
|
|||
vti6_b_addr="fd00:2::b"
|
||||
vti6_mask="64"
|
||||
|
||||
cleanup_done=1
|
||||
err_buf=
|
||||
|
||||
err() {
|
||||
err_buf="${err_buf}${1}
|
||||
"
|
||||
}
|
||||
|
||||
err_flush() {
|
||||
echo -n "${err_buf}"
|
||||
err_buf=
|
||||
}
|
||||
|
||||
setup_namespaces() {
|
||||
ip netns add ${NS_A} || return 1
|
||||
ip netns add ${NS_B}
|
||||
|
@ -67,26 +83,19 @@ setup_xfrm() {
|
|||
}
|
||||
|
||||
setup() {
|
||||
tunnel_type="$1"
|
||||
[ "$(id -u)" -ne 0 ] && echo " need to run as root" && return 1
|
||||
|
||||
[ "$(id -u)" -ne 0 ] && echo "SKIP: need to run as root" && exit 0
|
||||
|
||||
setup_namespaces || { echo "SKIP: namespaces not supported"; exit 0; }
|
||||
setup_veth || { echo "SKIP: veth not supported"; exit 0; }
|
||||
|
||||
case ${tunnel_type} in
|
||||
"vti6")
|
||||
setup_vti6 || { echo "SKIP: vti6 not supported"; exit 0; }
|
||||
setup_xfrm || { echo "SKIP: xfrm not supported"; exit 0; }
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
cleanup_done=0
|
||||
for arg do
|
||||
eval setup_${arg} || { echo " ${arg} not supported"; return 1; }
|
||||
done
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
[ ${cleanup_done} -eq 1 ] && return
|
||||
ip netns del ${NS_A} 2 > /dev/null
|
||||
ip netns del ${NS_B} 2 > /dev/null
|
||||
cleanup_done=1
|
||||
}
|
||||
|
||||
mtu() {
|
||||
|
@ -122,7 +131,8 @@ route_get_dst_pmtu_from_exception() {
|
|||
}
|
||||
|
||||
test_pmtu_vti6_exception() {
|
||||
setup vti6
|
||||
setup namespaces veth vti6 xfrm || return 2
|
||||
fail=0
|
||||
|
||||
# Create route exception by exceeding link layer MTU
|
||||
mtu "${ns_a}" veth_a 4000
|
||||
|
@ -133,30 +143,55 @@ test_pmtu_vti6_exception() {
|
|||
|
||||
# Check that exception was created
|
||||
if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" = "" ]; then
|
||||
echo "FAIL: Tunnel exceeding link layer MTU didn't create route exception"
|
||||
exit 1
|
||||
err " tunnel exceeding link layer MTU didn't create route exception"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Decrease tunnel MTU, check for PMTU decrease in route exception
|
||||
mtu "${ns_a}" vti_a 3000
|
||||
|
||||
if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" -ne 3000 ]; then
|
||||
echo "FAIL: Decreasing tunnel MTU didn't decrease route exception PMTU"
|
||||
exit 1
|
||||
err " decreasing tunnel MTU didn't decrease route exception PMTU"
|
||||
fail=1
|
||||
fi
|
||||
|
||||
# Increase tunnel MTU, check for PMTU increase in route exception
|
||||
mtu "${ns_a}" vti_a 9000
|
||||
if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" -ne 9000 ]; then
|
||||
echo "FAIL: Increasing tunnel MTU didn't increase route exception PMTU"
|
||||
exit 1
|
||||
err " increasing tunnel MTU didn't increase route exception PMTU"
|
||||
fail=1
|
||||
fi
|
||||
|
||||
echo "PASS"
|
||||
return ${fail}
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
test_pmtu_vti6_exception
|
||||
exitcode=0
|
||||
desc=0
|
||||
IFS="
|
||||
"
|
||||
for t in ${tests}; do
|
||||
[ $desc -eq 0 ] && name="${t}" && desc=1 && continue || desc=0
|
||||
|
||||
exit 0
|
||||
(
|
||||
unset IFS
|
||||
eval test_${name}
|
||||
ret=$?
|
||||
cleanup
|
||||
|
||||
if [ $ret -eq 0 ]; then
|
||||
printf "TEST: %-60s [ OK ]\n" "${t}"
|
||||
elif [ $ret -eq 1 ]; then
|
||||
printf "TEST: %-60s [FAIL]\n" "${t}"
|
||||
err_flush
|
||||
exit 1
|
||||
elif [ $ret -eq 2 ]; then
|
||||
printf "TEST: %-60s [SKIP]\n" "${t}"
|
||||
err_flush
|
||||
fi
|
||||
)
|
||||
[ $? -ne 0 ] && exitcode=1
|
||||
done
|
||||
|
||||
exit ${exitcode}
|
||||
|
|
Loading…
Reference in a new issue