selftests: fix the return value for UDP GRO test
authorPo-Hsu Lin <po-hsu.lin@canonical.com>
Tue, 5 Jan 2021 10:17:40 +0000 (18:17 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Jan 2021 00:59:21 +0000 (16:59 -0800)
The udpgro.sh will always return 0 (unless the bpf selftest was not
build first) even if there are some failed sub test-cases.

Therefore the kselftest framework will report this case is OK.

Check and return the exit status of each test to make it easier to
spot real failures.

Signed-off-by: Po-Hsu Lin <po-hsu.lin@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/udpgro.sh

index ac2a30b..f8a19f5 100755 (executable)
@@ -5,6 +5,14 @@
 
 readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
 
+# set global exit status, but never reset nonzero one.
+check_err()
+{
+       if [ $ret -eq 0 ]; then
+               ret=$1
+       fi
+}
+
 cleanup() {
        local -r jobs="$(jobs -p)"
        local -r ns="$(ip netns list|grep $PEER_NS)"
@@ -44,7 +52,9 @@ run_one() {
        # Hack: let bg programs complete the startup
        sleep 0.1
        ./udpgso_bench_tx ${tx_args}
+       ret=$?
        wait $(jobs -p)
+       return $ret
 }
 
 run_test() {
@@ -87,8 +97,10 @@ run_one_nat() {
 
        sleep 0.1
        ./udpgso_bench_tx ${tx_args}
+       ret=$?
        kill -INT $pid
        wait $(jobs -p)
+       return $ret
 }
 
 run_one_2sock() {
@@ -110,7 +122,9 @@ run_one_2sock() {
        sleep 0.1
        # first UDP GSO socket should be closed at this point
        ./udpgso_bench_tx ${tx_args}
+       ret=$?
        wait $(jobs -p)
+       return $ret
 }
 
 run_nat_test() {
@@ -131,36 +145,54 @@ run_all() {
        local -r core_args="-l 4"
        local -r ipv4_args="${core_args} -4 -D 192.168.1.1"
        local -r ipv6_args="${core_args} -6 -D 2001:db8::1"
+       ret=0
 
        echo "ipv4"
        run_test "no GRO" "${ipv4_args} -M 10 -s 1400" "-4 -n 10 -l 1400"
+       check_err $?
 
        # explicitly check we are not receiving UDP_SEGMENT cmsg (-S -1)
        # when GRO does not take place
        run_test "no GRO chk cmsg" "${ipv4_args} -M 10 -s 1400" "-4 -n 10 -l 1400 -S -1"
+       check_err $?
 
        # the GSO packets are aggregated because:
        # * veth schedule napi after each xmit
        # * segmentation happens in BH context, veth napi poll is delayed after
        #   the transmission of the last segment
        run_test "GRO" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720"
+       check_err $?
        run_test "GRO chk cmsg" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720 -S 1472"
+       check_err $?
        run_test "GRO with custom segment size" "${ipv4_args} -M 1 -s 14720 -S 500 " "-4 -n 1 -l 14720"
+       check_err $?
        run_test "GRO with custom segment size cmsg" "${ipv4_args} -M 1 -s 14720 -S 500 " "-4 -n 1 -l 14720 -S 500"
+       check_err $?
 
        run_nat_test "bad GRO lookup" "${ipv4_args} -M 1 -s 14720 -S 0" "-n 10 -l 1472"
+       check_err $?
        run_2sock_test "multiple GRO socks" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720 -S 1472"
+       check_err $?
 
        echo "ipv6"
        run_test "no GRO" "${ipv6_args} -M 10 -s 1400" "-n 10 -l 1400"
+       check_err $?
        run_test "no GRO chk cmsg" "${ipv6_args} -M 10 -s 1400" "-n 10 -l 1400 -S -1"
+       check_err $?
        run_test "GRO" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 1 -l 14520"
+       check_err $?
        run_test "GRO chk cmsg" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 1 -l 14520 -S 1452"
+       check_err $?
        run_test "GRO with custom segment size" "${ipv6_args} -M 1 -s 14520 -S 500" "-n 1 -l 14520"
+       check_err $?
        run_test "GRO with custom segment size cmsg" "${ipv6_args} -M 1 -s 14520 -S 500" "-n 1 -l 14520 -S 500"
+       check_err $?
 
        run_nat_test "bad GRO lookup" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 10 -l 1452"
+       check_err $?
        run_2sock_test "multiple GRO socks" "${ipv6_args} -M 1 -s 14520 -S 0 " "-n 1 -l 14520 -S 1452"
+       check_err $?
+       return $ret
 }
 
 if [ ! -f ../bpf/xdp_dummy.o ]; then
@@ -180,3 +212,5 @@ elif [[ $1 == "__subprocess_2sock" ]]; then
        shift
        run_one_2sock $@
 fi
+
+exit $?