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