summaryrefslogblamecommitdiffstats
path: root/c/src/lib/libbsp/mips/jmr3904/tools/runtest
blob: 3d94546d902b480d574757050b193c0f2e5c090a (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                                                
                                        









































































                                                                            
                                









































                                           
                                            












                                                                   
                                




                                       
                                                        














                                                                             
                                          
















































                                                                    
 
                                                       
















                                                                          

                                                                       







                                                                   

                                                     



                        

                                                              


              







































                                                                                  
#!/bin/sh -p
#
# Run rtems tests on the powerpc simulator
# 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
#
#  COPYRIGHT (c) 1989-1999.
#  On-Line Applications Research Corporation (OAR).
#
#  The license and distribution terms for this file may be
#  found in found in the file LICENSE in this distribution or at
#  http://www.rtems.com/license/LICENSE.
#
#  $Id$
#

# progname=`basename $0`
progname=${0##*/}        # fast basename hack for ksh, bash

USAGE=\
"usage: $progname [ -opts ] test [ test ... ]
        -o options  -- specify options to be passed to simulator
	-v	    -- verbose
        -d          -- generate device tree file (as 'test'.device) 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 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
}

# run at normal and signalled exit
test_exit()
{
    exit_code=$1

    rm -f ${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=""
device_and_exit=""
stdio_setup="yes"
run_to_completion="yes"
logdir=log
update_on_tick="no"
max_run_time=$((5 * 60))
using_print_buffer="yes"
simulator=mipstx39-rtems4.9-run 

while getopts vdl:o:s: OPT
do
    case "$OPT" in
	v)
	    verbose="yes";;
	d)
	    device_and_exit="yes"
            run_to_completion="no"
            stdio_setup="no";;
        l)
            logdir="$OPTARG";;
        o)
            extra_options="$OPTARG";;
        s)
            simulator="$OPTARG";;
        *)
            fatal;;
    esac
done

let $((shiftcount = $OPTIND - 1))
shift $shiftcount

args=$*

#
#  Check some parameters
#

# JRS CHANGE 
# if [ ! -x ${simulator} ] ; then
#    fatal "${simulator} is not executable"
# fi;

#
# Run the tests
#

tests="$args"
if [ ! "$tests" ]
then
     set -- `ls -1 *.exe *.ralf 2>/dev/null`
     tests="$*"
fi

[ -d $logdir ] ||
  mkdir $logdir || fatal "could not create log directory ($logdir)"

# where the tmp files go
trap "test_exit" 1 2 3 13 14 15

for tfile in $tests
do

   tname=`basename $tfile .exe`
   tname=`basename $tname .ralf`
   cpus="1"
   TEST_TYPE="single"

   case $tname in
       # size is no longer interactive.
       capture* | monitor* | termios* | fileio* | pppd*)
            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*)
           warn "Running both nodes associated with $tname"
           variant=`echo $tname | sed 's/.*-node[12]//' | sed 's/\.exe//'`
           tname=`echo $tname | sed 's/-node.*//'`
           TEST_TYPE="mp"
           ;;
       minimum*|stackchk*|*fatal*|termio*)
           continue
           ;;
   esac

   if [ $TEST_TYPE = "mp" ]
   then
       cpus="1 2"

       logfile1=$logdir/${tname}_1${variant}
       logfile2=$logdir/${tname}_2${variant}
       infofile1=$logfile1.info
       infofile2=$logfile2.info

       rm -f ${logfile1} ${logfile2}

       date=`date`
       echo "Starting $tname at $date"

       ${simulator} --board=jmr3904 ${tname}-node1${variant}.exe | \
         sed -e 's/
//' -e '/^$/d' > ${logfile1} &

       ${simulator} --board=jmr3904 ${tname}-node2${variant}.exe | \
         sed -e 's/
//' -e '/^$/d' > ${logfile2} &

       wait

   fi

   if [ $TEST_TYPE = "single" ]
   then
     logfile=$logdir/${tname}_1
     infofile=$logfile.info

     rm -f ${logfile}.tmp*

     date=`date`
     echo "Starting $tname at $date"

     # Generate a device file to get the work done.
     # The device file must do the following:
     #
     #       arrange for more memory (2 Mb)

     if [ "$device_and_exit" = "yes" ]
     then
          fatal "Cannot currently generate device files"
     fi

     # Spin off the simulator in the background

     ${simulator} --board=jmr3904 $tfile </dev/null | \
       sed -e 's/
//' -e '/^$/d' > ${logfile} 2>&1 &
     pid=$!

     # Make sure it won't run forever...
     millilimit=`expr ${max_run_time} \* 1000`
     milliseconds=0
     while :
     do
       # sleep 10ms at a time waiting for job to finish or timer to expire
       # if job has exited, then we exit, too.
       usleep 10000  # ten milliseconds
       milliseconds=`expr ${milliseconds} + 10`
       kill -0 $pid 2> /dev/null
       running=$?
       if [ $running -eq 0 ] ; then
	 if [ ${milliseconds} -ge ${millilimit} ]; then
	   kill -9 $pid 2> /dev/null
	   #cat ${logfile}
	   echo "${tname} killed after running ${max_run_time} seconds"
	   break
	 fi
	 grep "^Unhandled exception" ${logfile} >/dev/null
	 exceptionExit=$?
	 grep "^mips-core: " ${logfile} >/dev/null
	 badAccessExit=$?
	 if [ $badAccessExit -eq 0 -o $exceptionExit -eq 0 ] ; then
	   kill -9 ${pid} >/dev/null 2>&1
	   #cat ${logfile}
	   # echo Ran in ${milliseconds} milliseconds
	 fi

       else
	 # done normally
	 # cat ${logfile}
	 # echo "${tname} ran in ${milliseconds} milliseconds"
	 break
       fi
     done
   fi

   # Create the info files
   for cpu in $cpus
   do
   {
       echo "$date"
       echo "Test run on: `uname -n`"
       echo "Host Information:"
       echo `uname -a`
       echo

       #sed -e 's/
//' < ${logdir}/${tname}_${cpu}
       cat ${logdir}/${tname}_${cpu}

       if [ "$ran_too_long" = "yes" ]
       then
           echo "Test did NOT finish normally; killed after $max_run_time seconds"
       fi

       echo
       date;
   } > ${logdir}/${tname}_${cpu}.info
   done

   if [ "$cpus" = "1" ]
   then
        mv ${infofile} $logdir/${tname}.info
        mv ${logfile}  $logdir/${tname}
   fi

done

echo "Tests completed at " `date`
test_exit 0

# Local Variables: ***
# mode:ksh ***
# End: ***