#!/bin/bash ################################################################################ ## ## ## Copyright © International Business Machines Corp., 2007, 2008 ## ## ## ## This program is free software; you can redistribute it and#or modify ## ## it under the terms of the GNU General Public License as published by ## ## the Free Software Foundation; either version 2 of the License, or ## ## (at your option) any later version. ## ## ## ## This program is distributed in the hope that it will be useful, but ## ## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## ## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## ## for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## ## along with this program; if not, write to the Free Software ## ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## ## ## ################################################################################ # # Script to run the tests in testcases/realtime # # Usage: $0 test_argument # # where test-argument = func | stress | perf | all | list | clean | test_name # # test_name is the name of a subdirectory in func/, stress/ or perf/ # echo "Real-time tests run" export LTPROOT=${PWD} echo $LTPROOT | grep testscripts > /dev/null 2>&1 if [ $? -eq 0 ]; then cd .. export LTPROOT=${PWD} fi function usage() { echo -e "\nUsage: test_realtime.sh -t test-argument [-l loop num_of_iterations] [-t test-argument1 [-l loop ...]] ..." echo -e "\nWhere test-argument = func | stress | perf | all | list | clean | test_name" echo -e "\nand:\n" echo -e " func = all functional tests will be run " echo -e " stress = all stress tests will be run " echo -e " perf = all perf tests will be run " echo -e " all = all tests will be run " echo -e " list = all available tests will be listed " echo -e " clean = all logs deleted, make clean performed " echo -e " test_name = only test_name subdir will be run (e.g: func/pi-tests) " echo -e "\n" exit 1; } function check_error() { if [ $? -gt 0 ]; then echo -e "\n $1 Failed\n" exit 1 fi } list_tests() { echo -e "\nAvailable tests are:\n" cd $TESTS_DIR for file in `find -name run_auto.sh` do echo -e " `dirname $file `" done echo -e " \n" } function run_test() { iter=0 if [ -z "$2" ]; then LOOPS=1 else LOOPS=$2 fi #Test if $LOOPS is a integer if [[ ! $LOOPS =~ ^[0-9]+$ ]]; then echo "\"$LOOPS\" doesn't appear to be a number" usage exit fi if [ -d "$test" ]; then pushd $test >/dev/null if [ -f "run_auto.sh" ]; then echo " Running $LOOPS runs of $subdir " for((iter=0; $iter < $LOOPS; iter++)); do ./run_auto.sh done else echo -e "\n Failed to find run script in $test \n" fi pushd $TESTS_DIR >/dev/null else echo -e "\n $test is not a valid test subdirectory " usage exit 1 fi } function make_clean() { pushd $TESTS_DIR >/dev/null rm -rf logs make clean } find_test() { case $1 in func) TESTLIST="func" ;; stress) TESTLIST="stress" ;; perf) TESTLIST="perf" ;; all) # Run all tests which have run_auto.sh TESTLIST="func stress perf" ;; list) # This will only display subdirs which have run_auto.sh list_tests exit ;; clean) # This will clobber logs, out files, .o's etc make_clean exit ;; *) # run the tests in the individual subdirectory if it exists TESTLIST="$1" ;; esac for subdir in $TESTLIST; do if [ -d $subdir ]; then pushd $subdir >/dev/null for name in `find -name "run_auto.sh"`; do test="`dirname $name`" run_test "$test" "$2" pushd $subdir > /dev/null done pushd $TESTS_DIR >/dev/null else echo -e "\n $subdir not found; check name/path with run.sh list " fi done } source $LTPROOT/testcases/realtime/scripts/setenv.sh if [ $# -lt 1 ]; then usage fi pushd $TESTS_DIR >/dev/null cd $TESTS_DIR if [ ! -e "logs" ]; then mkdir logs echo " creating logs directory as $TESTS_DIR/logs " chmod -R 775 logs fi # if INSTALL_DIR != top_srcdir assume the individual tests are built and installed. # So no need to build lib if [[ -d lib ]]; then #Only build the library, most of the tests depend upon. #The Individual tests will be built, just before they run. pushd lib make check_error make popd fi ISLOOP=0 index=0 while getopts ":t:l:h" option do case "$option" in t ) if [ $ISLOOP -eq 1 ]; then LOOP=1 tests[$index]=$LOOP index=$((index+1)) fi tests[$index]="$OPTARG" index=$((index+1)) TESTCASE="$OPTARG" ISLOOP=1 ;; l ) ISLOOP=0 tests[$index]="$OPTARG" LOOP="$OPTARG" index=$((index+1)) ;; h ) usage ;; * ) echo "Unrecognized option specified" usage ;; esac done for(( i=0; $i < $index ; $((i+=2)) )); do find_test ${tests[$i]} ${tests[$((i+1))]} done