diff options
| author | Ricardo B. Marlière <rbm@suse.com> | 2026-03-20 21:29:19 +0300 |
|---|---|---|
| committer | Shuah Khan <skhan@linuxfoundation.org> | 2026-04-13 20:05:39 +0300 |
| commit | d6ea9f404b905ba7351d6b0e9ed611d9d0bf20f7 (patch) | |
| tree | 6e13c09be0fd1affa9a30ca9b0ca4955aeb1c77c | |
| parent | a82e076f4a0c084b2f5470db31dd9282ba3fcbb2 (diff) | |
| download | linux-d6ea9f404b905ba7351d6b0e9ed611d9d0bf20f7.tar.xz | |
selftests/run_kselftest.sh: Allow choosing per-test log directory
The --per-test-log option currently hard-codes /tmp. However, the system
under test will most likely have tmpfs mounted there. Since it's not clear
which filenames the log files will have, the user should be able to specify
a persistent directory to store the logs. Keeping those logs are important
because the run_kselftest.sh runner will only yield KTAP output, trimming
information that is otherwise available through running individual tests
directly.
Allow --per-test-log to take an optional directory argument. Keep the
existing behaviour when the option is passed without an argument, but if
a directory is provided, create it if needed, reject non-directory paths
and non-writable directories, canonicalize it, and have runner.sh write
per-test logs there instead of /tmp.
This also makes relative paths safe by resolving them before the runner
changes into a collection directory.
Signed-off-by: Ricardo B. Marlière <rbm@suse.com>
Link: https://lore.kernel.org/r/20260320-selftests-fixes-v1-4-79144f76be01@suse.com
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
| -rw-r--r-- | tools/testing/selftests/kselftest/runner.sh | 3 | ||||
| -rwxr-xr-x | tools/testing/selftests/run_kselftest.sh | 30 |
2 files changed, 30 insertions, 3 deletions
diff --git a/tools/testing/selftests/kselftest/runner.sh b/tools/testing/selftests/kselftest/runner.sh index 3eeec93c9da4..6da3390825fe 100644 --- a/tools/testing/selftests/kselftest/runner.sh +++ b/tools/testing/selftests/kselftest/runner.sh @@ -6,6 +6,7 @@ export timeout_rc=124 export logfile=/dev/stdout export per_test_logging= +export per_test_log_dir=/tmp export RUN_IN_NETNS= # Defaults for "settings" file fields: @@ -196,7 +197,7 @@ run_many() BASENAME_TEST=$(basename $TEST) test_num=$(( test_num + 1 )) if [ -n "$per_test_logging" ]; then - logfile="/tmp/$BASENAME_TEST" + logfile="$per_test_log_dir/$BASENAME_TEST" cat /dev/null > "$logfile" fi if [ -n "$RUN_IN_NETNS" ]; then diff --git a/tools/testing/selftests/run_kselftest.sh b/tools/testing/selftests/run_kselftest.sh index 8fa808e10455..e11b0e93ba41 100755 --- a/tools/testing/selftests/run_kselftest.sh +++ b/tools/testing/selftests/run_kselftest.sh @@ -22,7 +22,7 @@ usage() cat <<EOF Usage: $0 [OPTIONS] -s | --summary Print summary with detailed log in output.log (conflict with -p) - -p | --per-test-log Print test log in /tmp with each test name (conflict with -s) + -p | --per-test-log [DIR] Print test log in /tmp or DIR with each test name (conflict with -s) -t | --test COLLECTION:TEST Run TEST from COLLECTION -S | --skip COLLECTION:TEST Skip TEST from COLLECTION -c | --collection COLLECTION Run all tests from COLLECTION @@ -50,7 +50,33 @@ while true; do shift ;; -p | --per-test-log) per_test_logging=1 - shift ;; + if [ -n "$2" ] && [ "${2#-}" = "$2" ]; then + per_test_log_dir="$2" + if [ -e "$per_test_log_dir" ] && [ ! -d "$per_test_log_dir" ]; then + echo "Per-test log path is not a dir:" \ + "$per_test_log_dir" >&2 + exit 1 + fi + if [ ! -d "$per_test_log_dir" ] && \ + ! mkdir -p "$per_test_log_dir"; then + echo "Could not create log dir:" \ + "$per_test_log_dir" >&2 + exit 1 + fi + per_test_log_dir=$(cd "$per_test_log_dir" && pwd -P) + if [ -z "$per_test_log_dir" ]; then + echo "Could not resolve per-test log directory" >&2 + exit 1 + fi + if [ ! -w "$per_test_log_dir" ]; then + echo "Per-test log dir is not writable:" \ + "$per_test_log_dir" >&2 + exit 1 + fi + shift 2 + else + shift + fi ;; -t | --test) TESTS="$TESTS $2" shift 2 ;; |
