runtest.in
来自「RTEMS (Real-Time Executive for Multiproc」· IN 代码 · 共 332 行
IN
332 行
#!@KSH@ -p## $Id: runtest.in,v 1.1.6.1 2003/08/14 13:12:10 joel Exp $## Run rtems tests on the c4x simulator built into gdb# This program generates a simulator script to run each test# Typically the test is then run, although it can be generated# and left as a file using -s## progname=`basename $0`progname=${0##*/} # fast basename hack for ksh, bashUSAGE=\"usage: $progname [ -opts ] test [ test ... ] -o options -- specify options to be passed to simulator -v -- verbose -s -- generate script file (as 'test'.ss) and exit -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}# run at normal and signalled exittest_exit(){ exit_code=$1 rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp* [ "$sim_pid" ] && kill -9 $sim_pid exit $exit_code}## process the options## defaults for getopt vars## max_run_time is defaulted to 5 minutes#verbose=""extra_options=""script_and_exit=""stdio_setup="yes"run_to_completion="yes"logdir=logupdate_on_tick="no"max_run_time=$((6 * 60)) # is 5 on other simulators.using_print_buffer="yes"while getopts vhr12o:c:sl:t OPTdo case "$OPT" in v) verbose="yes";; s) script_and_exit="yes" run_to_completion="no" stdio_setup="no";; l) logdir="$OPTARG";; o) extra_options="$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)"cpus=1# where the tmp files gostatfile=/tmp/stats$$scriptfile=/tmp/script$$trap "test_exit" 1 2 3 13 14 15for tfile in $testsdo tname=`basename $tfile .exe` TEST_TYPE="single" case $tname in monitor* | termios* | fileio*) if [ $run_to_completion = "yes" ] then warn "Skipping $tname; it is interactive" continue fi ;; *-node2*) fatal "MP tests not supported" warn "Skipping $tname; 'runtest' runs both nodes when for *-node1" continue;; *-node1*) fatal "MP tests not supported" warn "Running both nodes associated with $tname" tname=`echo $tname | sed 's/-node.*//'` TEST_TYPE="mp" ;; stackchk*|spfatal*|malloctest*|termio*) warn "Skipping $tname; it locks up or takes a VERY long time to run" continue ;; esac # Change the title bar to indicate which test we are running # The simulator screen doesn't provide any indication logfile=$logdir/$tname infofile=$logfile.info rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp* date=`date` echo "Starting $tname at $date" # Generate a script file to get the work done. # The script file must do the following: # # load the program (programs if MP test) # arrange for capture of output # run the program # produce statistics { case $TEST_TYPE in "mp") fatal "MP tests not supported" ;; # All other tests (single-processor) *) echo "target sim -3" echo "sim m r 0" echo "sim m w 0" echo "load" echo "" echo "printf \"START_OF_TEST\\n\"" echo "run" echo "printf \"END_OF_TEST\\n\"" echo "quit" ;; esac } > ${scriptfile} if [ "$script_and_exit" = "yes" ] then mv ${scriptfile} $tname.ss warn "script left in $tname.ss" test_exit 0 fi # Spin off the simulator in the background c4x-rtems-gdb $extra_options -n \ --command ${scriptfile} ${tfile} >${logfile}.tmp 2>&1 & sim_pid=$! # Make sure it won't run forever... { time_run=0 while [ $time_run -lt $max_run_time ] do # sleep 10s at a time waiting for job to finish or timer to expire # if job has exited, then we exit, too. sleep 10 if kill -0 $sim_pid 2>/dev/null then time_run=$((time_run + 10)) else exit 0 fi done kill -2 $sim_pid 2>/dev/null { sleep 5; kill -9 $sim_pid 2>/dev/null; } & } & wait $sim_pid status=$? if [ $status -ne 0 ] then ran_too_long="yes" else ran_too_long="no" fi sim_pid="" # fix up the printf output from the test case $TEST_TYPE in mp) fatal "MP not supported" ;; *) output_it=0 clean_exit=0 sed -e '1,9d' \ -e 's/
//' -e '/^$/d' < ${logfile}.tmp | while read line do if [ $output_it -eq 1 ] ; then case $line in END_OF_TEST*) output_it=0 ;; *simio.c:86*) output_it=0 clean_exit=1 ;; *) echo "$line" ;; esac else if [ "$line" = "START_OF_TEST" ] ; then output_it=1 fi fi done > ${logfile}_1 if [ ${clean_exit} -eq 0 ] ; then mv ${logfile}_1 ${logfile}_1.XXX sed -e '/^Program received signal SIGTRAP/d' \ <${logfile}_1.XXX >${logfile}_1 rm -f ${logfile}_1.XXX fi ;; esac # Create the info files for cpu in $cpus do { echo "$date" echo "Test run on: `uname -n` ( `uname -a` )" output_it=1 sed -e 's/
//' < ${logfile}.tmp | while read line do if [ $output_it -eq 0 ] ; then if [ "$line" = "END_OF_TEST" ] ; then output_it=1 fi else if [ "$line" = "START_OF_TEST" ] ; then output_it=0 else echo "$line" fi fi done if [ "$ran_too_long" = "yes" ] then echo "Test did NOT finish normally; killed after $max_run_time seconds" fi echo date; } > ${infofile}_$cpu done rm -f ${logfile}.tmp* if [ "$cpus" = "1" ] then mv ${infofile}_1 ${infofile} mv ${logfile}_1 ${logfile} fidonetest_exit 0# Local Variables: ***# mode:ksh ***# End: ***
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?