2023-07-30 08:29:19

by Matthieu Baerts

[permalink] [raw]
Subject: [PATCH net-next 0/4] mptcp: cleanup and improvements in the selftests

This small series of 4 patches adds some improvements in MPTCP
selftests:

- Patch 1 reworks the detailed report of mptcp_join.sh selftest to
better display what went well or wrong per test.

- Patch 2 adds colours (if supported, forced and/or not disabled) in
mptcp_join.sh selftest output to help spotting issues.

- Patch 3 modifies an MPTCP selftest tool to interact with the
path-manager via Netlink to always look for errors if any. This makes
sure odd behaviours can be seen in the logs and errors can be caught
later if needed.

- Patch 4 removes stdout and stderr redirections to /dev/null when using
pm_nl_ctl if no errors are expected in order to log odd behaviours.

Signed-off-by: Matthieu Baerts <[email protected]>
---
Matthieu Baerts (4):
selftests: mptcp: join: rework detailed report
selftests: mptcp: join: colored results
selftests: mptcp: pm_nl_ctl: always look for errors
selftests: mptcp: userspace_pm: unmute unexpected errors

tools/testing/selftests/net/mptcp/mptcp_join.sh | 452 ++++++++++------------
tools/testing/selftests/net/mptcp/mptcp_lib.sh | 39 ++
tools/testing/selftests/net/mptcp/pm_netlink.sh | 6 +-
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 33 +-
tools/testing/selftests/net/mptcp/userspace_pm.sh | 100 ++---
5 files changed, 329 insertions(+), 301 deletions(-)
---
base-commit: 64a37272fa5fb2d951ebd1a96fd42b045d64924c
change-id: 20230728-upstream-net-next-20230728-mptcp-selftests-misc-0190cfd69ef9

Best regards,
--
Matthieu Baerts <[email protected]>



2023-07-30 09:14:08

by Matthieu Baerts

[permalink] [raw]
Subject: [PATCH net-next 2/4] selftests: mptcp: join: colored results

Thanks to the parent commit, it is easy to change the output and add
some colours to help spotting issues.

The colours are not used if stdout is redirected or if NO_COLOR env var
is set to 1 as specified in https://no-color.org.

It is possible to force displaying the colours even if stdout is
redirected by setting this env var:

SELFTESTS_MPTCP_LIB_COLOR_FORCE=1

Acked-by: Paolo Abeni <[email protected]>
Signed-off-by: Matthieu Baerts <[email protected]>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 8 ++---
tools/testing/selftests/net/mptcp/mptcp_lib.sh | 39 +++++++++++++++++++++++++
2 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 6da3a6c98ba7..136d20641fce 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -215,22 +215,22 @@ print_info()
# It can be empty, no need to print anything then
[ -z "${1}" ] && return

- printf "%-${nr_blank}sInfo: %s\n" " " "${*}"
+ mptcp_lib_print_info " Info: ${*}"
}

print_ok()
{
- echo "[ ok ]${1:+ ${*}}"
+ mptcp_lib_print_ok "[ ok ]${1:+ ${*}}"
}

print_fail()
{
- echo "[fail]${1:+ ${*}}"
+ mptcp_lib_print_err "[fail]${1:+ ${*}}"
}

print_skip()
{
- echo "[skip]${1:+ ${*}}"
+ mptcp_lib_print_warn "[skip]${1:+ ${*}}"
}

# [ $1: fail msg ]
diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
index b1a0fdd0408b..92a5befe8039 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
@@ -4,10 +4,49 @@
readonly KSFT_PASS=0
readonly KSFT_FAIL=1
readonly KSFT_SKIP=4
+
+# shellcheck disable=SC2155 # declare and assign separately
readonly KSFT_TEST=$(basename "${0}" | sed 's/\.sh$//g')

MPTCP_LIB_SUBTESTS=()

+# only if supported (or forced) and not disabled, see no-color.org
+if { [ -t 1 ] || [ "${SELFTESTS_MPTCP_LIB_COLOR_FORCE:-}" = "1" ]; } &&
+ [ "${NO_COLOR:-}" != "1" ]; then
+ readonly MPTCP_LIB_COLOR_RED="\E[1;31m"
+ readonly MPTCP_LIB_COLOR_GREEN="\E[1;32m"
+ readonly MPTCP_LIB_COLOR_YELLOW="\E[1;33m"
+ readonly MPTCP_LIB_COLOR_BLUE="\E[1;34m"
+ readonly MPTCP_LIB_COLOR_RESET="\E[0m"
+else
+ readonly MPTCP_LIB_COLOR_RED=
+ readonly MPTCP_LIB_COLOR_GREEN=
+ readonly MPTCP_LIB_COLOR_YELLOW=
+ readonly MPTCP_LIB_COLOR_BLUE=
+ readonly MPTCP_LIB_COLOR_RESET=
+fi
+
+# $1: color, $2: text
+mptcp_lib_print_color() {
+ echo -e "${MPTCP_LIB_START_PRINT:-}${*}${MPTCP_LIB_COLOR_RESET}"
+}
+
+mptcp_lib_print_ok() {
+ mptcp_lib_print_color "${MPTCP_LIB_COLOR_GREEN}${*}"
+}
+
+mptcp_lib_print_warn() {
+ mptcp_lib_print_color "${MPTCP_LIB_COLOR_YELLOW}${*}"
+}
+
+mptcp_lib_print_info() {
+ mptcp_lib_print_color "${MPTCP_LIB_COLOR_BLUE}${*}"
+}
+
+mptcp_lib_print_err() {
+ mptcp_lib_print_color "${MPTCP_LIB_COLOR_RED}${*}"
+}
+
# SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var can be set when validating all
# features using the last version of the kernel and the selftests to make sure
# a test is not being skipped by mistake.

--
2.40.1


2023-07-30 09:49:06

by Matthieu Baerts

[permalink] [raw]
Subject: [PATCH net-next 1/4] selftests: mptcp: join: rework detailed report

This patch modifies how the detailed results are printed, mainly to
improve what is displayed in case of issue:

- Now the test name (title) is printed earlier, when starting the test
if it is not intentionally skipped: by doing that, errors linked to
a test will be printed after having written the test name and then
avoid confusions.

- Due to the previous item, it is required to add a new line after
having printed the test name because in case of error with a command,
it is better not to have the output in the middle of the screen.

- Each check is printed on a dedicated line with aligned status (ok,
skip, fail): it is easier to spot which one has failed, simpler to
manage in the code not having to deal with alignment case by case and
helpers can be used to uniform what is done. These helpers can also be
useful later to do more actions depending on the results or change in
one place what is printed.

- Info messages have been reduced and aligned as well. And info messages
about the creation of the default test files of 1 KB are no longer
printed.

Example:

001 no JOIN
syn [ ok ]
synack [ ok ]
ack [ ok ]

Or with a skip and a failure:

001 no JOIN
syn [ ok ]
synack [fail] got 42 JOIN[s] synack expected 0
Server ns stats
(...)
Client ns stats
(...)
ack [skip]

Or with info:

104 Infinite map
Test file (size 128 KB) for client
Test file (size 128 KB) for server
file received by server has inverted byte at 169
5 corrupted pkts
syn [ ok ]
synack [ ok ]

While at it, verify_listener_events() now also print more info in case
of failure and in pm_nl_check_endpoint(), the test is marked as failed
instead of skipped if no ID has been given (internal selftest issue).

