|  | #!/bin/sh | 
|  | # SPDX-License-Identifier: GPL-2.0 | 
|  | # | 
|  | # Run installed kselftest tests. | 
|  | # | 
|  | BASE_DIR=$(realpath $(dirname $0)) | 
|  | cd $BASE_DIR | 
|  | TESTS="$BASE_DIR"/kselftest-list.txt | 
|  | if [ ! -r "$TESTS" ] ; then | 
|  | echo "$0: Could not find list of tests to run ($TESTS)" >&2 | 
|  | available="" | 
|  | else | 
|  | available="$(cat "$TESTS")" | 
|  | fi | 
|  |  | 
|  | . ./kselftest/runner.sh | 
|  | ROOT=$PWD | 
|  |  | 
|  | usage() | 
|  | { | 
|  | cat <<EOF | 
|  | Usage: $0 [OPTIONS] | 
|  | -s | --summary		Print summary with detailed log in output.log | 
|  | -t | --test COLLECTION:TEST	Run TEST from COLLECTION | 
|  | -c | --collection COLLECTION	Run all tests from COLLECTION | 
|  | -l | --list			List the available collection:test entries | 
|  | -d | --dry-run		Don't actually run any tests | 
|  | -h | --help			Show this usage info | 
|  | EOF | 
|  | exit $1 | 
|  | } | 
|  |  | 
|  | COLLECTIONS="" | 
|  | TESTS="" | 
|  | dryrun="" | 
|  | while true; do | 
|  | case "$1" in | 
|  | -s | --summary) | 
|  | logfile="$BASE_DIR"/output.log | 
|  | cat /dev/null > $logfile | 
|  | shift ;; | 
|  | -t | --test) | 
|  | TESTS="$TESTS $2" | 
|  | shift 2 ;; | 
|  | -c | --collection) | 
|  | COLLECTIONS="$COLLECTIONS $2" | 
|  | shift 2 ;; | 
|  | -l | --list) | 
|  | echo "$available" | 
|  | exit 0 ;; | 
|  | -d | --dry-run) | 
|  | dryrun="echo" | 
|  | shift ;; | 
|  | -h | --help) | 
|  | usage 0 ;; | 
|  | "") | 
|  | break ;; | 
|  | *) | 
|  | usage 1 ;; | 
|  | esac | 
|  | done | 
|  |  | 
|  | # Add all selected collections to the explicit test list. | 
|  | if [ -n "$COLLECTIONS" ]; then | 
|  | for collection in $COLLECTIONS ; do | 
|  | found="$(echo "$available" | grep "^$collection:")" | 
|  | if [ -z "$found" ] ; then | 
|  | echo "No such collection '$collection'" >&2 | 
|  | exit 1 | 
|  | fi | 
|  | TESTS="$TESTS $found" | 
|  | done | 
|  | fi | 
|  | # Replace available test list with explicitly selected tests. | 
|  | if [ -n "$TESTS" ]; then | 
|  | valid="" | 
|  | for test in $TESTS ; do | 
|  | found="$(echo "$available" | grep "^${test}$")" | 
|  | if [ -z "$found" ] ; then | 
|  | echo "No such test '$test'" >&2 | 
|  | exit 1 | 
|  | fi | 
|  | valid="$valid $found" | 
|  | done | 
|  | available="$(echo "$valid" | sed -e 's/ /\n/g')" | 
|  | fi | 
|  |  | 
|  | collections=$(echo "$available" | cut -d: -f1 | uniq) | 
|  | for collection in $collections ; do | 
|  | [ -w /dev/kmsg ] && echo "kselftest: Running tests in $collection" >> /dev/kmsg | 
|  | tests=$(echo "$available" | grep "^$collection:" | cut -d: -f2) | 
|  | ($dryrun cd "$collection" && $dryrun run_many $tests) | 
|  | done |