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 <sbri...@redhat.com>
---
v2: Reversed return codes, display test description instead of
    name, support list of tests with description, display test
    outcome with padded printf and OK, FAIL, SKIP (David Ahern),
    buffer errors and display them below the outcome. Run third
    test step in test_pmtu_vti6_exception even if previous one
    failed.

 tools/testing/selftests/net/pmtu.sh | 87 ++++++++++++++++++++++++++-----------
 1 file changed, 61 insertions(+), 26 deletions(-)

diff --git a/tools/testing/selftests/net/pmtu.sh 
b/tools/testing/selftests/net/pmtu.sh
index 2d33e533ad36..733de6053b5c 100755
--- a/tools/testing/selftests/net/pmtu.sh
+++ b/tools/testing/selftests/net/pmtu.sh
@@ -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 "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; }
+       [ "$(id -u)" -ne 0 ] && echo "  need to run as root" && return 1
 
-       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
-
-exit 0
+exitcode=0
+desc=0
+IFS="  
+"
+for t in ${tests}; do
+       [ $desc -eq 0 ] && name="${t}" && desc=1 && continue || desc=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}
-- 
2.15.1

Reply via email to