Acked-by: Paolo Abeni <[email protected]>
Signed-off-by: Matthieu Baerts <[email protected]>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 450 +++++++++++-------------
1 file changed, 214 insertions(+), 236 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 1640749750d4..6da3a6c98ba7 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -49,7 +49,7 @@ declare -a only_tests_names
declare -A failed_tests
TEST_COUNT=0
TEST_NAME=""
-nr_blank=40
+nr_blank=6

# These var are used only in some tests, make sure they are not already set
unset FAILING_LINKS
@@ -187,8 +187,8 @@ init() {

trap cleanup EXIT

- make_file "$cin" "client" 1
- make_file "$sin" "server" 1
+ make_file "$cin" "client" 1 >/dev/null
+ make_file "$sin" "server" 1 >/dev/null
}

cleanup()
@@ -200,10 +200,37 @@ cleanup()
cleanup_partial
}

-# $1: msg
print_title()
{
- printf "%03u %-36s %s" "${TEST_COUNT}" "${TEST_NAME}" "${1}"
+ printf "%03u %s\n" "${TEST_COUNT}" "${TEST_NAME}"
+}
+
+print_check()
+{
+ printf "%-${nr_blank}s%-36s" " " "${*}"
+}
+
+print_info()
+{
+ # It can be empty, no need to print anything then
+ [ -z "${1}" ] && return
+
+ printf "%-${nr_blank}sInfo: %s\n" " " "${*}"
+}
+
+print_ok()
+{
+ echo "[ ok ]${1:+ ${*}}"
+}
+
+print_fail()
+{
+ echo "[fail]${1:+ ${*}}"
+}
+
+print_skip()
+{
+ echo "[skip]${1:+ ${*}}"
}

# [ $1: fail msg ]
@@ -213,8 +240,8 @@ mark_as_skipped()

mptcp_lib_fail_if_expected_feature "${msg}"

- print_title "[ skip ] ${msg}"
- printf "\n"
+ print_check "${msg}"
+ print_skip

last_test_skipped=1
}
@@ -278,6 +305,8 @@ reset()
return 1
fi

+ print_title
+
if [ "${init}" != "1" ]; then
init
else
@@ -458,10 +487,13 @@ reset_with_tcp_filter()
fi
}

+# $1: err msg
fail_test()
{
ret=1

+ print_fail "${@}"
+
# just in case a test is marked twice as failed
if [ ${last_test_failed} -eq 0 ]; then
failed_tests[${TEST_COUNT}]="${TEST_NAME}"
@@ -482,7 +514,7 @@ get_failed_tests_ids()
print_file_err()
{
ls -l "$1" 1>&2
- echo "Trailing bytes are: "
+ echo -n "Trailing bytes are: "
tail -c 27 "$1"
}

@@ -500,8 +532,7 @@ check_transfer()
# when truncating we must check the size explicitly
out_size=$(wc -c $out | awk '{print $1}')
if [ $out_size -ne $bytes ]; then
- echo "[ FAIL ] $what output file has wrong size ($out_size, $bytes)"
- fail_test
+ fail_test "$what output file has wrong size ($out_size, $bytes)"
return 1
fi

@@ -516,14 +547,13 @@ check_transfer()
cmp -l "$in" "$out" | while read -r i a b; do
local sum=$((0${a} + 0${b}))
if [ $check_invert -eq 0 ] || [ $sum -ne $((0xff)) ]; then
- echo "[ FAIL ] $what does not match (in, out):"
+ fail_test "$what does not match (in, out):"
print_file_err "$in"
print_file_err "$out"
- fail_test

return 1
else
- echo "$what has inverted byte at ${i}"
+ print_info "$what has inverted byte at ${i}"
fi
done

@@ -537,8 +567,7 @@ do_ping()
local connect_addr="$3"

if ! ip netns exec ${connector_ns} ping -q -c 1 $connect_addr >/dev/null; then
- echo "$listener_ns -> $connect_addr connectivity [ FAIL ]" 1>&2
- fail_test
+ fail_test "$listener_ns -> $connect_addr connectivity"
fi
}

@@ -776,10 +805,9 @@ pm_nl_change_endpoint()
pm_nl_check_endpoint()
{
local line expected_line
- local need_title=$1
- local msg="$2"
- local ns=$3
- local addr=$4
+ local msg="$1"
+ local ns=$2
+ local addr=$3
local _flags=""
local flags
local _port
@@ -788,13 +816,9 @@ pm_nl_check_endpoint()
local _id
local id

- if [ "${need_title}" = 1 ]; then
- printf "%03u %-36s %s" "${TEST_COUNT}" "${TEST_NAME}" "${msg}"
- else
- printf "%-${nr_blank}s %s" " " "${msg}"
- fi
+ print_check "${msg}"

- shift 4
+ shift 3
while [ -n "$1" ]; do
if [ $1 = "flags" ]; then
_flags=$2
@@ -817,7 +841,7 @@ pm_nl_check_endpoint()
done

if [ -z "$id" ]; then
- echo "[skip] bad test - missing endpoint id"
+ test_fail "bad test - missing endpoint id"
return
fi

@@ -840,10 +864,9 @@ pm_nl_check_endpoint()
[ -n "$_port" ] && expected_line="$expected_line $_port"
fi
if [ "$line" = "$expected_line" ]; then
- echo "[ ok ]"
+ print_ok
else
- echo "[fail] expected '$expected_line' found '$line'"
- fail_test
+ fail_test "expected '$expected_line' found '$line'"
fi
}

@@ -1058,8 +1081,7 @@ do_transfer()
local trunc_size=""
if [ -n "${fastclose}" ]; then
if [ ${test_linkfail} -le 1 ]; then
- echo "fastclose tests need test_linkfail argument"
- fail_test
+ fail_test "fastclose tests need test_linkfail argument"
return 1
fi

@@ -1074,8 +1096,7 @@ do_transfer()
extra_srv_args="-f ${test_linkfail}"
extra_cl_args="-f -1"
else
- echo "wrong/unknown fastclose spec ${side}"
- fail_test
+ fail_test "wrong/unknown fastclose spec ${side}"
return 1
fi
fi
@@ -1136,7 +1157,7 @@ do_transfer()
nstat | grep Tcp > /tmp/${connector_ns}.out

if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then
- echo " client exit code $retc, server $rets" 1>&2
+ fail_test "client exit code $retc, server $rets"
echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2
ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port"
cat /tmp/${listener_ns}.out
@@ -1145,7 +1166,6 @@ do_transfer()
cat /tmp/${connector_ns}.out

cat "$capout"
- fail_test
return 1
fi

@@ -1180,7 +1200,7 @@ make_file()
dd if=/dev/urandom of="$name" bs=1024 count=$size 2> /dev/null
echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name"

- echo "Created $name (size $size KB) containing data sent by $who"
+ print_info "Test file (size $size KB) for $who"
}

run_tests()
@@ -1261,36 +1281,34 @@ chk_csum_nr()
csum_ns2=${csum_ns2:1}
fi

