and added files
[bcm963xx.git] / userapps / opensource / net-snmp / testing / eval_suite.sh
diff --git a/userapps/opensource/net-snmp/testing/eval_suite.sh b/userapps/opensource/net-snmp/testing/eval_suite.sh
new file mode 100755 (executable)
index 0000000..b803820
--- /dev/null
@@ -0,0 +1,212 @@
+#!/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
+
+
+