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 testcases/realtime 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# 32echo "Real-time tests run" 33 34export LTPROOT=${PWD} 35echo $LTPROOT | grep testscripts > /dev/null 2>&1 36if [ $? -eq 0 ]; then 37 cd .. 38 export LTPROOT=${PWD} 39fi 40 41 42function usage() 43{ 44 cat <<EOF 45Usage: test_realtime.sh -t test-argument [-l loop num_of_iterations] [-t test-argument1 [-l loop ...]] ... 46 47 test-argument: func | stress | perf | all | list | clean | test_name 48 func: all functional tests will be run 49 stress: all stress tests will be run 50 perf: all perf tests will be run 51 all: all tests will be run 52 list: all available tests will be listed 53 clean: all logs deleted, make clean performed 54 test_name: only test_name subdir will be run (e.g: func/pi-tests) 55EOF 56 exit 1; 57} 58 59function check_error() 60{ 61 if [ $? -gt 0 ]; then 62 printf "\n $1 Failed\n\n" 63 exit 1 64 fi 65} 66 67list_tests() 68{ 69 printf "\nAvailable tests are:\n\n" 70 71 cd $TESTS_DIR 72 for file in `find -name run_auto.sh` 73 do 74 printf " `dirname $file `\n" 75 done 76 printf " \n\n" 77} 78 79function run_test() 80{ 81 iter=0 82 if [ -z "$2" ]; then 83 LOOPS=1 84 else 85 LOOPS=$2 86 fi 87 #Test if $LOOPS is a integer 88 if [[ ! $LOOPS =~ ^[0-9]+$ ]]; then 89 echo "\"$LOOPS\" doesn't appear to be a number" 90 usage 91 exit 92 fi 93 if [ -d "$test" ]; then 94 pushd $test >/dev/null 95 if [ -f "run_auto.sh" ]; then 96 echo " Running $LOOPS runs of $subdir " 97 for((iter=0; $iter < $LOOPS; iter++)); do 98 ./run_auto.sh 99 done 100 else 101 printf "\n Failed to find run script in $test \n\n" 102 fi 103 pushd $TESTS_DIR >/dev/null 104 else 105 printf "\n $test is not a valid test subdirectory \n" 106 usage 107 exit 1 108 fi 109} 110 111function make_clean() 112{ 113 pushd $TESTS_DIR >/dev/null 114 rm -rf logs 115 make clean 116} 117 118find_test() 119{ 120 case $1 in 121 func) 122 TESTLIST="func" 123 ;; 124 stress) 125 TESTLIST="stress" 126 ;; 127 perf) 128 TESTLIST="perf" 129 ;; 130 all) 131 # Run all tests which have run_auto.sh 132 TESTLIST="func stress perf" 133 ;; 134 list) 135 # This will only display subdirs which have run_auto.sh 136 list_tests 137 exit 138 ;; 139 clean) 140 # This will clobber logs, out files, .o's etc 141 make_clean 142 exit 143 ;; 144 145 *) 146 # run the tests in the individual subdirectory if it exists 147 TESTLIST="$1" 148 ;; 149 esac 150 for subdir in $TESTLIST; do 151 if [ -d $subdir ]; then 152 pushd $subdir >/dev/null 153 for name in `find -name "run_auto.sh"`; do 154 test="`dirname $name`" 155 run_test "$test" "$2" 156 pushd $subdir > /dev/null 157 done 158 pushd $TESTS_DIR >/dev/null 159 else 160 printf "\n $subdir not found; check name/path with run.sh list \n" 161 fi 162 done 163 164} 165 166source $LTPROOT/testcases/realtime/scripts/setenv.sh 167 168if [ $# -lt 1 ]; then 169 usage 170fi 171pushd $TESTS_DIR >/dev/null 172 173cd $TESTS_DIR 174if [ ! -e "logs" ]; then 175 mkdir logs 176 echo " creating logs directory as $TESTS_DIR/logs " 177 chmod -R 775 logs 178fi 179 180# if INSTALL_DIR != top_srcdir assume the individual tests are built and installed. 181# So no need to build lib 182if [[ -d lib ]]; then 183 #Only build the library, most of the tests depend upon. 184 #The Individual tests will be built, just before they run. 185 pushd lib 186 make 187 check_error make 188 popd 189fi 190 191ISLOOP=0 192index=0 193while getopts ":t:l:h" option 194do 195 case "$option" in 196 197 t ) 198 if [ $ISLOOP -eq 1 ]; then 199 LOOP=1 200 tests[$index]=$LOOP 201 index=$((index+1)) 202 fi 203 204 tests[$index]="$OPTARG" 205 index=$((index+1)) 206 TESTCASE="$OPTARG" 207 ISLOOP=1 208 ;; 209 210 l ) 211 ISLOOP=0 212 tests[$index]="$OPTARG" 213 LOOP="$OPTARG" 214 index=$((index+1)) 215 ;; 216 h ) 217 usage 218 ;; 219 * ) echo "Unrecognized option specified" 220 usage 221 ;; 222 esac 223done 224for(( i=0; $i < $index ; $((i+=2)) )); do 225 find_test ${tests[$i]} ${tests[$((i+1))]} 226done 227 228