Commit df410ad4 authored by Mark Brown's avatar Mark Brown Committed by Shuah Khan
Browse files

selftests: Fix runner.sh for non-bash shells

Commit 2964f6b8 ("selftests: Use ktap helpers for runner.sh") added a
number of bashisms and updated the interpreter specified for the script to
be /bin/bash to reflect this. Unfortunately this does not actually achieve
anything in production since the main way runner.sh is invoked is from the
top level run_kselftest.sh which sources it rather than running it as a
separate script and specifies the shell as /bin/sh. This means that on
systems where /bin/sh is not bash (such as Debian where /bin/sh defaults to
being dash) we see failures:

./run_kselftest.sh: 195: ./kselftest/runner.sh: Syntax error: "(" unexpected (expecting "}")

These bashisms come from this part of the change:

  4. In runner.sh run_one(), get the return value and use ktap helpers for
     all pass/fail reporting. This allows counting pass/fail numbers in the
     main process.

which uses a bash array to track all the subtests being run. Convert this
to use a simple flat variable instead.

Link: https://lore.kernel.org/r/20260416-selftest-fix-readlink-e-v1-2-94e4cabbdec4@kernel.org


Fixes: 2964f6b8 ("selftests: Use ktap helpers for runner.sh")
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 93edbf17
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
#!/bin/bash
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
#
# Runs a set of tests in a given subdirectory.
@@ -193,7 +193,7 @@ run_many()
	DIR="${PWD#${BASE_DIR}/}"
	test_num=0
	local rc
	pids=()
	pids=

	for TEST in "$@"; do
		BASENAME_TEST=$(basename $TEST)
@@ -204,7 +204,7 @@ run_many()
		fi
		if [ -n "$RUN_IN_NETNS" ]; then
			run_in_netns &
			pids+=($!)
			pids="$pids $!"
		else
			run_one "$DIR" "$TEST" "$test_num"
		fi
@@ -212,7 +212,7 @@ run_many()

	# These variables are outputs of ktap_helpers.sh but since we've
	# run the test in a subprocess we need to update them manually
	for pid in "${pids[@]}"; do
	for pid in $pids; do
		wait "$pid"
		rc=$?
		case "$rc" in