📄 runtest.in
字号:
#!@KSH@ -p## Run rtems tests on a POSIX-ish UNIX## $Id: runtest.in,v 1.1.10.1 2003/08/14 13:13:11 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 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 secondsmax_run_time=400run_to_completion="yes"while getopts vo:c:l: OPTdo case "$OPT" in v) 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" ]then set -- `echo *.exe` tests="$*"fi[ -d $logdir ] || mkdir $logdir || fatal "could not create log directory ($logdir)"for tfile in $testsdo tname=`echo $tfile | sed -e 's/\.exe$//'` tname=`basename $tname` TEST_TYPE="single" case $tname in monitor* | termios* | fileio*) 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=""donetest_exit 0# Local Variables: ***# mode:ksh ***# End: ***
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -