#!/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 rt-test
#
# 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/
#
usage()
{
cat <<EOF
usage: $(basename "$0") [-p profile] -t test-argument [-l num_of_loops]
-h help
-p profile Use profile instead of default (see
doc/AUTOMATED_RUN)
-t test-arguments Where test-argument can be a space separated
sequence of:
func all functional tests will be run
stress all stress tests will be run
perf all perf tests will be run
all all tests will be run
list all available tests will be listed
clean all logs deleted, make clean
performed
test_name only test_name subdir will be run
(e.g: func/pi-tests)
EOF
exit 1
}
check_error()
{
if [ $? -gt 0 ]; then
echo
echo " $1 Failed"
echo
exit 1
fi
}
list_tests()
{
echo
echo " Available tests are:"
echo
pushd $TESTS_DIR >/dev/null
for file in `find -name run_auto.sh`
do
echo " `dirname $file `"
done
printf " \n\n"
}
run_test()
{
local profile
profile=$1
shift
iter=0
LOOPS=$(( 0 + $2 ))
if [ $LOOPS -eq 0 ]; then
LOOPS=1
fi
if [ -d "$test" ]; then
pushd $test >/dev/null
if [ -f "run_auto.sh" ]; then
echo " Running $LOOPS runs of $subdir "
iter=0
while [ $iter -lt $LOOPS ]; do
./run_auto.sh $profile
: $(( iter += 1 ))
done
else
echo
echo " Failed to find run script in $test \n"
fi
pushd $TESTS_DIR >/dev/null
else
printf "\n $test is not a valid test subdirectory \n"
usage
exit 1
fi
}
make_clean()
{
pushd $TESTS_DIR >/dev/null
rm -rf logs/*
for mfile in `find -name "Makefile"`;
do
target_dir=`dirname $mfile`
pushd $target_dir >/dev/null
make clean
pushd $TESTS_DIR >/dev/null
done
}
find_test()
{
local profile
profile=$1
shift
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 "$profile" "$test" "$2"
pushd $subdir > /dev/null
done
pushd $TESTS_DIR >/dev/null
else
echo
echo " $subdir not found; check name/path with $0 list "
fi
done
}
SCRIPTS_DIR="$(readlink -f "$(dirname "$0")")/scripts"
source $SCRIPTS_DIR/setenv.sh
if [ $# -lt 1 ]; then
usage
fi
pushd $TESTS_DIR >/dev/null
# 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 "hl:p:t:" option
do
case "$option" in
t )
if [ $ISLOOP -eq 1 ]; then
LOOP=1
tests[$index]=$LOOP
: $(( index += 1 ))
fi
tests[$index]="$OPTARG"
: $((index += 1 ))
TESTCASE="$OPTARG"
ISLOOP=1
;;
l )
ISLOOP=0
tests[$index]="$OPTARG"
LOOP="$OPTARG"
index=$((index+1))
;;
p )
profile=$OPTARG
;;
h )
usage
;;
* ) echo "Unrecognized option specified"
usage
;;
esac
done
i=0
while [ $i -lt $index ]; do
find_test "$profile" ${tests[$i]} ${tests[$((i+1))]}
: $(( i += 2 ))
done