Home | History | Annotate | Download | only in realtime
      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