- printf "%-${nr_blank}s %s" " " "sum"
+ print_check "sum"
count=$(get_counter ${ns1} "MPTcpExtDataCsumErr")
if [ "$count" != "$csum_ns1" ]; then
extra_msg="$extra_msg ns1=$count"
fi
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif { [ "$count" != $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 0 ]; } ||
{ [ "$count" -lt $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 1 ]; }; then
- echo "[fail] got $count data checksum error[s] expected $csum_ns1"
- fail_test
+ fail_test "got $count data checksum error[s] expected $csum_ns1"
else
- echo -n "[ ok ]"
+ print_ok
fi
- echo -n " - csum "
+ print_check "csum"
count=$(get_counter ${ns2} "MPTcpExtDataCsumErr")
if [ "$count" != "$csum_ns2" ]; then
extra_msg="$extra_msg ns2=$count"
fi
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif { [ "$count" != $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 0 ]; } ||
{ [ "$count" -lt $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 1 ]; }; then
- echo "[fail] got $count data checksum error[s] expected $csum_ns2"
- fail_test
+ fail_test "got $count data checksum error[s] expected $csum_ns2"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo "$extra_msg"
+ print_info "$extra_msg"
}

chk_fail_nr()
@@ -1308,7 +1326,7 @@ chk_fail_nr()
if [[ $ns_invert = "invert" ]]; then
ns_tx=$ns2
ns_rx=$ns1
- extra_msg=" invert"
+ extra_msg="invert"
fi

if [[ "${fail_tx}" = "-"* ]]; then
@@ -1320,37 +1338,35 @@ chk_fail_nr()
fail_rx=${fail_rx:1}
fi

- printf "%-${nr_blank}s %s" " " "ftx"
+ print_check "ftx"
count=$(get_counter ${ns_tx} "MPTcpExtMPFailTx")
if [ "$count" != "$fail_tx" ]; then
extra_msg="$extra_msg,tx=$count"
fi
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif { [ "$count" != "$fail_tx" ] && [ $allow_tx_lost -eq 0 ]; } ||
{ [ "$count" -gt "$fail_tx" ] && [ $allow_tx_lost -eq 1 ]; }; then
- echo "[fail] got $count MP_FAIL[s] TX expected $fail_tx"
- fail_test
+ fail_test "got $count MP_FAIL[s] TX expected $fail_tx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - failrx"
+ print_check "failrx"
count=$(get_counter ${ns_rx} "MPTcpExtMPFailRx")
if [ "$count" != "$fail_rx" ]; then
extra_msg="$extra_msg,rx=$count"
fi
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif { [ "$count" != "$fail_rx" ] && [ $allow_rx_lost -eq 0 ]; } ||
{ [ "$count" -gt "$fail_rx" ] && [ $allow_rx_lost -eq 1 ]; }; then
- echo "[fail] got $count MP_FAIL[s] RX expected $fail_rx"
- fail_test
+ fail_test "got $count MP_FAIL[s] RX expected $fail_rx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo "$extra_msg"
+ print_info "$extra_msg"
}

chk_fclose_nr()
@@ -1361,39 +1377,37 @@ chk_fclose_nr()
local count
local ns_tx=$ns2
local ns_rx=$ns1
- local extra_msg=" "
+ local extra_msg=""

if [[ $ns_invert = "invert" ]]; then
ns_tx=$ns1
ns_rx=$ns2
- extra_msg=${extra_msg}"invert"
+ extra_msg="invert"
fi

- printf "%-${nr_blank}s %s" " " "ctx"
+ print_check "ctx"
count=$(get_counter ${ns_tx} "MPTcpExtMPFastcloseTx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$fclose_tx" ]; then
extra_msg="$extra_msg,tx=$count"
- echo "[fail] got $count MP_FASTCLOSE[s] TX expected $fclose_tx"
- fail_test
+ fail_test "got $count MP_FASTCLOSE[s] TX expected $fclose_tx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - fclzrx"
+ print_check "fclzrx"
count=$(get_counter ${ns_rx} "MPTcpExtMPFastcloseRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$fclose_rx" ]; then
extra_msg="$extra_msg,rx=$count"
- echo "[fail] got $count MP_FASTCLOSE[s] RX expected $fclose_rx"
- fail_test
+ fail_test "got $count MP_FASTCLOSE[s] RX expected $fclose_rx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo "$extra_msg"
+ print_info "$extra_msg"
}

chk_rst_nr()
@@ -1409,32 +1423,30 @@ chk_rst_nr()
if [[ $ns_invert = "invert" ]]; then
ns_tx=$ns2
ns_rx=$ns1
- extra_msg=" invert"
+ extra_msg="invert"
fi

- printf "%-${nr_blank}s %s" " " "rtx"
+ print_check "rtx"
count=$(get_counter ${ns_tx} "MPTcpExtMPRstTx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ $count -lt $rst_tx ]; then
- echo "[fail] got $count MP_RST[s] TX expected $rst_tx"
- fail_test
+ fail_test "got $count MP_RST[s] TX expected $rst_tx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - rstrx "
+ print_check "rstrx"
count=$(get_counter ${ns_rx} "MPTcpExtMPRstRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" -lt "$rst_rx" ]; then
- echo "[fail] got $count MP_RST[s] RX expected $rst_rx"
- fail_test
+ fail_test "got $count MP_RST[s] RX expected $rst_rx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo "$extra_msg"
+ print_info "$extra_msg"
}

chk_infi_nr()
@@ -1443,26 +1455,24 @@ chk_infi_nr()
local infi_rx=$2
local count

- printf "%-${nr_blank}s %s" " " "itx"
+ print_check "itx"
count=$(get_counter ${ns2} "MPTcpExtInfiniteMapTx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$infi_tx" ]; then
- echo "[fail] got $count infinite map[s] TX expected $infi_tx"
- fail_test
+ fail_test "got $count infinite map[s] TX expected $infi_tx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - infirx"
+ print_check "infirx"
count=$(get_counter ${ns1} "MPTcpExtInfiniteMapRx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$infi_rx" ]; then
- echo "[fail] got $count infinite map[s] RX expected $infi_rx"
- fail_test
+ fail_test "got $count infinite map[s] RX expected $infi_rx"
else
- echo "[ ok ]"
+ print_ok
fi
}

@@ -1479,51 +1489,47 @@ chk_join_nr()
local corrupted_pkts=${9:-0}
local count
local with_cookie
- local title="${TEST_NAME}"

if [ "${corrupted_pkts}" -gt 0 ]; then
- title+=": ${corrupted_pkts} corrupted pkts"
+ print_info "${corrupted_pkts} corrupted pkts"
fi

- printf "%03u %-36s %s" "${TEST_COUNT}" "${title}" "syn"
+ print_check "syn"
count=$(get_counter ${ns1} "MPTcpExtMPJoinSynRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$syn_nr" ]; then
- echo "[fail] got $count JOIN[s] syn expected $syn_nr"
- fail_test
+ fail_test "got $count JOIN[s] syn expected $syn_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - synack"
+ print_check "synack"
with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies)
count=$(get_counter ${ns2} "MPTcpExtMPJoinSynAckRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$syn_ack_nr" ]; then
# simult connections exceeding the limit with cookie enabled could go up to
# synack validation as the conn limit can be enforced reliably only after
# the subflow creation
if [ "$with_cookie" = 2 ] && [ "$count" -gt "$syn_ack_nr" ] && [ "$count" -le "$syn_nr" ]; then
- echo -n "[ ok ]"
+ print_ok
else
- echo "[fail] got $count JOIN[s] synack expected $syn_ack_nr"
- fail_test
+ fail_test "got $count JOIN[s] synack expected $syn_ack_nr"
fi
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - ack"
+ print_check "ack"
count=$(get_counter ${ns1} "MPTcpExtMPJoinAckRx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$ack_nr" ]; then
- echo "[fail] got $count JOIN[s] ack expected $ack_nr"
- fail_test
+ fail_test "got $count JOIN[s] ack expected $ack_nr"
else
- echo "[ ok ]"
+ print_ok
fi
if [ $validate_checksum -eq 1 ]; then
chk_csum_nr $csum_ns1 $csum_ns2
@@ -1548,22 +1554,21 @@ chk_stale_nr()
local stale_nr
local recover_nr

