From: Ido Schimmel idosch@nvidia.com
[ Upstream commit 47efbac9b768553331b9459743a29861e0acd797 ]
Use require_command() so that the test will return SKIP (4) when a required command is not present.
Before:
# ./traceroute.sh SKIP: Could not run IPV6 test without traceroute6 SKIP: Could not run IPV4 test without traceroute $ echo $? 0
After:
# ./traceroute.sh TEST: traceroute6 not installed [SKIP] $ echo $? 4
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-6-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 bug in selftests reporting: when traceroute binaries are missing, the script previously exited 0 (PASS) after printing a manual “SKIP” message, which hides missing test coverage from harnesses and CI. The change standardizes behavior to return the kselftest skip code (4), matching framework expectations. - Small, contained change limited to selftests; no kernel code touched, no ABI or API impact, no architectural changes.
Specifics in the code: - The script sources the common helpers, so `require_command()` is available: tools/testing/selftests/net/traceroute.sh:7. - Inline, ad hoc checks are removed from the test bodies: - run_traceroute6(): drops the `command -v traceroute6` guard and manual “SKIP” echo shown in the diff. - run_traceroute(): drops the `command -v traceroute` guard and manual “SKIP” echo shown in the diff. This eliminates duplicate logic and prevents returning success on missing deps. - Centralized, framework-compliant dependency checks are added before running tests: - tools/testing/selftests/net/traceroute.sh:463 `require_command traceroute6` - tools/testing/selftests/net/traceroute.sh:464 `require_command traceroute` - The helper `require_command()` is defined in the shared library: - tools/testing/selftests/net/lib.sh:537 `require_command()` calls `check_command`, which logs a SKIP via `log_test_skip` and then exits with `EXIT_STATUS`. - The kselftest constants define skip as 4: tools/testing/selftests/net/lib.sh:22 `ksft_skip=4`. Consequently, when the command is missing, the script prints “TEST: <cmd> not installed [SKIP]” and exits 4, exactly as described in the commit message.
Risk and compatibility: - Effect is limited to how the test reports missing prerequisites. This aligns traceroute.sh with many other selftests already using `require_command` (e.g., tools/testing/selftests/net/rtnetlink_notification.sh:108), improving consistency across the selftests suite. - One behavioral change: if either `traceroute6` or `traceroute` is missing, the entire script will SKIP early rather than partially running the remaining tests. This is a reasonable and common selftests convention, and it avoids false PASS outcomes. It does not affect kernel behavior.
Stable backport criteria: - Addresses test correctness and CI signal integrity (important for users running selftests). - Minimal, localized change with very low regression risk. - No features or architectural shifts; purely a selftest reliability fix. - Consistent with established kselftest patterns and constants.
Given these points, this is a safe and beneficial selftest fix appropriate for stable trees.
tools/testing/selftests/net/traceroute.sh | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/tools/testing/selftests/net/traceroute.sh b/tools/testing/selftests/net/traceroute.sh index 282f14760940d..b50e52afa4f49 100755 --- a/tools/testing/selftests/net/traceroute.sh +++ b/tools/testing/selftests/net/traceroute.sh @@ -203,11 +203,6 @@ setup_traceroute6()
run_traceroute6() { - if [ ! -x "$(command -v traceroute6)" ]; then - echo "SKIP: Could not run IPV6 test without traceroute6" - return - fi - setup_traceroute6
# traceroute6 host-2 from host-1 (expects 2000:102::2) @@ -268,11 +263,6 @@ setup_traceroute()
run_traceroute() { - if [ ! -x "$(command -v traceroute)" ]; then - echo "SKIP: Could not run IPV4 test without traceroute" - return - fi - setup_traceroute
# traceroute host-2 from host-1 (expects 1.0.1.1). Takes a while. @@ -306,6 +296,9 @@ do esac done
+require_command traceroute6 +require_command traceroute + run_tests
printf "\nTests passed: %3d\n" ${nsuccess}