diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-10-14 20:19:30 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-10-14 20:19:30 +0000 |
commit | 11cfb6f7f6326e79b4a930716c340b65d76d0683 (patch) | |
tree | 407c08b76ce570ebc0c5b218aa914a1449808f20 /c/src/lib/libbsp/unix/posix/tools/runtest.in | |
parent | Patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>: (diff) | |
download | rtems-11cfb6f7f6326e79b4a930716c340b65d76d0683.tar.bz2 |
Patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>:
1. Rtems contains some perl scripts that use hard-coded paths to
/usr/bin/perl or /usr/local/bin/perl I have already fixed these
problems by adding some checks to configure.in. While doing this,
I also cleaned up some more autoconf related problems for generating
shell scripts. This patch might seem a bit scary to you, but I am
quite confident it won't break something (I've been testing it for
almost a week now, however it might introduce typos for a limited
number configurations I don't have access to - But it shouldn't be
a problem for you to test them :-).
I expect to get this finished tonight, hence you will very likely
have the patch when you get up tomorrow.
Changes:
* Check for PERL and disable all PERL scripts if perl wasn't found.
* Generate all KSHELL-scripts with autoconf instead of make-script
* Automatic dependency handling for autoconf generated KSHELL or PERL
scripts (make/rtems.cfg)
Notes:
* this patch contains new files and deletes some other files.
* The patch is relative to rtems-4.0.0-beta4 with my previous
rtems-rc-981014-1.diff patch applied.
Testing:
I tested it with sh-rtems and posix under linux. Now all targets
which are touched by this patch and which are not used while building
for sh-rtems and posix still need to be tested. AFAIS, only the
sparc/erc32 BSP should be affected by this criterion. And if you
like to, you should also consider testing it on a Cygwin32 and a
Solaris host for one arbitrary BSP.
Diffstat (limited to 'c/src/lib/libbsp/unix/posix/tools/runtest.in')
-rw-r--r-- | c/src/lib/libbsp/unix/posix/tools/runtest.in | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/unix/posix/tools/runtest.in b/c/src/lib/libbsp/unix/posix/tools/runtest.in new file mode 100644 index 0000000000..2d08f2f033 --- /dev/null +++ b/c/src/lib/libbsp/unix/posix/tools/runtest.in @@ -0,0 +1,255 @@ +#!@KSH@ -p +# +# Run rtems tests on a POSIX-ish UNIX +# +# $Id$ +# + +trap "test_exit 1" 1 2 3 13 14 15 + +trap "test_exit 1" 1 2 3 13 14 15 + +# progname=`basename $0` +progname=${0##*/} # fast basename hack for ksh, bash + +USAGE=\ +"usage: $progname [ -opts ] test [ test ... ] + -c clicks -- specify (hex) value for clicks / tick + -v -- verbose + -l logdir -- specify log directory (default is 'logdir') + + Specify test as 'test' or 'test.exe'. + All multiprocessing tests *must* be specified simply as 'mp01', etc. +" + +# export everything +set -a + +# log an error to stderr +prerr() +{ + echo "$*" >&2 +} + +fatal() { + [ "$1" ] && prerr $* + prerr "$USAGE" + exit 1 +} + +warn() { + [ "$1" ] && prerr $* +} + +# print args, 1 per line +ml_echo() +{ + for l + do + echo "$l" + done +} + +killem() +{ + kill -9 $pid $pid1 $pid2 2> /dev/null +} + + +killem() +{ + kill -9 $pid $pid1 $pid2 2> /dev/null +} + + +test_exit() +{ + exit_code=$1 + + killem + + killem + + rm -f ${logfile}.tmp* + + exit $exit_code +} + +# +# process the options +# +# defaults for getopt vars +# + +verbose="" +extra_options="" +clicks_per_tick="" +logdir=log +# how long can we run; rtems tests might run 300 seconds +max_run_time=400 +run_to_completion="yes" + +while getopts vo:c:l: OPT +do + case "$OPT" in + v) + verbose="yes";; + l) + logdir="$OPTARG";; + o) + extra_options="$OPTARG";; + c) + clicks_per_tick="$OPTARG";; + *) + fatal;; + esac +done + +let $((shiftcount = $OPTIND - 1)) +shift $shiftcount + +args=$* + +# +# Run the tests +# + +tests="$args" +if [ ! "$tests" ] +then + set -- `echo *.exe` + tests="$*" +fi + +[ -d $logdir ] || mkdir $logdir || fatal "could not create log directory ($logdir)" + +for tfile in $tests +do + + tname=`echo $tfile | sed -e 's/\.exe$//'` + tname=`basename $tname` + + TEST_TYPE="single" + + case $tname in + monitor) + if [ $run_to_completion = "yes" ] + then + warn "Skipping $tname; it is interactive" + continue + fi + ;; + *-node2*) + warn "Skipping $tname; 'runtest' runs both nodes when for *-node1" + continue;; + *-node1*) + tname=`echo $tname | sed 's/-node.*//'` + warn "Running both nodes associated with $tname" + TEST_TYPE="mp" + ;; + stackchk*|spfatal*|malloctest*|termio*) + warn "Skipping $tname; it locks up or takes a VERY long time to run" + continue + ;; + esac + + if [ $TEST_TYPE = "mp" ] + then + logfile1=$logdir/${tname}_1 + infofile1=$logfile1.info + logfile2=$logdir/${tname}_2 + infofile2=$logfile2.info + + rm -f ${logfile1} + rm -f ${logfile2} + + date=`date` + echo "Starting $tname at $date" + + ./${tname}-node1.exe > $logfile1 2>&1 & + pid1=$! + ./${tname}-node2.exe > $logfile2 2>&1 & + pid2=$! + + # Wait for both cpu's to complete, ensuring they don't run forever... + time_run=0 + while [ $time_run -lt $max_run_time ] + do + # sleep 5s at a time waiting for jobs to finish or timer to expire + # if job has exited, then we exit, too. + sleep 5 + kill -0 $pid1 2> /dev/null + running1=$? + kill -0 $pid2 2> /dev/null + running2=$? + if [ $running1 -eq 0 ] && [ $running2 -eq 0 ] # both still running + then + time_run=$((time_run + 5)) + if [ $time_run -ge $max_run_time ] + then + echo "$tname ran too long; killing it" + ran_too_long="yes" + fi + else + ran_too_long="no" + # if one is still running, have to kill them + if [ $running1 -ne $running2 ] + then + sleep 10 # give other node a chance to gracefully die + fi + break + fi + done + + # make sure they are gone + kill -9 $pid1 2> /dev/null + kill -9 $pid2 2> /dev/null + fi + + if [ $TEST_TYPE = "single" ] + then + logfile=$logdir/$tname + infofile=$logfile.info + + rm -f ${logfile} + + date=`date` + echo "Starting $tname.exe at $date" + + ./$tname.exe > $logfile 2>&1 & + pid=$! + + # Make sure it won't run forever... + time_run=0 + while [ $time_run -lt $max_run_time ] + do + # sleep 5s at a time waiting for job to finish or timer to expire + # if job has exited, then we exit, too. + sleep 5 + kill -0 $pid 2> /dev/null + running=$? + if [ $running -eq 0 ] + then + time_run=$((time_run + 5)) + if [ $time_run -ge $max_run_time ] + then + kill -9 $pid 2> /dev/null + ran_too_long="yes" + fi + else + ran_too_long="no" + break + fi + done + fi + + pid="" + +done + +test_exit 0 + +# Local Variables: *** +# mode:ksh *** +# End: *** + |