eval_suite.sh
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:5k
- #!/bin/sh
- #
- # eval_suite.sh [-h][<args_passed_to_getresults>]
- #
- # CALLS: eval_oneprogram.sh [-h][-lk] <program>
- #
- # RETURNS: Number of failed tests, regardless of how that failure occured
- # or how many failures there were in a given test.
- #
- #
- USAGE_LONG='
- #
- # HOW TO ENTER A NEW TEST
- #
- # To add a test to the testlist, add a line to the TESTLISTFILE (eval_testlist)
- # using the following format:
- #
- # <#_of_expected_successes> [#]<program> <args>
- #
- # Any white space may be used as separator. If <program> is immediately
- # preceeded by a pound sign (#) that test will be skipped. (No white space
- # allowed after the pound. Eg, "#<program>".)
- #
- #
- # HOW TESTS ARE RUN AND EVALUATED
- #
- # The harness for individual tests is the script "eval_oneprogram.sh".
- # It expects that the test print FAILED when something fails, and SUCCESS
- # when something succeeds. If a test executes properly there should be
- # some SUCCESS strings and NO FAILED strings. If the reason for the
- # success or failure of the test should be printed on the SAME line as the
- # SUCCESS/FAILED string to allow the dianostic to be easilly grepped from
- # the its output.
- #
- # The long form of the output (-l flag) will capture that output which may
- # help to diagnosis the problem. For more information:
- #
- # % eval_oneprogram.sh -h
- #
- #
- # MISSING TESTS ARE NOTED
- #
- # If an executable is found MISSING, a note is printed to that effect
- # and TESTFAILURE is incremented by 1.
- #
- '
- #
- # Suggested improvement(s):
- # Have two (or more?) arbitrary script(s) that may be associated
- # with a given test. One could prepare the environment, the other
- # could clean up the environment after running the test. This could
- # help when testing large subsystems that might require legitimately
- # building or changing things such that the testable item may be
- # accessed in the first place (eg). ...
- #
- #------------------------------------ -o-
- # Usage mess. (No, it works.)
- #
- USAGE="Usage: `basename $0` [-h][<args_for_getresults>]"
- usage() { echo; echo $USAGE; cat <<BLIK | sed 's/^#//' | sed '1d' | $PAGER
- $USAGE_LONG
- BLIK
- exit 0
- }
- [ "x$1" = "x-h" ] && usage
- #------------------------------------ -o-
- # Globals.
- #
- PROGRAM=
- ARGUMENTS="$*"
- TMPFILE=/tmp/eval_suite.sh$$
- TESTLISTFILE=eval_testlist
- EXPECTEDSUCCESSES=
- TESTFAILURE=0
- testname=
- success_count=
- failed_count=
- #
- # TESTLISTFILE format:
- # <expected_successes> <program> <arg(s)> ...
- # <expected_successes> <program> <arg(s)> ...
- # ...
- #
- TESTLIST="`cat $TESTLISTFILE | sed 's/$/ ===/'`"
- #------------------------------------ -o-
- # Run all tests in the testlist. For each test do the following:
- #
- # 1) Note whether the test is SKIPPED or MISSING.
- #
- # 2) Run the test; collect the number of FAILED strings from the
- # return value of eval_oneprogram.sh.
- #
- # 3) Count the number of SUCCESSes from the test output.
- #
- # 4) Print the results. If there were no FAILED strings *and* the
- # number of SUCCESS strings is what we expect, simply
- # note that the test passed. Otherwise, cat the output
- # generated by eval_oneprogram.sh and (possibly)
- # print other details.
- #
- set x $TESTLIST
- shift
- while [ -n "$1" ] ; do
- #
- # Parse agument stream...
- #
- EXPECTEDSUCCESSES=$1
- shift
- PROGRAM=
- while [ "$1" != "===" ] ; do { PROGRAM="$PROGRAM $1" ; shift ; } done
- shift
- testname="`echo $PROGRAM | grep '^#' | sed 's/^#//'`"
- echo '+==================================-o-===+'
- echo
- #
- # Decide whether to skip the test, if it's mising, else run it.
- #
- [ -n "$testname" ] && { # Skip the test?
- echo "SKIPPING test for "$testname"."
- echo
- continue
- }
- [ ! -e "`echo $PROGRAM | awk '{ print $1 }'`" ] && { # Missing test?
- TESTFAILURE=`expr $TESTFAILURE + 1`
- echo "MISSING test for "$PROGRAM"."
- echo
- continue
- }
- echo "TESTING "$PROGRAM"..." # Announce test!
- #
- # Run the test and collect the failed_count and success_count.
- #
- eval_oneprogram.sh $ARGUMENTS $PROGRAM >$TMPFILE
- failed_count=$?
- success_count=`awk '$(NF-1) == "SUCCESS:" { print $NF; exit }' $TMPFILE`
- [ -z "$success_count" ] && success_count=0
-
- #
- # Output best-effort results of the test -OR- a fully successful run.
- #
- [ "$failed_count" -eq 0 -a
- "$success_count" -eq "$EXPECTEDSUCCESSES" ] &&
- {
- echo
- echo $PROGRAM PASSED # Successful, fully, completed
- echo
-
- true
- } || {
- TESTFAILURE=`expr $TESTFAILURE + 1`
- echo
- cat $TMPFILE
- echo
- [ "$success_count" -ne $EXPECTEDSUCCESSES ] && {
- echo "Got $success_count SUCCESSes"
- "out of $EXPECTEDSUCCESSES."
- echo
- }
- true
- } # end -- evaluation of and output based upon test success.
- done # endwhile
- #------------------------------------ -o-
- # Cleanup, exit.
- #
- rm -f $TMPFILE
- exit $TESTFAILURE