- printf "%-${nr_blank}s %-18s" " " "stale"
+ print_check "stale"

stale_nr=$(get_counter ${ns} "MPTcpExtSubflowStale")
recover_nr=$(get_counter ${ns} "MPTcpExtSubflowRecover")
if [ -z "$stale_nr" ] || [ -z "$recover_nr" ]; then
- echo "[skip]"
+ print_skip
elif [ $stale_nr -lt $stale_min ] ||
{ [ $stale_max -gt 0 ] && [ $stale_nr -gt $stale_max ]; } ||
[ $((stale_nr - recover_nr)) -ne $stale_delta ]; then
- echo "[fail] got $stale_nr stale[s] $recover_nr recover[s], " \
+ fail_test "got $stale_nr stale[s] $recover_nr recover[s], " \
" expected stale in range [$stale_min..$stale_max]," \
- " stale-recover delta $stale_delta "
- fail_test
+ " stale-recover delta $stale_delta"
dump_stats=1
else
- echo "[ ok ]"
+ print_ok
fi

if [ "${dump_stats}" = 1 ]; then
@@ -1588,103 +1593,93 @@ chk_add_nr()

timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)

- printf "%-${nr_blank}s %s" " " "add"
+ print_check "add"
count=$(get_counter ${ns2} "MPTcpExtAddAddr")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
# if the test configured a short timeout tolerate greater then expected
# add addrs options, due to retransmissions
elif [ "$count" != "$add_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_nr" ]; }; then
- echo "[fail] got $count ADD_ADDR[s] expected $add_nr"
- fail_test
+ fail_test "got $count ADD_ADDR[s] expected $add_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - echo "
+ print_check "echo"
count=$(get_counter ${ns1} "MPTcpExtEchoAdd")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$echo_nr" ]; then
- echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr"
- fail_test
+ fail_test "got $count ADD_ADDR echo[s] expected $echo_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

if [ $port_nr -gt 0 ]; then
- echo -n " - pt "
+ print_check "pt"
count=$(get_counter ${ns2} "MPTcpExtPortAdd")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$port_nr" ]; then
- echo "[fail] got $count ADD_ADDR[s] with a port-number expected $port_nr"
- fail_test
+ fail_test "got $count ADD_ADDR[s] with a port-number expected $port_nr"
else
- echo "[ ok ]"
+ print_ok
fi

- printf "%-${nr_blank}s %s" " " "syn"
+ print_check "syn"
count=$(get_counter ${ns1} "MPTcpExtMPJoinPortSynRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$syn_nr" ]; then
- echo "[fail] got $count JOIN[s] syn with a different \
- port-number expected $syn_nr"
- fail_test
+ fail_test "got $count JOIN[s] syn with a different \
+ port-number expected $syn_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - synack"
+ print_check "synack"
count=$(get_counter ${ns2} "MPTcpExtMPJoinPortSynAckRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$syn_ack_nr" ]; then
- echo "[fail] got $count JOIN[s] synack with a different \
- port-number expected $syn_ack_nr"
- fail_test
+ fail_test "got $count JOIN[s] synack with a different \
+ port-number expected $syn_ack_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - ack"
+ print_check "ack"
count=$(get_counter ${ns1} "MPTcpExtMPJoinPortAckRx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$ack_nr" ]; then
- echo "[fail] got $count JOIN[s] ack with a different \
- port-number expected $ack_nr"
- fail_test
+ fail_test "got $count JOIN[s] ack with a different \
+ port-number expected $ack_nr"
else
- echo "[ ok ]"
+ print_ok
fi

- printf "%-${nr_blank}s %s" " " "syn"
+ print_check "syn"
count=$(get_counter ${ns1} "MPTcpExtMismatchPortSynRx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$mis_syn_nr" ]; then
- echo "[fail] got $count JOIN[s] syn with a mismatched \
- port-number expected $mis_syn_nr"
- fail_test
+ fail_test "got $count JOIN[s] syn with a mismatched \
+ port-number expected $mis_syn_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - ack "
+ print_check "ack"
count=$(get_counter ${ns1} "MPTcpExtMismatchPortAckRx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$mis_ack_nr" ]; then
- echo "[fail] got $count JOIN[s] ack with a mismatched \
- port-number expected $mis_ack_nr"
- fail_test
+ fail_test "got $count JOIN[s] ack with a mismatched \
+ port-number expected $mis_ack_nr"
else
- echo "[ ok ]"
+ print_ok
fi
- else
- echo ""
fi
}

@@ -1697,28 +1692,26 @@ chk_add_tx_nr()

timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)

- printf "%-${nr_blank}s %s" " " "add TX"
+ print_check "add TX"
count=$(get_counter ${ns1} "MPTcpExtAddAddrTx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
# if the test configured a short timeout tolerate greater then expected
# add addrs options, due to retransmissions
elif [ "$count" != "$add_tx_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_tx_nr" ]; }; then
- echo "[fail] got $count ADD_ADDR[s] TX, expected $add_tx_nr"
- fail_test
+ fail_test "got $count ADD_ADDR[s] TX, expected $add_tx_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - echo TX "
+ print_check "echo TX"
count=$(get_counter ${ns2} "MPTcpExtEchoAddTx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$echo_tx_nr" ]; then
- echo "[fail] got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr"
- fail_test
+ fail_test "got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr"
else
- echo "[ ok ]"
+ print_ok
fi
}

@@ -1746,24 +1739,23 @@ chk_rm_nr()
elif [ $invert = "true" ]; then
addr_ns=$ns2
subflow_ns=$ns1
- extra_msg=" invert"
+ extra_msg="invert"
fi

- printf "%-${nr_blank}s %s" " " "rm "
+ print_check "rm"
count=$(get_counter ${addr_ns} "MPTcpExtRmAddr")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$rm_addr_nr" ]; then
- echo "[fail] got $count RM_ADDR[s] expected $rm_addr_nr"
- fail_test
+ fail_test "got $count RM_ADDR[s] expected $rm_addr_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - rmsf "
+ print_check "rmsf"
count=$(get_counter ${subflow_ns} "MPTcpExtRmSubflow")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ -n "$simult" ]; then
local cnt suffix

@@ -1775,34 +1767,31 @@ chk_rm_nr()
[ "$count" != "$rm_subflow_nr" ] && suffix="$count in [$rm_subflow_nr:$((rm_subflow_nr*2))]"
if [ $count -ge "$rm_subflow_nr" ] && \
[ "$count" -le "$((rm_subflow_nr *2 ))" ]; then
- echo -n "[ ok ] $suffix"
+ print_ok "$suffix"
else
- echo "[fail] got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]"
- fail_test
+ fail_test "got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]"
fi
elif [ "$count" != "$rm_subflow_nr" ]; then
- echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr"
- fail_test
+ fail_test "got $count RM_SUBFLOW[s] expected $rm_subflow_nr"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo "$extra_msg"
+ print_info "$extra_msg"
}

