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