| #!/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="$*" |
| |
| umask 0077 # just to be on the safe side |
| SNMP_TMPDIR=/tmp/net-snmpd-eval-dir.$$ |
| rm -rf $SNMP_TMPDIR |
| mkdir $SNMP_TMPDIR || exit -1 |
| chmod 0700 $SNMP_TMPDIR |
| TMPFILE=$SNMP_TMPDIR/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 |
| rm -rf $SNMP_TMPDIR |
| |
| exit $TESTFAILURE |
| |
| |
| |