chk_rm_tx_nr()
{
local rm_addr_tx_nr=$1

- printf "%-${nr_blank}s %s" " " "rm TX "
+ print_check "rm TX"
count=$(get_counter ${ns2} "MPTcpExtRmAddrTx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$rm_addr_tx_nr" ]; then
- echo "[fail] got $count RM_ADDR[s] expected $rm_addr_tx_nr"
- fail_test
+ fail_test "got $count RM_ADDR[s] expected $rm_addr_tx_nr"
else
- echo "[ ok ]"
+ print_ok
fi
}

@@ -1812,52 +1801,44 @@ chk_prio_nr()
local mp_prio_nr_rx=$2
local count

- printf "%-${nr_blank}s %s" " " "ptx"
+ print_check "ptx"
count=$(get_counter ${ns1} "MPTcpExtMPPrioTx")
if [ -z "$count" ]; then
- echo -n "[skip]"
+ print_skip
elif [ "$count" != "$mp_prio_nr_tx" ]; then
- echo "[fail] got $count MP_PRIO[s] TX expected $mp_prio_nr_tx"
- fail_test
+ fail_test "got $count MP_PRIO[s] TX expected $mp_prio_nr_tx"
else
- echo -n "[ ok ]"
+ print_ok
fi

- echo -n " - prx "
+ print_check "prx"
count=$(get_counter ${ns1} "MPTcpExtMPPrioRx")
if [ -z "$count" ]; then
- echo "[skip]"
+ print_skip
elif [ "$count" != "$mp_prio_nr_rx" ]; then
- echo "[fail] got $count MP_PRIO[s] RX expected $mp_prio_nr_rx"
- fail_test
+ fail_test "got $count MP_PRIO[s] RX expected $mp_prio_nr_rx"
else
- echo "[ ok ]"
+ print_ok
fi
}

chk_subflow_nr()
{
- local need_title="$1"
- local msg="$2"
- local subflow_nr=$3
+ local msg="$1"
+ local subflow_nr=$2
local cnt1
local cnt2
local dump_stats

- if [ -n "${need_title}" ]; then
- printf "%03u %-36s %s" "${TEST_COUNT}" "${TEST_NAME}" "${msg}"
- else
- printf "%-${nr_blank}s %s" " " "${msg}"
- fi
+ print_check "${msg}"

cnt1=$(ss -N $ns1 -tOni | grep -c token)
cnt2=$(ss -N $ns2 -tOni | grep -c token)
if [ "$cnt1" != "$subflow_nr" ] || [ "$cnt2" != "$subflow_nr" ]; then
- echo "[fail] got $cnt1:$cnt2 subflows expected $subflow_nr"
- fail_test
+ fail_test "got $cnt1:$cnt2 subflows expected $subflow_nr"
dump_stats=1
else
- echo "[ ok ]"
+ print_ok
fi

if [ "${dump_stats}" = 1 ]; then
@@ -1877,7 +1858,7 @@ chk_mptcp_info()
local cnt2
local dump_stats

- printf "%-${nr_blank}s %-30s" " " "mptcp_info $info1:$info2=$exp1:$exp2"
+ print_check "mptcp_info ${info1:0:8}=$exp1:$exp2"

cnt1=$(ss -N $ns1 -inmHM | grep "$info1:" |
sed -n 's/.*\('"$info1"':\)\([[:digit:]]*\).*$/\2/p;q')
@@ -1888,11 +1869,10 @@ chk_mptcp_info()
[ -z "$cnt2" ] && cnt2=0

if [ "$cnt1" != "$exp1" ] || [ "$cnt2" != "$exp2" ]; then
- echo "[fail] got $cnt1:$cnt2 $info1:$info2 expected $exp1:$exp2"
- fail_test
+ fail_test "got $cnt1:$cnt2 $info1:$info2 expected $exp1:$exp2"
dump_stats=1
else
- echo "[ ok ]"
+ print_ok
fi

if [ "$dump_stats" = 1 ]; then
@@ -1914,13 +1894,12 @@ chk_link_usage()
local tx_rate=$((tx_link * 100 / tx_total))
local tolerance=5

- printf "%-${nr_blank}s %-18s" " " "link usage"
+ print_check "link usage"
if [ $tx_rate -lt $((expected_rate - tolerance)) ] || \
[ $tx_rate -gt $((expected_rate + tolerance)) ]; then
- echo "[fail] got $tx_rate% usage, expected $expected_rate%"
- fail_test
+ fail_test "got $tx_rate% usage, expected $expected_rate%"
else
- echo "[ ok ]"
+ print_ok
fi
}

@@ -2835,15 +2814,15 @@ verify_listener_events()
if [ $e_type = $LISTENER_CREATED ]; then
name="LISTENER_CREATED"
elif [ $e_type = $LISTENER_CLOSED ]; then
- name="LISTENER_CLOSED"
+ name="LISTENER_CLOSED "
else
name="$e_type"
fi

- printf "%-${nr_blank}s %s %s:%s " " " "$name" "$e_saddr" "$e_sport"
+ print_check "$name $e_saddr:$e_sport"

if ! mptcp_lib_kallsyms_has "mptcp_event_pm_listener$"; then
- printf "[skip]: event not supported\n"
+ print_skip "event not supported"
return
fi

@@ -2860,11 +2839,10 @@ verify_listener_events()
[ $family ] && [ $family = $e_family ] &&
[ $saddr ] && [ $saddr = $e_saddr ] &&
[ $sport ] && [ $sport = $e_sport ]; then
- echo "[ ok ]"
+ print_ok
return 0
fi
- fail_test
- echo "[fail]"
+ fail_test "$e_type:$type $e_family:$family $e_saddr:$saddr $e_sport:$sport"
}

add_addr_ports_tests()
@@ -3469,17 +3447,17 @@ endpoint_tests()
run_tests $ns1 $ns2 10.0.1.1 2>/dev/null &

wait_mpj $ns1
- pm_nl_check_endpoint 1 "creation" \
+ pm_nl_check_endpoint "creation" \
$ns2 10.0.2.2 id 1 flags implicit
chk_mptcp_info subflows 1 subflows 1
chk_mptcp_info add_addr_signal 1 add_addr_accepted 1

pm_nl_add_endpoint $ns2 10.0.2.2 id 33
- pm_nl_check_endpoint 0 "ID change is prevented" \
+ pm_nl_check_endpoint "ID change is prevented" \
$ns2 10.0.2.2 id 1 flags implicit

pm_nl_add_endpoint $ns2 10.0.2.2 flags signal
- pm_nl_check_endpoint 0 "modif is allowed" \
+ pm_nl_check_endpoint "modif is allowed" \
$ns2 10.0.2.2 id 1 flags signal
kill_tests_wait
fi
@@ -3493,17 +3471,17 @@ endpoint_tests()
run_tests $ns1 $ns2 10.0.1.1 2>/dev/null &

wait_mpj $ns2
- chk_subflow_nr needtitle "before delete" 2
+ chk_subflow_nr "before delete" 2
chk_mptcp_info subflows 1 subflows 1

pm_nl_del_endpoint $ns2 2 10.0.2.2
sleep 0.5
- chk_subflow_nr "" "after delete" 1
+ chk_subflow_nr "after delete" 1
chk_mptcp_info subflows 0 subflows 0

pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow
wait_mpj $ns2
- chk_subflow_nr "" "after re-add" 2
+ chk_subflow_nr "after re-add" 2
chk_mptcp_info subflows 1 subflows 1
kill_tests_wait
fi

--
2.40.1


2023-07-30 11:18:43

by Matthieu Baerts

[permalink] [raw]
Subject: [PATCH net-next 4/4] selftests: mptcp: userspace_pm: unmute unexpected errors

All pm_nl_ctl commands were muted. If there was an unexpected error with
one of them, this was simply not visible in the logs, making the
analysis very hard. It could also hide misuse of commands by mistake.

Now the output is only muted when we do expect to have an error, e.g.
when giving invalid arguments on purpose.

Reviewed-by: Mat Martineau <[email protected]>
Signed-off-by: Matthieu Baerts <[email protected]>
---
tools/testing/selftests/net/mptcp/userspace_pm.sh | 100 +++++++++++-----------
1 file changed, 50 insertions(+), 50 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 23f8959a8ea8..b25a3e33eb25 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -380,7 +380,7 @@ test_announce()
:>"$server_evts"
ip netns exec "$ns2"\
./pm_nl_ctl ann 10.0.2.2 token "$client4_token" id $client_addr_id dev\
- ns2eth1 > /dev/null 2>&1
+ ns2eth1
print_test "ADD_ADDR id:${client_addr_id} 10.0.2.2 (ns2) => ns1, reuse port"
sleep 0.5
verify_announce_event $server_evts $ANNOUNCED $server4_token "10.0.2.2" $client_addr_id \
@@ -389,7 +389,7 @@ test_announce()
# ADD_ADDR6 from the client to server machine reusing the subflow port
:>"$server_evts"
ip netns exec "$ns2" ./pm_nl_ctl ann\
- dead:beef:2::2 token "$client6_token" id $client_addr_id dev ns2eth1 > /dev/null 2>&1
+ dead:beef:2::2 token "$client6_token" id $client_addr_id dev ns2eth1
print_test "ADD_ADDR6 id:${client_addr_id} dead:beef:2::2 (ns2) => ns1, reuse port"
sleep 0.5
verify_announce_event "$server_evts" "$ANNOUNCED" "$server6_token" "dead:beef:2::2"\
@@ -399,7 +399,7 @@ test_announce()
:>"$server_evts"
client_addr_id=$((client_addr_id+1))
ip netns exec "$ns2" ./pm_nl_ctl ann 10.0.2.2 token "$client4_token" id\
- $client_addr_id dev ns2eth1 port $new4_port > /dev/null 2>&1
+ $client_addr_id dev ns2eth1 port $new4_port
print_test "ADD_ADDR id:${client_addr_id} 10.0.2.2 (ns2) => ns1, new port"
sleep 0.5
verify_announce_event "$server_evts" "$ANNOUNCED" "$server4_token" "10.0.2.2"\
@@ -410,7 +410,7 @@ test_announce()

# ADD_ADDR from the server to client machine reusing the subflow port
ip netns exec "$ns1" ./pm_nl_ctl ann 10.0.2.1 token "$server4_token" id\
- $server_addr_id dev ns1eth2 > /dev/null 2>&1
+ $server_addr_id dev ns1eth2
print_test "ADD_ADDR id:${server_addr_id} 10.0.2.1 (ns1) => ns2, reuse port"
sleep 0.5
verify_announce_event "$client_evts" "$ANNOUNCED" "$client4_token" "10.0.2.1"\
@@ -419,7 +419,7 @@ test_announce()
# ADD_ADDR6 from the server to client machine reusing the subflow port
:>"$client_evts"
ip netns exec "$ns1" ./pm_nl_ctl ann dead:beef:2::1 token "$server6_token" id\
- $server_addr_id dev ns1eth2 > /dev/null 2>&1
+ $server_addr_id dev ns1eth2
print_test "ADD_ADDR6 id:${server_addr_id} dead:beef:2::1 (ns1) => ns2, reuse port"
sleep 0.5
verify_announce_event "$client_evts" "$ANNOUNCED" "$client6_token" "dead:beef:2::1"\
@@ -429,7 +429,7 @@ test_announce()
:>"$client_evts"
server_addr_id=$((server_addr_id+1))
ip netns exec "$ns1" ./pm_nl_ctl ann 10.0.2.1 token "$server4_token" id\
- $server_addr_id dev ns1eth2 port $new4_port > /dev/null 2>&1
+ $server_addr_id dev ns1eth2 port $new4_port
print_test "ADD_ADDR id:${server_addr_id} 10.0.2.1 (ns1) => ns2, new port"
sleep 0.5
verify_announce_event "$client_evts" "$ANNOUNCED" "$client4_token" "10.0.2.1"\
@@ -490,7 +490,7 @@ test_remove()
# RM_ADDR from the client to server machine
:>"$server_evts"
ip netns exec "$ns2" ./pm_nl_ctl rem token "$client4_token" id\
- $client_addr_id > /dev/null 2>&1
+ $client_addr_id
print_test "RM_ADDR id:${client_addr_id} ns2 => ns1"
sleep 0.5
verify_remove_event "$server_evts" "$REMOVED" "$server4_token" "$client_addr_id"
@@ -499,7 +499,7 @@ test_remove()
:>"$server_evts"
client_addr_id=$(( client_addr_id - 1 ))
ip netns exec "$ns2" ./pm_nl_ctl rem token "$client4_token" id\
- $client_addr_id > /dev/null 2>&1
+ $client_addr_id
print_test "RM_ADDR id:${client_addr_id} ns2 => ns1"
sleep 0.5
verify_remove_event "$server_evts" "$REMOVED" "$server4_token" "$client_addr_id"
@@ -507,7 +507,7 @@ test_remove()
# RM_ADDR6 from the client to server machine
:>"$server_evts"
ip netns exec "$ns2" ./pm_nl_ctl rem token "$client6_token" id\
- $client_addr_id > /dev/null 2>&1
+ $client_addr_id
print_test "RM_ADDR6 id:${client_addr_id} ns2 => ns1"
sleep 0.5
verify_remove_event "$server_evts" "$REMOVED" "$server6_token" "$client_addr_id"
@@ -517,7 +517,7 @@ test_remove()

# RM_ADDR from the server to client machine
ip netns exec "$ns1" ./pm_nl_ctl rem token "$server4_token" id\
- $server_addr_id > /dev/null 2>&1
+ $server_addr_id
print_test "RM_ADDR id:${server_addr_id} ns1 => ns2"
sleep 0.5
verify_remove_event "$client_evts" "$REMOVED" "$client4_token" "$server_addr_id"
@@ -526,7 +526,7 @@ test_remove()
:>"$client_evts"
server_addr_id=$(( server_addr_id - 1 ))
ip netns exec "$ns1" ./pm_nl_ctl rem token "$server4_token" id\
- $server_addr_id > /dev/null 2>&1
+ $server_addr_id
print_test "RM_ADDR id:${server_addr_id} ns1 => ns2"
sleep 0.5
verify_remove_event "$client_evts" "$REMOVED" "$client4_token" "$server_addr_id"
@@ -534,7 +534,7 @@ test_remove()
# RM_ADDR6 from the server to client machine
:>"$client_evts"
ip netns exec "$ns1" ./pm_nl_ctl rem token "$server6_token" id\
- $server_addr_id > /dev/null 2>&1
+ $server_addr_id
print_test "RM_ADDR6 id:${server_addr_id} ns1 => ns2"
sleep 0.5
verify_remove_event "$client_evts" "$REMOVED" "$client6_token" "$server_addr_id"
@@ -610,18 +610,18 @@ test_subflows()

