File Index
Files and directories
Sign in
FILE

run_kselftest.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/run_kselftest.sh BASH
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0
  3#
  4# Run installed kselftest tests.
  5#
  6
  7# Fallback to readlink if realpath is not available
  8if which realpath > /dev/null; then
  9        BASE_DIR=$(realpath $(dirname $0))
 10else
 11        BASE_DIR=$(readlink -f $(dirname $0))
 12fi
 13
 14cd $BASE_DIR
 15TESTS="$BASE_DIR"/kselftest-list.txt
 16if [ ! -r "$TESTS" ] ; then
 17	echo "$0: Could not find list of tests to run ($TESTS)" >&2
 18	available=""
 19else
 20	available="$(cat "$TESTS")"
 21fi
 22
 23. ./kselftest/runner.sh
 24ROOT=$PWD
 25
 26usage()
 27{
 28	cat <<EOF
 29Usage: $0 [OPTIONS]
 30  -s | --summary		Print summary with detailed log in output.log (conflict with -p)
 31  -p | --per-test-log		Print test log in /tmp with each test name (conflict with -s)
 32  -t | --test COLLECTION:TEST	Run TEST from COLLECTION
 33  -c | --collection COLLECTION	Run all tests from COLLECTION
 34  -l | --list			List the available collection:test entries
 35  -d | --dry-run		Don't actually run any tests
 36  -f | --no-error-on-fail	Don't exit with an error just because tests failed
 37  -n | --netns			Run each test in namespace
 38  -h | --help			Show this usage info
 39  -o | --override-timeout	Number of seconds after which we timeout
 40EOF
 41	exit $1
 42}
 43
 44COLLECTIONS=""
 45TESTS=""
 46dryrun=""
 47kselftest_override_timeout=""
 48ERROR_ON_FAIL=true
 49while true; do
 50	case "$1" in
 51		-s | --summary)
 52			logfile="$BASE_DIR"/output.log
 53			cat /dev/null > $logfile
 54			shift ;;
 55		-p | --per-test-log)
 56			per_test_logging=1
 57			shift ;;
 58		-t | --test)
 59			TESTS="$TESTS $2"
 60			shift 2 ;;
 61		-c | --collection)
 62			COLLECTIONS="$COLLECTIONS $2"
 63			shift 2 ;;
 64		-l | --list)
 65			echo "$available"
 66			exit 0 ;;
 67		-d | --dry-run)
 68			dryrun="echo"
 69			shift ;;
 70		-f | --no-error-on-fail)
 71			ERROR_ON_FAIL=false
 72			shift ;;
 73		-n | --netns)
 74			RUN_IN_NETNS=1
 75			shift ;;
 76		-o | --override-timeout)
 77			kselftest_override_timeout="$2"
 78			shift 2 ;;
 79		-h | --help)
 80			usage 0 ;;
 81		"")
 82			break ;;
 83		*)
 84			usage 1 ;;
 85	esac
 86done
 87
 88# Add all selected collections to the explicit test list.
 89if [ -n "$COLLECTIONS" ]; then
 90	for collection in $COLLECTIONS ; do
 91		found="$(echo "$available" | grep "^$collection:")"
 92		if [ -z "$found" ] ; then
 93			echo "No such collection '$collection'" >&2
 94			exit 1
 95		fi
 96		TESTS="$TESTS $found"
 97	done
 98fi
 99# Replace available test list with explicitly selected tests.
100if [ -n "$TESTS" ]; then
101	valid=""
102	for test in $TESTS ; do
103		found="$(echo "$available" | grep "^${test}$")"
104		if [ -z "$found" ] ; then
105			echo "No such test '$test'" >&2
106			exit 1
107		fi
108		valid="$valid $found"
109	done
110	available="$(echo "$valid" | sed -e 's/ /\n/g')"
111fi
112
113kselftest_failures_file="$(mktemp --tmpdir kselftest-failures-XXXXXX)"
114export kselftest_failures_file
115
116collections=$(echo "$available" | cut -d: -f1 | sort | uniq)
117for collection in $collections ; do
118	[ -w /dev/kmsg ] && echo "kselftest: Running tests in $collection" >> /dev/kmsg
119	tests=$(echo "$available" | grep "^$collection:" | cut -d: -f2)
120	($dryrun cd "$collection" && $dryrun run_many $tests)
121done
122
123failures="$(cat "$kselftest_failures_file")"
124rm "$kselftest_failures_file"
125if "$ERROR_ON_FAIL" && [ "$failures" ]; then
126	exit 1
127fi
~/ Read-only file preview.