From: Ido Schimmel idosch@nvidia.com
[ Upstream commit c068ba9d3ded56cb1ba4d5135ee84bf8039bd563 ]
The test always returns success even if some tests were modified to fail. Fix by converting the test to use the appropriate library functions instead of using its own functions.
Before:
# ./traceroute.sh TEST: IPV6 traceroute [FAIL] TEST: IPV4 traceroute [ OK ]
Tests passed: 1 Tests failed: 1 $ echo $? 0
After:
# ./traceroute.sh TEST: IPv6 traceroute [FAIL] traceroute6 did not return 2000:102::2 TEST: IPv4 traceroute [ OK ] $ echo $? 1
Reviewed-by: Petr Machata petrm@nvidia.com Reviewed-by: David Ahern dsahern@kernel.org Signed-off-by: Ido Schimmel idosch@nvidia.com Link: https://patch.msgid.link/20250908073238.119240-5-idosch@nvidia.com Signed-off-by: Paolo Abeni pabeni@redhat.com Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
YES
- Fixes a real test bug: Previously the script always exited 0 even when subtests failed, making CI and automation miss failures. The commit switches the test to the common kselftest lib flow so a failing subtest yields a non‑zero exit. - Before: the script had its own `log_test()` that bumped `nsuccess`/`nfail` and set a `ret=1`, but the script ended by only printing counts, not propagating failure via exit status. - Removed custom `log_test()` and the `nsuccess`/`nfail` counters block at the end. See deletions in `tools/testing/selftests/net/traceroute.sh` where the local `log_test()` function and the final prints are removed. - After: uses standard helpers and exit path from `lib.sh`, so failures are reflected in the exit status. - Adds per‑test `RET=0` initializations and converts checks to `check_err`/`log_test`: - `tools/testing/selftests/net/traceroute.sh:171` sets `RET=0` at the start of `run_traceroute6()`, then: - Replaces `log_test $? 0 "IPV6 traceroute"` with `check_err $? "traceroute6 did not return 2000:102::2"` followed by `log_test "IPv6 traceroute"`. - `tools/testing/selftests/net/traceroute.sh:239` sets `RET=0` at the start of `run_traceroute()`, then: - Replaces `log_test $? 0 "IPV4 traceroute"` with `check_err $? "traceroute did not return 1.0.1.1"` followed by `log_test "IPv4 traceroute"`. - Returns the aggregated status via kselftest’s exit variable: `tools/testing/selftests/net/traceroute.sh:...` changes the tail to `exit "${EXIT_STATUS}"` instead of printing counters. - These helpers are provided by the shared library already sourced at the top (`source lib.sh`), which defines `EXIT_STATUS`, `RET`, `check_err`, and `log_test` (e.g., `tools/testing/selftests/net/lib.sh:1`, `tools/testing/selftests/net/lib.sh:...`).
- Small and contained: Only modifies `tools/testing/selftests/net/traceroute.sh`. No in‑kernel code or interfaces change. Behavior of the tests themselves (what they check) remains the same; only the reporting/exit semantics are corrected and standardized.
- Minimal regression risk: Test-only change. Aligns with established kselftest patterns, improves reliability of test outcomes. Output format is standardized (e.g., “IPv6” casing), and failures now print a clear reason via `check_err`.
- Stable criteria fit: - Fixes an important usability bug in the test suite (exit status), which affects automated testing and validation workflows. - No new features or architectural changes; purely a correctness fix to selftests. - Touches a noncritical area (selftests), so risk is negligible. - Even though the commit message does not explicitly Cc stable, selftest fixes of this nature are commonly accepted to stabilize testing in stable trees.
Conclusion: Backporting improves CI fidelity for stable kernels with no kernel runtime risk.
tools/testing/selftests/net/traceroute.sh | 38 ++++++----------------- 1 file changed, 9 insertions(+), 29 deletions(-)
diff --git a/tools/testing/selftests/net/traceroute.sh b/tools/testing/selftests/net/traceroute.sh index b50e52afa4f49..1ac91eebd16f5 100755 --- a/tools/testing/selftests/net/traceroute.sh +++ b/tools/testing/selftests/net/traceroute.sh @@ -10,28 +10,6 @@ PAUSE_ON_FAIL=no
################################################################################ # -log_test() -{ - local rc=$1 - local expected=$2 - local msg="$3" - - if [ ${rc} -eq ${expected} ]; then - printf "TEST: %-60s [ OK ]\n" "${msg}" - nsuccess=$((nsuccess+1)) - else - ret=1 - nfail=$((nfail+1)) - printf "TEST: %-60s [FAIL]\n" "${msg}" - if [ "${PAUSE_ON_FAIL}" = "yes" ]; then - echo - echo "hit enter to continue, 'q' to quit" - read a - [ "$a" = "q" ] && exit 1 - fi - fi -} - run_cmd() { local ns @@ -205,9 +183,12 @@ run_traceroute6() { setup_traceroute6
+ RET=0 + # traceroute6 host-2 from host-1 (expects 2000:102::2) run_cmd $h1 "traceroute6 2000:103::4 | grep -q 2000:102::2" - log_test $? 0 "IPV6 traceroute" + check_err $? "traceroute6 did not return 2000:102::2" + log_test "IPv6 traceroute"
cleanup_traceroute6 } @@ -265,9 +246,12 @@ run_traceroute() { setup_traceroute
+ RET=0 + # traceroute host-2 from host-1 (expects 1.0.1.1). Takes a while. run_cmd $h1 "traceroute 1.0.2.4 | grep -q 1.0.1.1" - log_test $? 0 "IPV4 traceroute" + check_err $? "traceroute did not return 1.0.1.1" + log_test "IPv4 traceroute"
cleanup_traceroute } @@ -284,9 +268,6 @@ run_tests() ################################################################################ # main
-declare -i nfail=0 -declare -i nsuccess=0 - while getopts :pv o do case $o in @@ -301,5 +282,4 @@ require_command traceroute
run_tests
-printf "\nTests passed: %3d\n" ${nsuccess} -printf "Tests failed: %3d\n" ${nfail} +exit "${EXIT_STATUS}"