# Attempt to add a listener at 10.0.2.2:<subflow-port>
ip netns exec "$ns2" ./pm_nl_ctl listen 10.0.2.2\
- "$client4_port" > /dev/null 2>&1 &
+ "$client4_port" &
local listener_pid=$!

# ADD_ADDR from client to server machine reusing the subflow port
ip netns exec "$ns2" ./pm_nl_ctl ann 10.0.2.2 token "$client4_token" id\
- $client_addr_id > /dev/null 2>&1
+ $client_addr_id
sleep 0.5

# CREATE_SUBFLOW from server to client machine
:>"$server_evts"
ip netns exec "$ns1" ./pm_nl_ctl csf lip 10.0.2.1 lid 23 rip 10.0.2.2\
- rport "$client4_port" token "$server4_token" > /dev/null 2>&1
+ rport "$client4_port" token "$server4_token"
sleep 0.5
verify_subflow_events $server_evts $SUB_ESTABLISHED $server4_token $AF_INET "10.0.2.1" \
"10.0.2.2" "$client4_port" "23" "$client_addr_id" "ns1" "ns2"
@@ -635,31 +635,31 @@ test_subflows()
# DESTROY_SUBFLOW from server to client machine
:>"$server_evts"
ip netns exec "$ns1" ./pm_nl_ctl dsf lip 10.0.2.1 lport "$sport" rip 10.0.2.2 rport\
- "$client4_port" token "$server4_token" > /dev/null 2>&1
+ "$client4_port" token "$server4_token"
sleep 0.5
verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server4_token" "$AF_INET" "10.0.2.1"\
"10.0.2.2" "$client4_port" "23" "$client_addr_id" "ns1" "ns2"

# RM_ADDR from client to server machine
ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\
- "$client4_token" > /dev/null 2>&1
+ "$client4_token"
sleep 0.5

# Attempt to add a listener at dead:beef:2::2:<subflow-port>
ip netns exec "$ns2" ./pm_nl_ctl listen dead:beef:2::2\
- "$client6_port" > /dev/null 2>&1 &
+ "$client6_port" &
listener_pid=$!

# ADD_ADDR6 from client to server machine reusing the subflow port
:>"$server_evts"
ip netns exec "$ns2" ./pm_nl_ctl ann dead:beef:2::2 token "$client6_token" id\
- $client_addr_id > /dev/null 2>&1
+ $client_addr_id
sleep 0.5

# CREATE_SUBFLOW6 from server to client machine
:>"$server_evts"
ip netns exec "$ns1" ./pm_nl_ctl csf lip dead:beef:2::1 lid 23 rip\
- dead:beef:2::2 rport "$client6_port" token "$server6_token" > /dev/null 2>&1
+ dead:beef:2::2 rport "$client6_port" token "$server6_token"
sleep 0.5
verify_subflow_events "$server_evts" "$SUB_ESTABLISHED" "$server6_token" "$AF_INET6"\
"dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\
@@ -673,7 +673,7 @@ test_subflows()
# DESTROY_SUBFLOW6 from server to client machine
:>"$server_evts"
ip netns exec "$ns1" ./pm_nl_ctl dsf lip dead:beef:2::1 lport "$sport" rip\
- dead:beef:2::2 rport "$client6_port" token "$server6_token" > /dev/null 2>&1
+ dead:beef:2::2 rport "$client6_port" token "$server6_token"
sleep 0.5
verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server6_token" "$AF_INET6"\
"dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\
@@ -681,24 +681,24 @@ test_subflows()

# RM_ADDR from client to server machine
ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\
- "$client6_token" > /dev/null 2>&1
+ "$client6_token"
sleep 0.5

# Attempt to add a listener at 10.0.2.2:<new-port>
ip netns exec "$ns2" ./pm_nl_ctl listen 10.0.2.2\
- $new4_port > /dev/null 2>&1 &
+ $new4_port &
listener_pid=$!

# ADD_ADDR from client to server machine using a new port
:>"$server_evts"
ip netns exec "$ns2" ./pm_nl_ctl ann 10.0.2.2 token "$client4_token" id\
- $client_addr_id port $new4_port > /dev/null 2>&1
+ $client_addr_id port $new4_port
sleep 0.5

# CREATE_SUBFLOW from server to client machine
:>"$server_evts"
ip netns exec "$ns1" ./pm_nl_ctl csf lip 10.0.2.1 lid 23 rip 10.0.2.2 rport\
- $new4_port token "$server4_token" > /dev/null 2>&1
+ $new4_port token "$server4_token"
sleep 0.5
verify_subflow_events "$server_evts" "$SUB_ESTABLISHED" "$server4_token" "$AF_INET"\
"10.0.2.1" "10.0.2.2" "$new4_port" "23"\
@@ -712,32 +712,32 @@ test_subflows()
# DESTROY_SUBFLOW from server to client machine
:>"$server_evts"
ip netns exec "$ns1" ./pm_nl_ctl dsf lip 10.0.2.1 lport "$sport" rip 10.0.2.2 rport\
- $new4_port token "$server4_token" > /dev/null 2>&1
+ $new4_port token "$server4_token"
sleep 0.5
verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server4_token" "$AF_INET" "10.0.2.1"\
"10.0.2.2" "$new4_port" "23" "$client_addr_id" "ns1" "ns2"

# RM_ADDR from client to server machine
ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\
- "$client4_token" > /dev/null 2>&1
+ "$client4_token"

# Capture events on the network namespace running the client
:>"$client_evts"

# Attempt to add a listener at 10.0.2.1:<subflow-port>
ip netns exec "$ns1" ./pm_nl_ctl listen 10.0.2.1\
- $app4_port > /dev/null 2>&1 &
+ $app4_port &
listener_pid=$!

# ADD_ADDR from server to client machine reusing the subflow port
ip netns exec "$ns1" ./pm_nl_ctl ann 10.0.2.1 token "$server4_token" id\
- $server_addr_id > /dev/null 2>&1
+ $server_addr_id
sleep 0.5

# CREATE_SUBFLOW from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl csf lip 10.0.2.2 lid 23 rip 10.0.2.1 rport\
- $app4_port token "$client4_token" > /dev/null 2>&1
+ $app4_port token "$client4_token"
sleep 0.5
verify_subflow_events $client_evts $SUB_ESTABLISHED $client4_token $AF_INET "10.0.2.2"\
"10.0.2.1" "$app4_port" "23" "$server_addr_id" "ns2" "ns1"
@@ -750,31 +750,31 @@ test_subflows()
# DESTROY_SUBFLOW from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\
- $app4_port token "$client4_token" > /dev/null 2>&1
+ $app4_port token "$client4_token"
sleep 0.5
verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client4_token" "$AF_INET" "10.0.2.2"\
"10.0.2.1" "$app4_port" "23" "$server_addr_id" "ns2" "ns1"

# RM_ADDR from server to client machine
ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\
- "$server4_token" > /dev/null 2>&1
+ "$server4_token"
sleep 0.5

# Attempt to add a listener at dead:beef:2::1:<subflow-port>
ip netns exec "$ns1" ./pm_nl_ctl listen dead:beef:2::1\
- $app6_port > /dev/null 2>&1 &
+ $app6_port &
listener_pid=$!

