| #!/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 |