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