xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/run_kselftest.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard Worker#!/bin/sh
2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0
3*053f45beSAndroid Build Coastguard Worker#
4*053f45beSAndroid Build Coastguard Worker# Run installed kselftest tests.
5*053f45beSAndroid Build Coastguard Worker#
6*053f45beSAndroid Build Coastguard WorkerBASE_DIR=$(realpath $(dirname $0))
7*053f45beSAndroid Build Coastguard Workercd $BASE_DIR
8*053f45beSAndroid Build Coastguard WorkerTESTS="$BASE_DIR"/kselftest-list.txt
9*053f45beSAndroid Build Coastguard Workerif [ ! -r "$TESTS" ] ; then
10*053f45beSAndroid Build Coastguard Worker	echo "$0: Could not find list of tests to run ($TESTS)" >&2
11*053f45beSAndroid Build Coastguard Worker	available=""
12*053f45beSAndroid Build Coastguard Workerelse
13*053f45beSAndroid Build Coastguard Worker	available="$(cat "$TESTS")"
14*053f45beSAndroid Build Coastguard Workerfi
15*053f45beSAndroid Build Coastguard Worker
16*053f45beSAndroid Build Coastguard Worker. ./kselftest/runner.sh
17*053f45beSAndroid Build Coastguard WorkerROOT=$PWD
18*053f45beSAndroid Build Coastguard Worker
19*053f45beSAndroid Build Coastguard Workerusage()
20*053f45beSAndroid Build Coastguard Worker{
21*053f45beSAndroid Build Coastguard Worker	cat <<EOF
22*053f45beSAndroid Build Coastguard WorkerUsage: $0 [OPTIONS]
23*053f45beSAndroid Build Coastguard Worker  -s | --summary		Print summary with detailed log in output.log
24*053f45beSAndroid Build Coastguard Worker  -t | --test COLLECTION:TEST	Run TEST from COLLECTION
25*053f45beSAndroid Build Coastguard Worker  -c | --collection COLLECTION	Run all tests from COLLECTION
26*053f45beSAndroid Build Coastguard Worker  -l | --list			List the available collection:test entries
27*053f45beSAndroid Build Coastguard Worker  -d | --dry-run		Don't actually run any tests
28*053f45beSAndroid Build Coastguard Worker  -h | --help			Show this usage info
29*053f45beSAndroid Build Coastguard WorkerEOF
30*053f45beSAndroid Build Coastguard Worker	exit $1
31*053f45beSAndroid Build Coastguard Worker}
32*053f45beSAndroid Build Coastguard Worker
33*053f45beSAndroid Build Coastguard WorkerCOLLECTIONS=""
34*053f45beSAndroid Build Coastguard WorkerTESTS=""
35*053f45beSAndroid Build Coastguard Workerdryrun=""
36*053f45beSAndroid Build Coastguard Workerwhile true; do
37*053f45beSAndroid Build Coastguard Worker	case "$1" in
38*053f45beSAndroid Build Coastguard Worker		-s | --summary)
39*053f45beSAndroid Build Coastguard Worker			logfile="$BASE_DIR"/output.log
40*053f45beSAndroid Build Coastguard Worker			cat /dev/null > $logfile
41*053f45beSAndroid Build Coastguard Worker			shift ;;
42*053f45beSAndroid Build Coastguard Worker		-t | --test)
43*053f45beSAndroid Build Coastguard Worker			TESTS="$TESTS $2"
44*053f45beSAndroid Build Coastguard Worker			shift 2 ;;
45*053f45beSAndroid Build Coastguard Worker		-c | --collection)
46*053f45beSAndroid Build Coastguard Worker			COLLECTIONS="$COLLECTIONS $2"
47*053f45beSAndroid Build Coastguard Worker			shift 2 ;;
48*053f45beSAndroid Build Coastguard Worker		-l | --list)
49*053f45beSAndroid Build Coastguard Worker			echo "$available"
50*053f45beSAndroid Build Coastguard Worker			exit 0 ;;
51*053f45beSAndroid Build Coastguard Worker		-d | --dry-run)
52*053f45beSAndroid Build Coastguard Worker			dryrun="echo"
53*053f45beSAndroid Build Coastguard Worker			shift ;;
54*053f45beSAndroid Build Coastguard Worker		-h | --help)
55*053f45beSAndroid Build Coastguard Worker			usage 0 ;;
56*053f45beSAndroid Build Coastguard Worker		"")
57*053f45beSAndroid Build Coastguard Worker			break ;;
58*053f45beSAndroid Build Coastguard Worker		*)
59*053f45beSAndroid Build Coastguard Worker			usage 1 ;;
60*053f45beSAndroid Build Coastguard Worker	esac
61*053f45beSAndroid Build Coastguard Workerdone
62*053f45beSAndroid Build Coastguard Worker
63*053f45beSAndroid Build Coastguard Worker# Add all selected collections to the explicit test list.
64*053f45beSAndroid Build Coastguard Workerif [ -n "$COLLECTIONS" ]; then
65*053f45beSAndroid Build Coastguard Worker	for collection in $COLLECTIONS ; do
66*053f45beSAndroid Build Coastguard Worker		found="$(echo "$available" | grep "^$collection:")"
67*053f45beSAndroid Build Coastguard Worker		if [ -z "$found" ] ; then
68*053f45beSAndroid Build Coastguard Worker			echo "No such collection '$collection'" >&2
69*053f45beSAndroid Build Coastguard Worker			exit 1
70*053f45beSAndroid Build Coastguard Worker		fi
71*053f45beSAndroid Build Coastguard Worker		TESTS="$TESTS $found"
72*053f45beSAndroid Build Coastguard Worker	done
73*053f45beSAndroid Build Coastguard Workerfi
74*053f45beSAndroid Build Coastguard Worker# Replace available test list with explicitly selected tests.
75*053f45beSAndroid Build Coastguard Workerif [ -n "$TESTS" ]; then
76*053f45beSAndroid Build Coastguard Worker	valid=""
77*053f45beSAndroid Build Coastguard Worker	for test in $TESTS ; do
78*053f45beSAndroid Build Coastguard Worker		found="$(echo "$available" | grep "^${test}$")"
79*053f45beSAndroid Build Coastguard Worker		if [ -z "$found" ] ; then
80*053f45beSAndroid Build Coastguard Worker			echo "No such test '$test'" >&2
81*053f45beSAndroid Build Coastguard Worker			exit 1
82*053f45beSAndroid Build Coastguard Worker		fi
83*053f45beSAndroid Build Coastguard Worker		valid="$valid $found"
84*053f45beSAndroid Build Coastguard Worker	done
85*053f45beSAndroid Build Coastguard Worker	available="$(echo "$valid" | sed -e 's/ /\n/g')"
86*053f45beSAndroid Build Coastguard Workerfi
87*053f45beSAndroid Build Coastguard Worker
88*053f45beSAndroid Build Coastguard Workercollections=$(echo "$available" | cut -d: -f1 | uniq)
89*053f45beSAndroid Build Coastguard Workerfor collection in $collections ; do
90*053f45beSAndroid Build Coastguard Worker	[ -w /dev/kmsg ] && echo "kselftest: Running tests in $collection" >> /dev/kmsg
91*053f45beSAndroid Build Coastguard Worker	tests=$(echo "$available" | grep "^$collection:" | cut -d: -f2)
92*053f45beSAndroid Build Coastguard Worker	($dryrun cd "$collection" && $dryrun run_many $tests)
93*053f45beSAndroid Build Coastguard Workerdone
94