# ADD_ADDR6 from server to client machine reusing the subflow port
:>"$client_evts"
ip netns exec "$ns1" ./pm_nl_ctl ann dead:beef:2::1 token "$server6_token" id\
- $server_addr_id > /dev/null 2>&1
+ $server_addr_id
sleep 0.5

# CREATE_SUBFLOW6 from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl csf lip dead:beef:2::2 lid 23 rip\
- dead:beef:2::1 rport $app6_port token "$client6_token" > /dev/null 2>&1
+ dead:beef:2::1 rport $app6_port token "$client6_token"
sleep 0.5
verify_subflow_events "$client_evts" "$SUB_ESTABLISHED" "$client6_token"\
"$AF_INET6" "dead:beef:2::2"\
@@ -789,31 +789,31 @@ test_subflows()
# DESTROY_SUBFLOW6 from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl dsf lip dead:beef:2::2 lport "$sport" rip\
- dead:beef:2::1 rport $app6_port token "$client6_token" > /dev/null 2>&1
+ dead:beef:2::1 rport $app6_port token "$client6_token"
sleep 0.5
verify_subflow_events $client_evts $SUB_CLOSED $client6_token $AF_INET6 "dead:beef:2::2"\
"dead:beef:2::1" "$app6_port" "23" "$server_addr_id" "ns2" "ns1"

# RM_ADDR6 from server to client machine
ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\
- "$server6_token" > /dev/null 2>&1
+ "$server6_token"
sleep 0.5

# Attempt to add a listener at 10.0.2.1:<new-port>
ip netns exec "$ns1" ./pm_nl_ctl listen 10.0.2.1\
- $new4_port > /dev/null 2>&1 &
+ $new4_port &
listener_pid=$!

# ADD_ADDR from server to client machine using a new port
:>"$client_evts"
ip netns exec "$ns1" ./pm_nl_ctl ann 10.0.2.1 token "$server4_token" id\
- $server_addr_id port $new4_port > /dev/null 2>&1
+ $server_addr_id port $new4_port
sleep 0.5

# CREATE_SUBFLOW from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl csf lip 10.0.2.2 lid 23 rip 10.0.2.1 rport\
- $new4_port token "$client4_token" > /dev/null 2>&1
+ $new4_port token "$client4_token"
sleep 0.5
verify_subflow_events "$client_evts" "$SUB_ESTABLISHED" "$client4_token" "$AF_INET"\
"10.0.2.2" "10.0.2.1" "$new4_port" "23" "$server_addr_id" "ns2" "ns1"
@@ -826,14 +826,14 @@ test_subflows()
# DESTROY_SUBFLOW from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\
- $new4_port token "$client4_token" > /dev/null 2>&1
+ $new4_port token "$client4_token"
sleep 0.5
verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client4_token" "$AF_INET" "10.0.2.2"\
"10.0.2.1" "$new4_port" "23" "$server_addr_id" "ns2" "ns1"

# RM_ADDR from server to client machine
ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\
- "$server4_token" > /dev/null 2>&1
+ "$server4_token"
}

test_subflows_v4_v6_mix()
@@ -842,14 +842,14 @@ test_subflows_v4_v6_mix()

# Attempt to add a listener at 10.0.2.1:<subflow-port>
ip netns exec "$ns1" ./pm_nl_ctl listen 10.0.2.1\
- $app6_port > /dev/null 2>&1 &
+ $app6_port &
local listener_pid=$!

# ADD_ADDR4 from server to client machine reusing the subflow port on
# the established v6 connection
:>"$client_evts"
ip netns exec "$ns1" ./pm_nl_ctl ann 10.0.2.1 token "$server6_token" id\
- $server_addr_id dev ns1eth2 > /dev/null 2>&1
+ $server_addr_id dev ns1eth2
print_test "ADD_ADDR4 id:${server_addr_id} 10.0.2.1 (ns1) => ns2, reuse port"
sleep 0.5
verify_announce_event "$client_evts" "$ANNOUNCED" "$client6_token" "10.0.2.1"\
@@ -858,7 +858,7 @@ test_subflows_v4_v6_mix()
# CREATE_SUBFLOW from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl csf lip 10.0.2.2 lid 23 rip 10.0.2.1 rport\
- $app6_port token "$client6_token" > /dev/null 2>&1
+ $app6_port token "$client6_token"
sleep 0.5
verify_subflow_events "$client_evts" "$SUB_ESTABLISHED" "$client6_token"\
"$AF_INET" "10.0.2.2" "10.0.2.1" "$app6_port" "23"\
@@ -872,7 +872,7 @@ test_subflows_v4_v6_mix()
# DESTROY_SUBFLOW from client to server machine
:>"$client_evts"
ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\
- $app6_port token "$client6_token" > /dev/null 2>&1
+ $app6_port token "$client6_token"
sleep 0.5
verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client6_token" \
"$AF_INET" "10.0.2.2" "10.0.2.1" "$app6_port" "23"\
@@ -880,7 +880,7 @@ test_subflows_v4_v6_mix()

# RM_ADDR from server to client machine
ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\
- "$server6_token" > /dev/null 2>&1
+ "$server6_token"
sleep 0.5
}

@@ -965,7 +965,7 @@ test_listener()

# Attempt to add a listener at 10.0.2.2:<subflow-port>
ip netns exec $ns2 ./pm_nl_ctl listen 10.0.2.2\
- $client4_port > /dev/null 2>&1 &
+ $client4_port &
local listener_pid=$!

sleep 0.5
@@ -973,12 +973,12 @@ test_listener()

# ADD_ADDR from client to server machine reusing the subflow port
ip netns exec $ns2 ./pm_nl_ctl ann 10.0.2.2 token $client4_token id\
- $client_addr_id > /dev/null 2>&1
+ $client_addr_id
sleep 0.5

# CREATE_SUBFLOW from server to client machine
ip netns exec $ns1 ./pm_nl_ctl csf lip 10.0.2.1 lid 23 rip 10.0.2.2\
- rport $client4_port token $server4_token > /dev/null 2>&1
+ rport $client4_port token $server4_token
sleep 0.5

# Delete the listener from the client ns, if one was created

--
2.40.1


2023-08-01 04:00:04

by patchwork-bot+netdevbpf

[permalink] [raw]
Subject: Re: [PATCH net-next 0/4] mptcp: cleanup and improvements in the selftests

Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <[email protected]>:

On Sun, 30 Jul 2023 10:05:14 +0200 you wrote:
> This small series of 4 patches adds some improvements in MPTCP
> selftests:
>
> - Patch 1 reworks the detailed report of mptcp_join.sh selftest to
> better display what went well or wrong per test.
>
> - Patch 2 adds colours (if supported, forced and/or not disabled) in
> mptcp_join.sh selftest output to help spotting issues.
>
> [...]

Here is the summary with links:
- [net-next,1/4] selftests: mptcp: join: rework detailed report
https://git.kernel.org/netdev/net-next/c/03668c65d153
- [net-next,2/4] selftests: mptcp: join: colored results
https://git.kernel.org/netdev/net-next/c/9466df1a27d5
- [net-next,3/4] selftests: mptcp: pm_nl_ctl: always look for errors
https://git.kernel.org/netdev/net-next/c/1dc88d241f92
- [net-next,4/4] selftests: mptcp: userspace_pm: unmute unexpected errors
https://git.kernel.org/netdev/net-next/c/6a5c8c69a4c7

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html