selftests: mptcp: more stable diag tests

The mentioned test-case still use an hard-coded-len sleep to
wait for a relative large number of connection to be established.

On very slow VM and with debug build such timeout could be exceeded,
causing failures in our CI.

Address the issue polling for the expected condition several times,
up to an unreasonable high amount of time. On reasonably fast system
the self-tests will be faster then before, on very slow one we will
still catch the correct condition.

Fixes: df62f2ec3d ("selftests/mptcp: add diag interface tests")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Paolo Abeni 2022-06-27 18:02:41 -07:00 committed by Jakub Kicinski
parent 6aeed90450
commit 42fb6cddec

View File

@ -61,6 +61,39 @@ chk_msk_nr()
__chk_nr "grep -c token:" $* __chk_nr "grep -c token:" $*
} }
wait_msk_nr()
{
local condition="grep -c token:"
local expected=$1
local timeout=20
local msg nr
local max=0
local i=0
shift 1
msg=$*
while [ $i -lt $timeout ]; do
nr=$(ss -inmHMN $ns | $condition)
[ $nr == $expected ] && break;
[ $nr -gt $max ] && max=$nr
i=$((i + 1))
sleep 1
done
printf "%-50s" "$msg"
if [ $i -ge $timeout ]; then
echo "[ fail ] timeout while expecting $expected max $max last $nr"
ret=$test_cnt
elif [ $nr != $expected ]; then
echo "[ fail ] expected $expected found $nr"
ret=$test_cnt
else
echo "[ ok ]"
fi
test_cnt=$((test_cnt+1))
}
chk_msk_fallback_nr() chk_msk_fallback_nr()
{ {
__chk_nr "grep -c fallback" $* __chk_nr "grep -c fallback" $*
@ -146,7 +179,7 @@ ip -n $ns link set dev lo up
echo "a" | \ echo "a" | \
timeout ${timeout_test} \ timeout ${timeout_test} \
ip netns exec $ns \ ip netns exec $ns \
./mptcp_connect -p 10000 -l -t ${timeout_poll} \ ./mptcp_connect -p 10000 -l -t ${timeout_poll} -w 20 \
0.0.0.0 >/dev/null & 0.0.0.0 >/dev/null &
wait_local_port_listen $ns 10000 wait_local_port_listen $ns 10000
chk_msk_nr 0 "no msk on netns creation" chk_msk_nr 0 "no msk on netns creation"
@ -155,7 +188,7 @@ chk_msk_listen 10000
echo "b" | \ echo "b" | \
timeout ${timeout_test} \ timeout ${timeout_test} \
ip netns exec $ns \ ip netns exec $ns \
./mptcp_connect -p 10000 -r 0 -t ${timeout_poll} \ ./mptcp_connect -p 10000 -r 0 -t ${timeout_poll} -w 20 \
127.0.0.1 >/dev/null & 127.0.0.1 >/dev/null &
wait_connected $ns 10000 wait_connected $ns 10000
chk_msk_nr 2 "after MPC handshake " chk_msk_nr 2 "after MPC handshake "
@ -167,13 +200,13 @@ flush_pids
echo "a" | \ echo "a" | \
timeout ${timeout_test} \ timeout ${timeout_test} \
ip netns exec $ns \ ip netns exec $ns \
./mptcp_connect -p 10001 -l -s TCP -t ${timeout_poll} \ ./mptcp_connect -p 10001 -l -s TCP -t ${timeout_poll} -w 20 \
0.0.0.0 >/dev/null & 0.0.0.0 >/dev/null &
wait_local_port_listen $ns 10001 wait_local_port_listen $ns 10001
echo "b" | \ echo "b" | \
timeout ${timeout_test} \ timeout ${timeout_test} \
ip netns exec $ns \ ip netns exec $ns \
./mptcp_connect -p 10001 -r 0 -t ${timeout_poll} \ ./mptcp_connect -p 10001 -r 0 -t ${timeout_poll} -w 20 \
127.0.0.1 >/dev/null & 127.0.0.1 >/dev/null &
wait_connected $ns 10001 wait_connected $ns 10001
chk_msk_fallback_nr 1 "check fallback" chk_msk_fallback_nr 1 "check fallback"
@ -184,7 +217,7 @@ for I in `seq 1 $NR_CLIENTS`; do
echo "a" | \ echo "a" | \
timeout ${timeout_test} \ timeout ${timeout_test} \
ip netns exec $ns \ ip netns exec $ns \
./mptcp_connect -p $((I+10001)) -l -w 10 \ ./mptcp_connect -p $((I+10001)) -l -w 20 \
-t ${timeout_poll} 0.0.0.0 >/dev/null & -t ${timeout_poll} 0.0.0.0 >/dev/null &
done done
wait_local_port_listen $ns $((NR_CLIENTS + 10001)) wait_local_port_listen $ns $((NR_CLIENTS + 10001))
@ -193,12 +226,11 @@ for I in `seq 1 $NR_CLIENTS`; do
echo "b" | \ echo "b" | \
timeout ${timeout_test} \ timeout ${timeout_test} \
ip netns exec $ns \ ip netns exec $ns \
./mptcp_connect -p $((I+10001)) -w 10 \ ./mptcp_connect -p $((I+10001)) -w 20 \
-t ${timeout_poll} 127.0.0.1 >/dev/null & -t ${timeout_poll} 127.0.0.1 >/dev/null &
done done
sleep 1.5
chk_msk_nr $((NR_CLIENTS*2)) "many msk socket present" wait_msk_nr $((NR_CLIENTS*2)) "many msk socket present"
flush_pids flush_pids
exit $ret exit $ret