URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [unix/] [posix/] [tools/] [runtest.in] - Rev 1765
Compare with Previous | Blame | View Log
#!@KSH@ -p## Run rtems tests on a POSIX-ish UNIX## runtest.in,v 1.1 1998/10/14 20:19:20 joel Exp#trap "test_exit 1" 1 2 3 13 14 15trap "test_exit 1" 1 2 3 13 14 15# progname=`basename $0`progname=${0##*/} # fast basename hack for ksh, bashUSAGE=\"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 everythingset -a# log an error to stderrprerr(){echo "$*" >&2}fatal() {[ "$1" ] && prerr $*prerr "$USAGE"exit 1}warn() {[ "$1" ] && prerr $*}# print args, 1 per lineml_echo(){for ldoecho "$l"done}killem(){kill -9 $pid $pid1 $pid2 2> /dev/null}killem(){kill -9 $pid $pid1 $pid2 2> /dev/null}test_exit(){exit_code=$1killemkillemrm -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 secondsmax_run_time=400run_to_completion="yes"while getopts vo:c:l: OPTdocase "$OPT" inv)verbose="yes";;l)logdir="$OPTARG";;o)extra_options="$OPTARG";;c)clicks_per_tick="$OPTARG";;*)fatal;;esacdonelet $((shiftcount = $OPTIND - 1))shift $shiftcountargs=$*## Run the tests#tests="$args"if [ ! "$tests" ]thenset -- `echo *.exe`tests="$*"fi[ -d $logdir ] || mkdir $logdir || fatal "could not create log directory ($logdir)"for tfile in $testsdotname=`echo $tfile | sed -e 's/\.exe$//'`tname=`basename $tname`TEST_TYPE="single"case $tname inmonitor)if [ $run_to_completion = "yes" ]thenwarn "Skipping $tname; it is interactive"continuefi;;*-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;;esacif [ $TEST_TYPE = "mp" ]thenlogfile1=$logdir/${tname}_1infofile1=$logfile1.infologfile2=$logdir/${tname}_2infofile2=$logfile2.inform -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=0while [ $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 5kill -0 $pid1 2> /dev/nullrunning1=$?kill -0 $pid2 2> /dev/nullrunning2=$?if [ $running1 -eq 0 ] && [ $running2 -eq 0 ] # both still runningthentime_run=$((time_run + 5))if [ $time_run -ge $max_run_time ]thenecho "$tname ran too long; killing it"ran_too_long="yes"fielseran_too_long="no"# if one is still running, have to kill themif [ $running1 -ne $running2 ]thensleep 10 # give other node a chance to gracefully diefibreakfidone# make sure they are gonekill -9 $pid1 2> /dev/nullkill -9 $pid2 2> /dev/nullfiif [ $TEST_TYPE = "single" ]thenlogfile=$logdir/$tnameinfofile=$logfile.inform -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=0while [ $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 5kill -0 $pid 2> /dev/nullrunning=$?if [ $running -eq 0 ]thentime_run=$((time_run + 5))if [ $time_run -ge $max_run_time ]thenkill -9 $pid 2> /dev/nullran_too_long="yes"fielseran_too_long="no"breakfidonefipid=""donetest_exit 0# Local Variables: ***# mode:ksh ***# End: ***
