1*49cdfc7eSAndroid Build Coastguard Worker#!/bin/bash 2*49cdfc7eSAndroid Build Coastguard Worker################################################################################ 3*49cdfc7eSAndroid Build Coastguard Worker## ## 4*49cdfc7eSAndroid Build Coastguard Worker## Copyright © International Business Machines Corp., 2007, 2008 ## 5*49cdfc7eSAndroid Build Coastguard Worker## ## 6*49cdfc7eSAndroid Build Coastguard Worker## This program is free software; you can redistribute it and#or modify ## 7*49cdfc7eSAndroid Build Coastguard Worker## it under the terms of the GNU General Public License as published by ## 8*49cdfc7eSAndroid Build Coastguard Worker## the Free Software Foundation; either version 2 of the License, or ## 9*49cdfc7eSAndroid Build Coastguard Worker## (at your option) any later version. ## 10*49cdfc7eSAndroid Build Coastguard Worker## ## 11*49cdfc7eSAndroid Build Coastguard Worker## This program is distributed in the hope that it will be useful, but ## 12*49cdfc7eSAndroid Build Coastguard Worker## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## 13*49cdfc7eSAndroid Build Coastguard Worker## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## 14*49cdfc7eSAndroid Build Coastguard Worker## for more details. ## 15*49cdfc7eSAndroid Build Coastguard Worker## ## 16*49cdfc7eSAndroid Build Coastguard Worker## You should have received a copy of the GNU General Public License ## 17*49cdfc7eSAndroid Build Coastguard Worker## along with this program; if not, write to the Free Software ## 18*49cdfc7eSAndroid Build Coastguard Worker## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## 19*49cdfc7eSAndroid Build Coastguard Worker## ## 20*49cdfc7eSAndroid Build Coastguard Worker################################################################################ 21*49cdfc7eSAndroid Build Coastguard Worker 22*49cdfc7eSAndroid Build Coastguard Worker 23*49cdfc7eSAndroid Build Coastguard Worker# 24*49cdfc7eSAndroid Build Coastguard Worker# Script to run the tests in rt-test 25*49cdfc7eSAndroid Build Coastguard Worker# 26*49cdfc7eSAndroid Build Coastguard Worker# Usage: $0 test_argument 27*49cdfc7eSAndroid Build Coastguard Worker# 28*49cdfc7eSAndroid Build Coastguard Worker# where test-argument = func | stress | perf | all | list | clean | test_name 29*49cdfc7eSAndroid Build Coastguard Worker# 30*49cdfc7eSAndroid Build Coastguard Worker# test_name is the name of a subdirectory in func/, stress/ or perf/ 31*49cdfc7eSAndroid Build Coastguard Worker# 32*49cdfc7eSAndroid Build Coastguard Worker 33*49cdfc7eSAndroid Build Coastguard Workerusage() 34*49cdfc7eSAndroid Build Coastguard Worker{ 35*49cdfc7eSAndroid Build Coastguard Worker cat <<EOF 36*49cdfc7eSAndroid Build Coastguard Workerusage: $(basename "$0") [-p profile] -t test-argument [-l num_of_loops] 37*49cdfc7eSAndroid Build Coastguard Worker 38*49cdfc7eSAndroid Build Coastguard Worker -h help 39*49cdfc7eSAndroid Build Coastguard Worker -p profile Use profile instead of default (see 40*49cdfc7eSAndroid Build Coastguard Worker doc/AUTOMATED_RUN) 41*49cdfc7eSAndroid Build Coastguard Worker -t test-arguments Where test-argument can be a space separated 42*49cdfc7eSAndroid Build Coastguard Worker sequence of: 43*49cdfc7eSAndroid Build Coastguard Worker func all functional tests will be run 44*49cdfc7eSAndroid Build Coastguard Worker stress all stress tests will be run 45*49cdfc7eSAndroid Build Coastguard Worker perf all perf tests will be run 46*49cdfc7eSAndroid Build Coastguard Worker all all tests will be run 47*49cdfc7eSAndroid Build Coastguard Worker list all available tests will be listed 48*49cdfc7eSAndroid Build Coastguard Worker clean all logs deleted, make clean 49*49cdfc7eSAndroid Build Coastguard Worker performed 50*49cdfc7eSAndroid Build Coastguard Worker test_name only test_name subdir will be run 51*49cdfc7eSAndroid Build Coastguard Worker (e.g: func/pi-tests) 52*49cdfc7eSAndroid Build Coastguard Worker 53*49cdfc7eSAndroid Build Coastguard WorkerEOF 54*49cdfc7eSAndroid Build Coastguard Worker exit 1 55*49cdfc7eSAndroid Build Coastguard Worker} 56*49cdfc7eSAndroid Build Coastguard Workercheck_error() 57*49cdfc7eSAndroid Build Coastguard Worker{ 58*49cdfc7eSAndroid Build Coastguard Worker if [ $? -gt 0 ]; then 59*49cdfc7eSAndroid Build Coastguard Worker echo 60*49cdfc7eSAndroid Build Coastguard Worker echo " $1 Failed" 61*49cdfc7eSAndroid Build Coastguard Worker echo 62*49cdfc7eSAndroid Build Coastguard Worker exit 1 63*49cdfc7eSAndroid Build Coastguard Worker fi 64*49cdfc7eSAndroid Build Coastguard Worker} 65*49cdfc7eSAndroid Build Coastguard Workerlist_tests() 66*49cdfc7eSAndroid Build Coastguard Worker{ 67*49cdfc7eSAndroid Build Coastguard Worker echo 68*49cdfc7eSAndroid Build Coastguard Worker echo " Available tests are:" 69*49cdfc7eSAndroid Build Coastguard Worker echo 70*49cdfc7eSAndroid Build Coastguard Worker 71*49cdfc7eSAndroid Build Coastguard Worker pushd $TESTS_DIR >/dev/null 72*49cdfc7eSAndroid Build Coastguard Worker for file in `find -name run_auto.sh` 73*49cdfc7eSAndroid Build Coastguard Worker do 74*49cdfc7eSAndroid Build Coastguard Worker echo " `dirname $file `" 75*49cdfc7eSAndroid Build Coastguard Worker done 76*49cdfc7eSAndroid Build Coastguard Worker printf " \n\n" 77*49cdfc7eSAndroid Build Coastguard Worker} 78*49cdfc7eSAndroid Build Coastguard Worker 79*49cdfc7eSAndroid Build Coastguard Workerrun_test() 80*49cdfc7eSAndroid Build Coastguard Worker{ 81*49cdfc7eSAndroid Build Coastguard Worker local profile 82*49cdfc7eSAndroid Build Coastguard Worker 83*49cdfc7eSAndroid Build Coastguard Worker profile=$1 84*49cdfc7eSAndroid Build Coastguard Worker shift 85*49cdfc7eSAndroid Build Coastguard Worker 86*49cdfc7eSAndroid Build Coastguard Worker iter=0 87*49cdfc7eSAndroid Build Coastguard Worker LOOPS=$(( 0 + $2 )) 88*49cdfc7eSAndroid Build Coastguard Worker if [ $LOOPS -eq 0 ]; then 89*49cdfc7eSAndroid Build Coastguard Worker LOOPS=1 90*49cdfc7eSAndroid Build Coastguard Worker fi 91*49cdfc7eSAndroid Build Coastguard Worker if [ -d "$test" ]; then 92*49cdfc7eSAndroid Build Coastguard Worker pushd $test >/dev/null 93*49cdfc7eSAndroid Build Coastguard Worker if [ -f "run_auto.sh" ]; then 94*49cdfc7eSAndroid Build Coastguard Worker echo " Running $LOOPS runs of $subdir " 95*49cdfc7eSAndroid Build Coastguard Worker iter=0 96*49cdfc7eSAndroid Build Coastguard Worker while [ $iter -lt $LOOPS ]; do 97*49cdfc7eSAndroid Build Coastguard Worker ./run_auto.sh $profile 98*49cdfc7eSAndroid Build Coastguard Worker : $(( iter += 1 )) 99*49cdfc7eSAndroid Build Coastguard Worker done 100*49cdfc7eSAndroid Build Coastguard Worker else 101*49cdfc7eSAndroid Build Coastguard Worker echo 102*49cdfc7eSAndroid Build Coastguard Worker echo " Failed to find run script in $test \n" 103*49cdfc7eSAndroid Build Coastguard Worker fi 104*49cdfc7eSAndroid Build Coastguard Worker pushd $TESTS_DIR >/dev/null 105*49cdfc7eSAndroid Build Coastguard Worker else 106*49cdfc7eSAndroid Build Coastguard Worker printf "\n $test is not a valid test subdirectory \n" 107*49cdfc7eSAndroid Build Coastguard Worker usage 108*49cdfc7eSAndroid Build Coastguard Worker exit 1 109*49cdfc7eSAndroid Build Coastguard Worker fi 110*49cdfc7eSAndroid Build Coastguard Worker} 111*49cdfc7eSAndroid Build Coastguard Worker 112*49cdfc7eSAndroid Build Coastguard Workermake_clean() 113*49cdfc7eSAndroid Build Coastguard Worker{ 114*49cdfc7eSAndroid Build Coastguard Worker pushd $TESTS_DIR >/dev/null 115*49cdfc7eSAndroid Build Coastguard Worker rm -rf logs/* 116*49cdfc7eSAndroid Build Coastguard Worker for mfile in `find -name "Makefile"`; 117*49cdfc7eSAndroid Build Coastguard Worker do 118*49cdfc7eSAndroid Build Coastguard Worker target_dir=`dirname $mfile` 119*49cdfc7eSAndroid Build Coastguard Worker pushd $target_dir >/dev/null 120*49cdfc7eSAndroid Build Coastguard Worker make clean 121*49cdfc7eSAndroid Build Coastguard Worker pushd $TESTS_DIR >/dev/null 122*49cdfc7eSAndroid Build Coastguard Worker done 123*49cdfc7eSAndroid Build Coastguard Worker} 124*49cdfc7eSAndroid Build Coastguard Worker 125*49cdfc7eSAndroid Build Coastguard Workerfind_test() 126*49cdfc7eSAndroid Build Coastguard Worker{ 127*49cdfc7eSAndroid Build Coastguard Worker local profile 128*49cdfc7eSAndroid Build Coastguard Worker 129*49cdfc7eSAndroid Build Coastguard Worker profile=$1 130*49cdfc7eSAndroid Build Coastguard Worker shift 131*49cdfc7eSAndroid Build Coastguard Worker 132*49cdfc7eSAndroid Build Coastguard Worker case $1 in 133*49cdfc7eSAndroid Build Coastguard Worker func) 134*49cdfc7eSAndroid Build Coastguard Worker TESTLIST="func" 135*49cdfc7eSAndroid Build Coastguard Worker ;; 136*49cdfc7eSAndroid Build Coastguard Worker stress) 137*49cdfc7eSAndroid Build Coastguard Worker TESTLIST="stress" 138*49cdfc7eSAndroid Build Coastguard Worker ;; 139*49cdfc7eSAndroid Build Coastguard Worker perf) 140*49cdfc7eSAndroid Build Coastguard Worker TESTLIST="perf" 141*49cdfc7eSAndroid Build Coastguard Worker ;; 142*49cdfc7eSAndroid Build Coastguard Worker all) 143*49cdfc7eSAndroid Build Coastguard Worker # Run all tests which have run_auto.sh 144*49cdfc7eSAndroid Build Coastguard Worker TESTLIST="func stress perf" 145*49cdfc7eSAndroid Build Coastguard Worker ;; 146*49cdfc7eSAndroid Build Coastguard Worker list) 147*49cdfc7eSAndroid Build Coastguard Worker # This will only display subdirs which have run_auto.sh 148*49cdfc7eSAndroid Build Coastguard Worker list_tests 149*49cdfc7eSAndroid Build Coastguard Worker exit 150*49cdfc7eSAndroid Build Coastguard Worker ;; 151*49cdfc7eSAndroid Build Coastguard Worker clean) 152*49cdfc7eSAndroid Build Coastguard Worker # This will clobber logs, out files, .o's etc 153*49cdfc7eSAndroid Build Coastguard Worker make_clean 154*49cdfc7eSAndroid Build Coastguard Worker exit 155*49cdfc7eSAndroid Build Coastguard Worker ;; 156*49cdfc7eSAndroid Build Coastguard Worker 157*49cdfc7eSAndroid Build Coastguard Worker *) 158*49cdfc7eSAndroid Build Coastguard Worker # run the tests in the individual subdirectory if it exists 159*49cdfc7eSAndroid Build Coastguard Worker TESTLIST="$1" 160*49cdfc7eSAndroid Build Coastguard Worker ;; 161*49cdfc7eSAndroid Build Coastguard Worker esac 162*49cdfc7eSAndroid Build Coastguard Worker 163*49cdfc7eSAndroid Build Coastguard Worker for subdir in $TESTLIST; do 164*49cdfc7eSAndroid Build Coastguard Worker if [ -d $subdir ]; then 165*49cdfc7eSAndroid Build Coastguard Worker pushd $subdir >/dev/null 166*49cdfc7eSAndroid Build Coastguard Worker for name in `find -name "run_auto.sh"`; do 167*49cdfc7eSAndroid Build Coastguard Worker test="`dirname $name`" 168*49cdfc7eSAndroid Build Coastguard Worker run_test "$profile" "$test" "$2" 169*49cdfc7eSAndroid Build Coastguard Worker pushd $subdir > /dev/null 170*49cdfc7eSAndroid Build Coastguard Worker done 171*49cdfc7eSAndroid Build Coastguard Worker pushd $TESTS_DIR >/dev/null 172*49cdfc7eSAndroid Build Coastguard Worker else 173*49cdfc7eSAndroid Build Coastguard Worker echo 174*49cdfc7eSAndroid Build Coastguard Worker echo " $subdir not found; check name/path with $0 list " 175*49cdfc7eSAndroid Build Coastguard Worker fi 176*49cdfc7eSAndroid Build Coastguard Worker done 177*49cdfc7eSAndroid Build Coastguard Worker 178*49cdfc7eSAndroid Build Coastguard Worker} 179*49cdfc7eSAndroid Build Coastguard Worker 180*49cdfc7eSAndroid Build Coastguard WorkerSCRIPTS_DIR="$(readlink -f "$(dirname "$0")")/scripts" 181*49cdfc7eSAndroid Build Coastguard Workersource $SCRIPTS_DIR/setenv.sh 182*49cdfc7eSAndroid Build Coastguard Worker 183*49cdfc7eSAndroid Build Coastguard Workerif [ $# -lt 1 ]; then 184*49cdfc7eSAndroid Build Coastguard Worker usage 185*49cdfc7eSAndroid Build Coastguard Workerfi 186*49cdfc7eSAndroid Build Coastguard Workerpushd $TESTS_DIR >/dev/null 187*49cdfc7eSAndroid Build Coastguard Worker 188*49cdfc7eSAndroid Build Coastguard Worker# if INSTALL_DIR != top_srcdir assume the individual tests are built and installed. 189*49cdfc7eSAndroid Build Coastguard Worker# So no need to build lib 190*49cdfc7eSAndroid Build Coastguard Workerif [[ -d lib ]]; then 191*49cdfc7eSAndroid Build Coastguard Worker #Only build the library, most of the tests depend upon. 192*49cdfc7eSAndroid Build Coastguard Worker #The Individual tests will be built, just before they run. 193*49cdfc7eSAndroid Build Coastguard Worker pushd lib 194*49cdfc7eSAndroid Build Coastguard Worker make 195*49cdfc7eSAndroid Build Coastguard Worker check_error make 196*49cdfc7eSAndroid Build Coastguard Worker popd 197*49cdfc7eSAndroid Build Coastguard Workerfi 198*49cdfc7eSAndroid Build Coastguard Worker 199*49cdfc7eSAndroid Build Coastguard WorkerISLOOP=0 200*49cdfc7eSAndroid Build Coastguard Workerindex=0 201*49cdfc7eSAndroid Build Coastguard Workerwhile getopts "hl:p:t:" option 202*49cdfc7eSAndroid Build Coastguard Workerdo 203*49cdfc7eSAndroid Build Coastguard Worker case "$option" in 204*49cdfc7eSAndroid Build Coastguard Worker 205*49cdfc7eSAndroid Build Coastguard Worker t ) 206*49cdfc7eSAndroid Build Coastguard Worker if [ $ISLOOP -eq 1 ]; then 207*49cdfc7eSAndroid Build Coastguard Worker LOOP=1 208*49cdfc7eSAndroid Build Coastguard Worker tests[$index]=$LOOP 209*49cdfc7eSAndroid Build Coastguard Worker : $(( index += 1 )) 210*49cdfc7eSAndroid Build Coastguard Worker fi 211*49cdfc7eSAndroid Build Coastguard Worker 212*49cdfc7eSAndroid Build Coastguard Worker tests[$index]="$OPTARG" 213*49cdfc7eSAndroid Build Coastguard Worker : $((index += 1 )) 214*49cdfc7eSAndroid Build Coastguard Worker TESTCASE="$OPTARG" 215*49cdfc7eSAndroid Build Coastguard Worker ISLOOP=1 216*49cdfc7eSAndroid Build Coastguard Worker ;; 217*49cdfc7eSAndroid Build Coastguard Worker 218*49cdfc7eSAndroid Build Coastguard Worker l ) 219*49cdfc7eSAndroid Build Coastguard Worker ISLOOP=0 220*49cdfc7eSAndroid Build Coastguard Worker tests[$index]="$OPTARG" 221*49cdfc7eSAndroid Build Coastguard Worker LOOP="$OPTARG" 222*49cdfc7eSAndroid Build Coastguard Worker index=$((index+1)) 223*49cdfc7eSAndroid Build Coastguard Worker ;; 224*49cdfc7eSAndroid Build Coastguard Worker p ) 225*49cdfc7eSAndroid Build Coastguard Worker profile=$OPTARG 226*49cdfc7eSAndroid Build Coastguard Worker ;; 227*49cdfc7eSAndroid Build Coastguard Worker h ) 228*49cdfc7eSAndroid Build Coastguard Worker usage 229*49cdfc7eSAndroid Build Coastguard Worker ;; 230*49cdfc7eSAndroid Build Coastguard Worker * ) echo "Unrecognized option specified" 231*49cdfc7eSAndroid Build Coastguard Worker usage 232*49cdfc7eSAndroid Build Coastguard Worker ;; 233*49cdfc7eSAndroid Build Coastguard Worker esac 234*49cdfc7eSAndroid Build Coastguard Workerdone 235*49cdfc7eSAndroid Build Coastguard Worker 236*49cdfc7eSAndroid Build Coastguard Workertests[$index]=1 237*49cdfc7eSAndroid Build Coastguard Worker 238*49cdfc7eSAndroid Build Coastguard Workeri=0 239*49cdfc7eSAndroid Build Coastguard Workerwhile [ $i -lt $index ]; do 240*49cdfc7eSAndroid Build Coastguard Worker find_test "$profile" ${tests[$i]} ${tests[$((i+1))]} 241*49cdfc7eSAndroid Build Coastguard Worker : $(( i += 2 )) 242*49cdfc7eSAndroid Build Coastguard Workerdone 243