Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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