selftests: mptcp: lib: catch duplicated subtest entries
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Fri, 23 Feb 2024 20:17:53 +0000 (21:17 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 27 Feb 2024 02:42:11 +0000 (18:42 -0800)
It is important to have a unique (sub)test name in TAP, because some CI
environments drop tests with duplicated name.

When adding a new subtest entry, an error message is printed in case of
duplicated entries. If there were duplicated entries and if all features
were expected to work, the script exits with an error at the end, after
having printed all subtests in the TAP format. Thanks to that, the MPTCP
CI will catch such issues early.

Reviewed-by: Geliang Tang <geliang@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://lore.kernel.org/r/20240223-upstream-net-next-20240223-misc-improvements-v1-1-b6c8a10396bd@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/mptcp/mptcp_lib.sh

index 3a2abae..037cb3e 100644 (file)
@@ -9,6 +9,7 @@ readonly KSFT_SKIP=4
 readonly KSFT_TEST="${MPTCP_LIB_KSFT_TEST:-$(basename "${0}" .sh)}"
 
 MPTCP_LIB_SUBTESTS=()
+MPTCP_LIB_SUBTESTS_DUPLICATED=0
 
 # only if supported (or forced) and not disabled, see no-color.org
 if { [ -t 1 ] || [ "${SELFTESTS_MPTCP_LIB_COLOR_FORCE:-}" = "1" ]; } &&
@@ -146,12 +147,26 @@ mptcp_lib_kversion_ge() {
        mptcp_lib_fail_if_expected_feature "kernel version ${1} lower than ${v}"
 }
 
+__mptcp_lib_result_check_duplicated() {
+       local subtest
+
+       for subtest in "${MPTCP_LIB_SUBTESTS[@]}"; do
+               if [[ "${subtest}" == *" - ${KSFT_TEST}: ${*%% #*}" ]]; then
+                       MPTCP_LIB_SUBTESTS_DUPLICATED=1
+                       mptcp_lib_print_err "Duplicated entry: ${*}"
+                       break
+               fi
+       done
+}
+
 __mptcp_lib_result_add() {
        local result="${1}"
        shift
 
        local id=$((${#MPTCP_LIB_SUBTESTS[@]} + 1))
 
+       __mptcp_lib_result_check_duplicated "${*}"
+
        MPTCP_LIB_SUBTESTS+=("${result} ${id} - ${KSFT_TEST}: ${*}")
 }
 
@@ -206,6 +221,12 @@ mptcp_lib_result_print_all_tap() {
        for subtest in "${MPTCP_LIB_SUBTESTS[@]}"; do
                printf "%s\n" "${subtest}"
        done
+
+       if [ "${MPTCP_LIB_SUBTESTS_DUPLICATED}" = 1 ] &&
+          mptcp_lib_expect_all_features; then
+               mptcp_lib_print_err "Duplicated test entries"
+               exit ${KSFT_FAIL}
+       fi
 }
 
 # get the value of keyword $1 in the line marked by keyword $2