Currently, we only check the latest senders's exit code. If the receiver
report failed, it is not recoreded. Fix it by checking the exit code
of all the involved processes.

Before:
  bad GRO lookup       ok
  multiple GRO socks   ./udpgso_bench_rx: recv: bad packet len, got 1452, 
expected 14520

 ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520

 failed
 $ echo $?
 0

After:
  bad GRO lookup       ok
  multiple GRO socks   ./udpgso_bench_rx: recv: bad packet len, got 1452, 
expected 14520

 ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520

 failed
 $ echo $?
 1

Fixes: 3327a9c46352 ("selftests: add functionals test for UDP GRO")
Suggested-by: Paolo Abeni <pab...@redhat.com>
Signed-off-by: Hangbin Liu <liuhang...@gmail.com>
---
v2: init local ret for check_err. With this the current failure will not
    affect later test result.
---
 tools/testing/selftests/net/udpgro.sh | 44 ++++++++++++++++-----------
 1 file changed, 27 insertions(+), 17 deletions(-)

diff --git a/tools/testing/selftests/net/udpgro.sh 
b/tools/testing/selftests/net/udpgro.sh
index 11a1ebda564f..4659cf01e438 100755
--- a/tools/testing/selftests/net/udpgro.sh
+++ b/tools/testing/selftests/net/udpgro.sh
@@ -46,17 +46,19 @@ run_one() {
        local -r all="$@"
        local -r tx_args=${all%rx*}
        local -r rx_args=${all#*rx}
+       local ret=0
 
        cfg_veth
 
-       ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${rx_args} 
&& \
-               echo "ok" || \
-               echo "failed" &
+       ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${rx_args} &
+       local PID1=$!
 
        wait_local_port_listen ${PEER_NS} 8000 udp
        ./udpgso_bench_tx ${tx_args}
-       ret=$?
-       wait $(jobs -p)
+       check_err $?
+       wait ${PID1}
+       check_err $?
+       [ "$ret" -eq 0 ] && echo "ok" || echo "failed"
        return $ret
 }
 
@@ -73,6 +75,7 @@ run_one_nat() {
        local -r all="$@"
        local -r tx_args=${all%rx*}
        local -r rx_args=${all#*rx}
+       local ret=0
 
        if [[ ${tx_args} = *-4* ]]; then
                ipt_cmd=iptables
@@ -93,16 +96,17 @@ run_one_nat() {
        # ... so that GRO will match the UDP_GRO enabled socket, but packets
        # will land on the 'plain' one
        ip netns exec "${PEER_NS}" ./udpgso_bench_rx -G ${family} -b ${addr1} 
-n 0 &
-       pid=$!
-       ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${family} -b 
${addr2%/*} ${rx_args} && \
-               echo "ok" || \
-               echo "failed"&
+       local PID1=$!
+       ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${family} -b 
${addr2%/*} ${rx_args} &
+       local PID2=$!
 
        wait_local_port_listen "${PEER_NS}" 8000 udp
        ./udpgso_bench_tx ${tx_args}
-       ret=$?
-       kill -INT $pid
-       wait $(jobs -p)
+       check_err $?
+       kill -INT ${PID1}
+       wait ${PID2}
+       check_err $?
+       [ "$ret" -eq 0 ] && echo "ok" || echo "failed"
        return $ret
 }
 
@@ -111,20 +115,26 @@ run_one_2sock() {
        local -r all="$@"
        local -r tx_args=${all%rx*}
        local -r rx_args=${all#*rx}
+       local ret=0
 
        cfg_veth
 
        ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${rx_args} 
-p 12345 &
-       ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 2000 -R 10 ${rx_args} 
&& \
-               echo "ok" || \
-               echo "failed" &
+       local PID1=$!
+       ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 2000 -R 10 ${rx_args} &
+       local PID2=$!
 
        wait_local_port_listen "${PEER_NS}" 12345 udp
        ./udpgso_bench_tx ${tx_args} -p 12345
+       check_err $?
        wait_local_port_listen "${PEER_NS}" 8000 udp
        ./udpgso_bench_tx ${tx_args}
-       ret=$?
-       wait $(jobs -p)
+       check_err $?
+       wait ${PID1}
+       check_err $?
+       wait ${PID2}
+       check_err $?
+       [ "$ret" -eq 0 ] && echo "ok" || echo "failed"
        return $ret
 }
 
-- 
2.45.0


Reply via email to