Profiled Tests:
Basically this was done to enhance the pass/fail criteria usage and allow the user to setup tests configurations according to specific needs. Imagine a test series that may validate a hardware for some latencies (case #1) while another series would validate other criteria (case #2). The same test used in situation #1 will not have the same configuration (arguments) in situation #2. Scripting has to be done for this to achieve. The profile system does this for you. You just have to configure. Not only pass/fail criteria can be set since the profile system simply runs command lines defined in profiles. So any argument can be choosen. ie: a profile can define criteria for tests with or without saving statistics (-s) or simulate jvm (-j). A profile comes as a single file so it is easy to copy from a test machine to another. With this patch, profiles can be used either for test global run (./run.sh) or for an individual directory (./run_auto.sh). For more information, read doc/AUTOMATED_RUN.
This patch is intentionnally global as splitting changes would not make sense. This includes:
- changes of scripts for automated tests to feature profiles
- individual changes for tests using automation
- a default profile (to be used as an example)
- documentation writing/modifying.
Signed-off-by: Gilles Carry <gilles.carry@bull.net>,
Reviewed-by: Ankita Garg <ankita@in.ibm.com>.
diff --git a/testcases/realtime/doc/AUTOMATED_RUN b/testcases/realtime/doc/AUTOMATED_RUN
new file mode 100644
index 0000000..7cf7a56
--- /dev/null
+++ b/testcases/realtime/doc/AUTOMATED_RUN
@@ -0,0 +1,46 @@
+This explains how the automatic testing works with profile support.
+
+Profiles help users maintaining sets of tests for specific requirements.
+Each profile is defined in a file.
+All profiles are stored in the <RT_TESTS_ROOT>/profile/ directory.
+
+
+I. Automated tests in specific test-diretory.
+
+Tests can be run for one directory by running ./run_auto.sh in the wanted dir.
+run_auto.sh is customizable and contains a command line for each test to be run.
+(see template run_auto.sh.tpl in this dir)
+run_auto.sh can be invoked with an argument which is the profile to use.
+profile/ dir holds a file for each defined profile.
+A profile has a number of lines for which each test executable can be run
+with different arguments.
+Invoking run_auto.sh with no arg uses the default profile.
+Currently, the default profile does not alter the default values defined
+individually in each test.
+
+Example:
+In dir func/prio-preempt, user runs ./run_auto.sh prf1
+Since run_auto.sh contains this line:
+ $SCRIPTS_DIR/run_c_files.sh $profile prio-preempt
+
+run_c_files.sh will look into profile/prf1 for lines like this:
+ func/prio-preempt prio-preempt -c 2 -j
+ func/prio-preempt prio-preempt -c 1
+
+and run the following commands from the func/prio-preempt dir:
+ prio-preempt -c 2 -j
+ prio-preempt -c 1
+
+
+
+II. All automated tests
+
+Tests can also be run with <RT_TESTS_ROOT>/run.sh. User may choose whatever
+test range he wants. (all, func, perf... see README)
+run.sh searches for run_auto.sh files in the wanted area and runs them one
+by one.
+To use a profile other than default, use argument '-p <myprofile>'.
+
+Examples:
+ ./run.sh -p prf1 -t func # Uses prf1 profile
+ ./run.sh -t func # Uses default profile
diff --git a/testcases/realtime/doc/HOWTO_ADD_TESTS b/testcases/realtime/doc/HOWTO_ADD_TESTS
index 8bd5c4d..2f51df2 100644
--- a/testcases/realtime/doc/HOWTO_ADD_TESTS
+++ b/testcases/realtime/doc/HOWTO_ADD_TESTS
@@ -10,13 +10,17 @@
individually as an available test.
- run "run.sh list" to see available tests
-3. If you are creating a new subdirectory:
+2. If you are creating a new subdirectory:
Provide:
- your test files
- your GNUMakefile.am
- - your run_auto.sh script
+ - your run_auto.sh script (use template: doc/run_auto.sh.tpl)
- Test the following:
+3. Modify tests profiles if to be run automatically
+ - profile/default
+ - other profiles if needed
+
+4. Test the following:
sh autogen.sh; ./configure, make, naturally
run.sh list
run.sh clean
diff --git a/testcases/realtime/doc/run_auto.sh.tpl b/testcases/realtime/doc/run_auto.sh.tpl
new file mode 100644
index 0000000..2238916
--- /dev/null
+++ b/testcases/realtime/doc/run_auto.sh.tpl
@@ -0,0 +1,17 @@
+#! /bin/bash
+
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
+if [ ! $SCRIPTS_DIR ]; then
+ # assume we're running standalone
+ export SCRIPTS_DIR=../../scripts/
+fi
+
+source $SCRIPTS_DIR/setenv.sh
+
+# Warning: tests args are now set in profiles
+
+# Customize below. One line per test.
+$SCRIPTS_DIR/run_c_files.sh $profile testexecutable1
+# $SCRIPTS_DIR/run_c_files.sh $profile testexecutable2
diff --git a/testcases/realtime/func/gtod_latency/run_auto.sh b/testcases/realtime/func/gtod_latency/run_auto.sh
index 130675c..1e181e4 100755
--- a/testcases/realtime/func/gtod_latency/run_auto.sh
+++ b/testcases/realtime/func/gtod_latency/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,8 +10,9 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "gtod_latency"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile gtod_latency
# This is only for hostility testing
-#$SCRIPTS_DIR/run_c_files.sh "gtod_infinite"
+#$SCRIPTS_DIR/run_c_files.sh $profile gtod_infinite
diff --git a/testcases/realtime/func/matrix_mult/run_auto.sh b/testcases/realtime/func/matrix_mult/run_auto.sh
index 5403089..8713ca3 100755
--- a/testcases/realtime/func/matrix_mult/run_auto.sh
+++ b/testcases/realtime/func/matrix_mult/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,6 +10,5 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "matrix_mult"
-
-
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile matrix_mult
diff --git a/testcases/realtime/func/periodic_cpu_load/run_auto.sh b/testcases/realtime/func/periodic_cpu_load/run_auto.sh
index 05e3131..334174e 100755
--- a/testcases/realtime/func/periodic_cpu_load/run_auto.sh
+++ b/testcases/realtime/func/periodic_cpu_load/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,4 +10,5 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "periodic_cpu_load:periodic_cpu_load_single"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile periodic_cpu_load periodic_cpu_load_single
diff --git a/testcases/realtime/func/pi-tests/run_auto.sh b/testcases/realtime/func/pi-tests/run_auto.sh
index 82fec4c..8365943 100755
--- a/testcases/realtime/func/pi-tests/run_auto.sh
+++ b/testcases/realtime/func/pi-tests/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,22 +10,23 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "testpi-0"
-$SCRIPTS_DIR/run_c_files.sh "testpi-1"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile testpi-0
+$SCRIPTS_DIR/run_c_files.sh $profile testpi-1
LOG_FILE="$LOG_DIR/$LOG_FORMAT-testpi-1.log"
PYTHONPATH=../../ python parse-testpi1.py $LOG_FILE 2>&1 | tee -a $LOG_FILE
-$SCRIPTS_DIR/run_c_files.sh "testpi-2"
+$SCRIPTS_DIR/run_c_files.sh $profile testpi-2
LOG_FILE="$LOG_DIR/$LOG_FORMAT-testpi-2.log"
PYTHONPATH=../../ python parse-testpi2.py $LOG_FILE 2>&1 | tee -a $LOG_FILE
-$SCRIPTS_DIR/run_c_files.sh "testpi-4"
+$SCRIPTS_DIR/run_c_files.sh $profile testpi-4
LOG_FILE="$LOG_DIR/$LOG_FORMAT-testpi-4.log"
PYTHONPATH=../../ python parse-testpi1.py $LOG_FILE 2>&1 | tee -a $LOG_FILE
-$SCRIPTS_DIR/run_c_files.sh "testpi-5"
-$SCRIPTS_DIR/run_c_files.sh "testpi-6"
-$SCRIPTS_DIR/run_c_files.sh "sbrk_mutex"
+$SCRIPTS_DIR/run_c_files.sh $profile testpi-5
+$SCRIPTS_DIR/run_c_files.sh $profile testpi-6
+$SCRIPTS_DIR/run_c_files.sh $profile sbrk_mutex
diff --git a/testcases/realtime/func/pi_perf/run_auto.sh b/testcases/realtime/func/pi_perf/run_auto.sh
index 29b16a9..ee590d3 100755
--- a/testcases/realtime/func/pi_perf/run_auto.sh
+++ b/testcases/realtime/func/pi_perf/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,4 +10,5 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "pi_perf"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile pi_perf
diff --git a/testcases/realtime/func/prio-preempt/run_auto.sh b/testcases/realtime/func/prio-preempt/run_auto.sh
index 728f106..5dea246 100755
--- a/testcases/realtime/func/prio-preempt/run_auto.sh
+++ b/testcases/realtime/func/prio-preempt/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,6 +10,7 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "prio-preempt"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile prio-preempt
diff --git a/testcases/realtime/func/prio-wake/run_auto.sh b/testcases/realtime/func/prio-wake/run_auto.sh
index eb38b26..31433bf 100755
--- a/testcases/realtime/func/prio-wake/run_auto.sh
+++ b/testcases/realtime/func/prio-wake/run_auto.sh
@@ -1,8 +1,12 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
fi
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "prio-wake"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile prio-wake
diff --git a/testcases/realtime/func/pthread_kill_latency/run_auto.sh b/testcases/realtime/func/pthread_kill_latency/run_auto.sh
index b2fcbad..d2c543b 100755
--- a/testcases/realtime/func/pthread_kill_latency/run_auto.sh
+++ b/testcases/realtime/func/pthread_kill_latency/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,6 +10,7 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "pthread_kill_latency"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile pthread_kill_latency
diff --git a/testcases/realtime/func/sched_football/run_auto.sh b/testcases/realtime/func/sched_football/run_auto.sh
index e161e66..3694fce 100755
--- a/testcases/realtime/func/sched_football/run_auto.sh
+++ b/testcases/realtime/func/sched_football/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,7 +10,8 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "sched_football"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile sched_football
LOG_FILE="$LOG_DIR/$LOG_FORMAT-sched_football.log"
PYTHONPATH=../../ python parse-football.py $LOG_FILE 2>&1 | tee -a $LOG_FILE
diff --git a/testcases/realtime/func/sched_jitter/run_auto.sh b/testcases/realtime/func/sched_jitter/run_auto.sh
index 547b844..c2d1be9 100755
--- a/testcases/realtime/func/sched_jitter/run_auto.sh
+++ b/testcases/realtime/func/sched_jitter/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,4 +10,5 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "sched_jitter"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile sched_jitter
diff --git a/testcases/realtime/func/sched_latency/run_auto.sh b/testcases/realtime/func/sched_latency/run_auto.sh
index 601e3fb..a67a8f0 100755
--- a/testcases/realtime/func/sched_latency/run_auto.sh
+++ b/testcases/realtime/func/sched_latency/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,4 +10,5 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "sched_latency -d 1 -t 5"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile sched_latency -d 1 -t 5
diff --git a/testcases/realtime/func/thread_clock/run_auto.sh b/testcases/realtime/func/thread_clock/run_auto.sh
index cf0ce3d..529ff16 100755
--- a/testcases/realtime/func/thread_clock/run_auto.sh
+++ b/testcases/realtime/func/thread_clock/run_auto.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+profile=${1:-default}
+
+cd $(dirname $0) # Move to test directory
if [ ! $SCRIPTS_DIR ]; then
# assume we're running standalone
export SCRIPTS_DIR=../../scripts/
@@ -7,4 +10,5 @@
source $SCRIPTS_DIR/setenv.sh
-$SCRIPTS_DIR/run_c_files.sh "tc-2"
+# Warning: tests args are now set in profiles
+$SCRIPTS_DIR/run_c_files.sh $profile tc-2
diff --git a/testcases/realtime/profiles/default b/testcases/realtime/profiles/default
new file mode 100644
index 0000000..9fb7085
--- /dev/null
+++ b/testcases/realtime/profiles/default
@@ -0,0 +1,60 @@
+# Test run commands for default profile
+#
+# format:
+# reldir testexec [ args ... ]
+#
+# First field is the relative directory of the test.
+# Second field is the executable itself.
+# Others field are arguments of the command.
+# In the above example, the following would be done:
+# cd reldir ; ./testexec args ...
+# as a usual shell command.
+#
+# Comments are shell-like.
+#
+# This is to be read by scripts/run_c_files.sh and is useful
+# for local or global runs (<RT_TESTS_ROOT>/run.sh or <TESTDIR>/run_auto.sh)
+#
+
+
+# Pass if maximum lock time is less than threshold (us).
+# Default threshold=200 us
+func/pi_perf pi_perf -c 200
+
+# Pass if maximum latency is less than criterium (us).
+# Default=20 us
+func/pthread_kill_latency pthread_kill_latency -c 20
+
+# Pass if all treads get preempted within max loops.
+# Default max=1
+func/prio-preempt prio-preempt -c 1
+
+# Pass if all delay are less than maxduration (us).
+# Default maxduration=100 us
+func/sched_latency sched_latency -d 1 -t 5 -c 100
+
+# Pass if ratio * average concurrent time < average sequential time
+# Default ratio=0.75
+func/matrix_mult matrix_mult -c 0.75
+
+# Pass if difference between the sum of thread times and process time
+# is less than maxduration (s).
+# Default maxduration=0.5 s
+func/thread_clock tc-2 -c 0.5
+
+
+# The below tests have no pass/fail criterium.
+func/gtod_latency gtod_latency
+func/sched_jitter sched_jitter
+func/periodic_cpu_load periodic_cpu_load
+func/periodic_cpu_load periodic_cpu_load_single
+func/prio-wake prio-wake
+func/sched_football sched_football
+func/pi-tests testpi-0
+func/pi-tests testpi-1
+func/pi-tests testpi-2
+func/pi-tests testpi-4
+func/pi-tests testpi-5
+func/pi-tests testpi-6
+func/pi-tests sbrk_mutex
+
diff --git a/testcases/realtime/run.sh b/testcases/realtime/run.sh
index ced310d..ce0070d 100755
--- a/testcases/realtime/run.sh
+++ b/testcases/realtime/run.sh
@@ -32,7 +32,7 @@
function usage()
{
- echo -e "\nUsage: run.sh -t test-argument [-l loop num_of_iterations] [-t test-argument1 [-l loop ...]] ..."
+ echo -e "\nUsage: run.sh [-p profile] -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 "\n and: \n"
echo -e " func = all functional tests will be run "
@@ -41,6 +41,7 @@
echo -e " all = all tests will be run "
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 " -p profile = use profile instead of default "
echo -e " -h = help"
echo -e "\n"
exit 1;
@@ -66,29 +67,34 @@
function run_test()
{
+ local profile
+
+ profile=$1
+ shift
+
iter=0
if [ -z "$2" ]; then
- LOOPS=1
+ LOOPS=1
else
- LOOPS=$2
+ 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
+ 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
+ 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
+ ./run_auto.sh $profile
done
else
echo -e "\n Failed to find run script in $test \n"
- fi
- pushd $TESTS_DIR >/dev/null
+ fi
+ pushd $TESTS_DIR >/dev/null
else
echo -e "\n $test is not a valid test subdirectory "
usage
@@ -102,58 +108,64 @@
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
+ target_dir=`dirname $mfile`
+ pushd $target_dir >/dev/null
+ make clean
+ pushd $TESTS_DIR >/dev/null
done
}
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 java 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
- ;;
+ local profile
- *)
- # 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
+ 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 java 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 -e "\n $subdir not found; check name/path with run.sh list "
+ fi
+ done
}
@@ -161,7 +173,7 @@
source $SCRIPTS_DIR/setenv.sh
if [ $# -lt 1 ]; then
- usage
+ usage
fi
pushd $TESTS_DIR >/dev/null
@@ -174,37 +186,40 @@
ISLOOP=0
index=0
-while getopts ":t:l:h" option
+while getopts ":t:l:hp:" option
do
- case "$option" in
-
+ case "$option" in
+
t )
- if [ $ISLOOP -eq 1 ]; then
- LOOP=1
- tests[$index]=$LOOP
+ if [ $ISLOOP -eq 1 ]; then
+ LOOP=1
+ tests[$index]=$LOOP
+ index=$((index+1))
+ fi
+
+ tests[$index]="$OPTARG"
index=$((index+1))
- fi
-
- tests[$index]="$OPTARG"
- index=$((index+1))
- TESTCASE="$OPTARG"
- ISLOOP=1
- ;;
-
+ TESTCASE="$OPTARG"
+ ISLOOP=1
+ ;;
+
l )
- ISLOOP=0
- tests[$index]="$OPTARG"
- LOOP="$OPTARG"
- index=$((index+1))
- ;;
+ ISLOOP=0
+ tests[$index]="$OPTARG"
+ LOOP="$OPTARG"
+ index=$((index+1))
+ ;;
+ p )
+ profile=$OPTARG
+ ;;
h )
- usage
- ;;
+ usage
+ ;;
* ) echo "Unrecognized option specified"
- usage
- ;;
- esac
+ usage
+ ;;
+ esac
done
for(( i=0; $i < $index ; $((i+=2)) )); do
- find_test ${tests[$i]} ${tests[$((i+1))]}
+ find_test "$profile" ${tests[$i]} ${tests[$((i+1))]}
done
diff --git a/testcases/realtime/scripts/run_c_files.sh b/testcases/realtime/scripts/run_c_files.sh
index 0a80f9c..6ba4499 100755
--- a/testcases/realtime/scripts/run_c_files.sh
+++ b/testcases/realtime/scripts/run_c_files.sh
@@ -4,35 +4,59 @@
# This script is called from the directory where the test cases are.
# Not all the test cases use this.
#
-# Usage: $0 test-name
+# Usage: $0 profile testname1 [ testname2 ... ]
#
-# For the moment, this does not take multiple arguments.
-# Call this script separately for each test.
-#
+# This script looks for *each* line in profile matching the
+# pattern "testid testname" and runs the corresponding test with the
+# args defined in the line.
-echo -e "SCRIPTS_DIR = $SCRIPTS_DIR"
-source $SCRIPTS_DIR/setenv.sh
+
+[ $# -lt 2 ] && { echo >&2 "$0: too few arguments (at least two)" ; exit 1 ; }
+profile=$1
+shift
+
+#source $SCRIPTS_DIR/setenv.sh
+
+profile_path=$PROFILES_DIR/$profile
+# Does profile exist?
+[ ! -f "$profile_path" ] && { echo >&2 "$0: Could not find profile ($profile_path)" ; exit 1 ; }
# Compile the test cases to support stand alone runs.
make
-IFS=:
# Run the test case
-for file in $*
+for testname in $*
do
- cmd=`echo $file | cut -d ' ' -f 1`
- if [ `echo $file | wc -w` -gt 1 ]; then
- param=`echo $file | cut -d ' ' -f 2-`
- fi
- LOG_FILE="$LOG_DIR/$LOG_FORMAT-${cmd}${param// /}.log"
- echo -e "--- Running testcase $cmd $param --- \n" | tee -a $LOG_FILE
- date | tee -a $LOG_FILE
- echo "Logging to $LOG_FILE" | tee -a $LOG_FILE
- eval ./$cmd $param | tee -a $LOG_FILE
- echo "" | tee -a $LOG_FILE
- date | tee -a $LOG_FILE
- echo -e "The $cmd test appears to have completed. \n" | tee -a $LOG_FILE
- cmd=""
- param=""
+ # Strip off comments and feed it to trivial parser.
+ sed 's/#.*//' < $profile_path | while read line ; do
+ set $line ""
+ # Check if the line is elligible
+ if [ "$1" = "$TEST_REL_DIR" -a "$2" = "$testname" ] ; then
+ cmd=$2
+ shift 2
+ params="$*"
+
+ LOG_FILE="$LOG_DIR/$LOG_FORMAT-${cmd}${params// /}.log"
+ [ ! -d $LOG_DIR ] && mkdir -p $LOG_DIR
+
+ (
+ echo "--- Running testcase $cmd $params ---"
+ date
+ echo "Logging to $LOG_FILE"
+ eval ./$cmd 2>&1 $params
+ echo
+ date
+ echo "The $cmd test appears to have completed."
+ ) | tee -a $LOG_FILE
+ fi
+ done
done
+exit
+ echo -e "--- Running testcase $cmd $params --- \n" | tee -a $LOG_FILE
+ date | tee -a $LOG_FILE
+ echo "Logging to $LOG_FILE" | tee -a $LOG_FILE
+ eval ./$cmd 2>&1 $params| tee -a $LOG_FILE
+ echo "" | tee -a $LOG_FILE
+ date | tee -a $LOG_FILE
+ echo -e "The $cmd test appears to have completed. \n" | tee -a $LOG_FILE
diff --git a/testcases/realtime/scripts/setenv.sh b/testcases/realtime/scripts/setenv.sh
index 235ff9e..7532353 100755
--- a/testcases/realtime/scripts/setenv.sh
+++ b/testcases/realtime/scripts/setenv.sh
@@ -12,7 +12,11 @@
fi
export TESTS_DIR=$PARENT/$TESTSUITE_NAME
+# TEST_REL_DIR is used as a unique id for a test dir
+export TEST_REL_DIR=${PWD#$TESTS_DIR/}
export SCRIPTS_DIR=$TESTS_DIR/scripts
+export PROFILES_DIR=$TESTS_DIR/profiles
export LOG_DIR=$TESTS_DIR/logs
export ARGUMENTS_INPUT_ERROR=25
export LOG_FORMAT="`hostname --short`-`uname -m`-`uname -r`-`date +%Y-%d-%m`"
+
diff --git a/testcases/realtime/testcases/realtime/doc/AUTOMATED_RUN b/testcases/realtime/testcases/realtime/doc/AUTOMATED_RUN
new file mode 100644
index 0000000..7cf7a56
--- /dev/null
+++ b/testcases/realtime/testcases/realtime/doc/AUTOMATED_RUN
@@ -0,0 +1,46 @@
+This explains how the automatic testing works with profile support.
+
+Profiles help users maintaining sets of tests for specific requirements.
+Each profile is defined in a file.
+All profiles are stored in the <RT_TESTS_ROOT>/profile/ directory.
+
+
+I. Automated tests in specific test-diretory.
+
+Tests can be run for one directory by running ./run_auto.sh in the wanted dir.
+run_auto.sh is customizable and contains a command line for each test to be run.
+(see template run_auto.sh.tpl in this dir)
+run_auto.sh can be invoked with an argument which is the profile to use.
+profile/ dir holds a file for each defined profile.
+A profile has a number of lines for which each test executable can be run
+with different arguments.
+Invoking run_auto.sh with no arg uses the default profile.
+Currently, the default profile does not alter the default values defined
+individually in each test.
+
+Example:
+In dir func/prio-preempt, user runs ./run_auto.sh prf1
+Since run_auto.sh contains this line:
+ $SCRIPTS_DIR/run_c_files.sh $profile prio-preempt
+
+run_c_files.sh will look into profile/prf1 for lines like this:
+ func/prio-preempt prio-preempt -c 2 -j
+ func/prio-preempt prio-preempt -c 1
+
+and run the following commands from the func/prio-preempt dir:
+ prio-preempt -c 2 -j
+ prio-preempt -c 1
+
+
+
+II. All automated tests
+
+Tests can also be run with <RT_TESTS_ROOT>/run.sh. User may choose whatever
+test range he wants. (all, func, perf... see README)
+run.sh searches for run_auto.sh files in the wanted area and runs them one
+by one.
+To use a profile other than default, use argument '-p <myprofile>'.
+
+Examples:
+ ./run.sh -p prf1 -t func # Uses prf1 profile
+ ./run.sh -t func # Uses default profile