Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / run_kselftest.sh
bloba28c1416cb89b96ba5f8b287e68b324b51d95673
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0
4 # Run installed kselftest tests.
6 BASE_DIR=$(realpath $(dirname $0))
7 cd $BASE_DIR
8 TESTS="$BASE_DIR"/kselftest-list.txt
9 if [ ! -r "$TESTS" ] ; then
10 echo "$0: Could not find list of tests to run ($TESTS)" >&2
11 available=""
12 else
13 available="$(cat "$TESTS")"
16 . ./kselftest/runner.sh
17 ROOT=$PWD
19 usage()
21 cat <<EOF
22 Usage: $0 [OPTIONS]
23 -s | --summary Print summary with detailed log in output.log (conflict with -p)
24 -p | --per_test_log Print test log in /tmp with each test name (conflict with -s)
25 -t | --test COLLECTION:TEST Run TEST from COLLECTION
26 -c | --collection COLLECTION Run all tests from COLLECTION
27 -l | --list List the available collection:test entries
28 -d | --dry-run Don't actually run any tests
29 -n | --netns Run each test in namespace
30 -h | --help Show this usage info
31 -o | --override-timeout Number of seconds after which we timeout
32 EOF
33 exit $1
36 COLLECTIONS=""
37 TESTS=""
38 dryrun=""
39 kselftest_override_timeout=""
40 while true; do
41 case "$1" in
42 -s | --summary)
43 logfile="$BASE_DIR"/output.log
44 cat /dev/null > $logfile
45 shift ;;
46 -p | --per-test-log)
47 per_test_logging=1
48 shift ;;
49 -t | --test)
50 TESTS="$TESTS $2"
51 shift 2 ;;
52 -c | --collection)
53 COLLECTIONS="$COLLECTIONS $2"
54 shift 2 ;;
55 -l | --list)
56 echo "$available"
57 exit 0 ;;
58 -d | --dry-run)
59 dryrun="echo"
60 shift ;;
61 -n | --netns)
62 RUN_IN_NETNS=1
63 shift ;;
64 -o | --override-timeout)
65 kselftest_override_timeout="$2"
66 shift 2 ;;
67 -h | --help)
68 usage 0 ;;
69 "")
70 break ;;
72 usage 1 ;;
73 esac
74 done
76 # Add all selected collections to the explicit test list.
77 if [ -n "$COLLECTIONS" ]; then
78 for collection in $COLLECTIONS ; do
79 found="$(echo "$available" | grep "^$collection:")"
80 if [ -z "$found" ] ; then
81 echo "No such collection '$collection'" >&2
82 exit 1
84 TESTS="$TESTS $found"
85 done
87 # Replace available test list with explicitly selected tests.
88 if [ -n "$TESTS" ]; then
89 valid=""
90 for test in $TESTS ; do
91 found="$(echo "$available" | grep "^${test}$")"
92 if [ -z "$found" ] ; then
93 echo "No such test '$test'" >&2
94 exit 1
96 valid="$valid $found"
97 done
98 available="$(echo "$valid" | sed -e 's/ /\n/g')"
101 collections=$(echo "$available" | cut -d: -f1 | sort | uniq)
102 for collection in $collections ; do
103 [ -w /dev/kmsg ] && echo "kselftest: Running tests in $collection" >> /dev/kmsg
104 tests=$(echo "$available" | grep "^$collection:" | cut -d: -f2)
105 ($dryrun cd "$collection" && $dryrun run_many $tests)
106 done