Commit dc97251b authored by Matthieu Baerts's avatar Matthieu Baerts Committed by Jakub Kicinski

selftests: mptcp: diag: skip listen tests if not supported

Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

One of them is the listen diag dump support introduced by
commit 4fa39b70 ("mptcp: listen diag dump support").

It looks like there is no good pre-check to do here, i.e. dedicated
function available in kallsyms. Instead, we try to get info if nothing
is returned, the test is marked as skipped.

That's not ideal because something could be wrong with the feature and
instead of reporting an error, the test could be marked as skipped. If
we know in advanced that the feature is supposed to be supported, the
tester can set SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var to 1: in
this case the test will report an error instead of marking the test as
skipped if nothing is returned.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: f2ae0fa6 ("selftests/mptcp: add diag listen tests")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 06b03083
...@@ -55,16 +55,20 @@ __chk_nr() ...@@ -55,16 +55,20 @@ __chk_nr()
{ {
local command="$1" local command="$1"
local expected=$2 local expected=$2
local msg nr local msg="$3"
local skip="${4:-SKIP}"
local nr
shift 2
msg=$*
nr=$(eval $command) nr=$(eval $command)
printf "%-50s" "$msg" printf "%-50s" "$msg"
if [ $nr != $expected ]; then if [ $nr != $expected ]; then
if [ $nr = "$skip" ] && ! mptcp_lib_expect_all_features; then
echo "[ skip ] Feature probably not supported"
else
echo "[ fail ] expected $expected found $nr" echo "[ fail ] expected $expected found $nr"
ret=$test_cnt ret=$test_cnt
fi
else else
echo "[ ok ]" echo "[ ok ]"
fi fi
...@@ -76,12 +80,12 @@ __chk_msk_nr() ...@@ -76,12 +80,12 @@ __chk_msk_nr()
local condition=$1 local condition=$1
shift 1 shift 1
__chk_nr "ss -inmHMN $ns | $condition" $* __chk_nr "ss -inmHMN $ns | $condition" "$@"
} }
chk_msk_nr() chk_msk_nr()
{ {
__chk_msk_nr "grep -c token:" $* __chk_msk_nr "grep -c token:" "$@"
} }
wait_msk_nr() wait_msk_nr()
...@@ -119,37 +123,26 @@ wait_msk_nr() ...@@ -119,37 +123,26 @@ wait_msk_nr()
chk_msk_fallback_nr() chk_msk_fallback_nr()
{ {
__chk_msk_nr "grep -c fallback" $* __chk_msk_nr "grep -c fallback" "$@"
} }
chk_msk_remote_key_nr() chk_msk_remote_key_nr()
{ {
__chk_msk_nr "grep -c remote_key" $* __chk_msk_nr "grep -c remote_key" "$@"
} }
__chk_listen() __chk_listen()
{ {
local filter="$1" local filter="$1"
local expected=$2 local expected=$2
local msg="$3"
shift 2 __chk_nr "ss -N $ns -Ml '$filter' | grep -c LISTEN" "$expected" "$msg" 0
msg=$*
nr=$(ss -N $ns -Ml "$filter" | grep -c LISTEN)
printf "%-50s" "$msg"
if [ $nr != $expected ]; then
echo "[ fail ] expected $expected found $nr"
ret=$test_cnt
else
echo "[ ok ]"
fi
} }
chk_msk_listen() chk_msk_listen()
{ {
lport=$1 lport=$1
local msg="check for listen socket"
# destination port search should always return empty list # destination port search should always return empty list
__chk_listen "dport $lport" 0 "listen match for dport $lport" __chk_listen "dport $lport" 0 "listen match for dport $lport"
...@@ -167,10 +160,9 @@ chk_msk_listen() ...@@ -167,10 +160,9 @@ chk_msk_listen()
chk_msk_inuse() chk_msk_inuse()
{ {
local expected=$1 local expected=$1
local msg="$2"
local listen_nr local listen_nr
shift 1
listen_nr=$(ss -N "${ns}" -Ml | grep -c LISTEN) listen_nr=$(ss -N "${ns}" -Ml | grep -c LISTEN)
expected=$((expected + listen_nr)) expected=$((expected + listen_nr))
...@@ -181,7 +173,7 @@ chk_msk_inuse() ...@@ -181,7 +173,7 @@ chk_msk_inuse()
sleep 0.1 sleep 0.1
done done
__chk_nr get_msk_inuse $expected $* __chk_nr get_msk_inuse $expected "$msg"
} }
# $1: ns, $2: port # $1: ns, $2: port
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment