eval_suite.sh
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:5k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. #
  3. # eval_suite.sh [-h][<args_passed_to_getresults>]
  4. #
  5. # CALLS: eval_oneprogram.sh [-h][-lk] <program>
  6. #
  7. # RETURNS: Number of failed tests, regardless of how that failure occured
  8. # or how many failures there were in a given test.
  9. #
  10. #
  11. USAGE_LONG='
  12. #
  13. # HOW TO ENTER A NEW TEST
  14. #
  15. # To add a test to the testlist, add a line to the TESTLISTFILE (eval_testlist)
  16. # using the following format:
  17. #
  18. # <#_of_expected_successes> [#]<program> <args>
  19. #
  20. # Any white space may be used as separator.  If <program> is immediately
  21. # preceeded by a pound sign (#) that test will be skipped.  (No white space
  22. # allowed after the pound.  Eg, "#<program>".)
  23. #
  24. #
  25. # HOW TESTS ARE RUN AND EVALUATED
  26. #
  27. # The harness for individual tests is the script "eval_oneprogram.sh".
  28. # It expects that the test print FAILED when something fails, and SUCCESS
  29. # when something succeeds.  If a test executes properly there should be
  30. # some SUCCESS strings and NO FAILED strings.  If the reason for the
  31. # success or failure of the test should be printed on the SAME line as the
  32. # SUCCESS/FAILED string to allow the dianostic to be easilly grepped from
  33. # the its output.
  34. #
  35. # The long form of the output (-l flag) will capture that output which may
  36. # help to diagnosis the problem.  For more information:
  37. #
  38. # % eval_oneprogram.sh -h
  39. #
  40. # MISSING TESTS ARE NOTED
  41. #
  42. # If an executable is found MISSING, a note is printed to that effect
  43. # and TESTFAILURE is incremented by 1.
  44. #
  45. '
  46. #
  47. # Suggested improvement(s):
  48. # Have two (or more?) arbitrary script(s) that may be associated
  49. # with a given test.  One could prepare the environment, the other
  50. # could clean up the environment after running the test.  This could
  51. # help when testing large subsystems that might require legitimately
  52. # building or changing things such that the testable item may be 
  53. # accessed in the first place (eg). ...
  54. #
  55. #------------------------------------ -o- 
  56. # Usage mess.  (No, it works.)
  57. #
  58. USAGE="Usage: `basename $0` [-h][<args_for_getresults>]"
  59. usage() { echo; echo $USAGE; cat <<BLIK | sed 's/^#//' | sed '1d' | $PAGER
  60. $USAGE_LONG
  61. BLIK
  62. exit 0
  63. }
  64. [ "x$1" = "x-h" ] && usage
  65. #------------------------------------ -o- 
  66. # Globals.
  67. #
  68. PROGRAM=
  69. ARGUMENTS="$*"
  70. TMPFILE=/tmp/eval_suite.sh$$
  71. TESTLISTFILE=eval_testlist
  72. EXPECTEDSUCCESSES=
  73. TESTFAILURE=0
  74. testname=
  75. success_count=
  76. failed_count=
  77. #
  78. # TESTLISTFILE format:
  79. #   <expected_successes> <program> <arg(s)> ...
  80. #   <expected_successes> <program> <arg(s)> ...
  81. # ...
  82. #
  83. TESTLIST="`cat $TESTLISTFILE | sed 's/$/   ===/'`"
  84. #------------------------------------ -o- 
  85. # Run all tests in the testlist.  For each test do the following:
  86. #
  87. # 1) Note whether the test is SKIPPED or MISSING.
  88. #
  89. # 2) Run the test; collect the number of FAILED strings from the
  90. # return value of eval_oneprogram.sh.
  91. #
  92. # 3) Count the number of SUCCESSes from the test output.
  93. #
  94. # 4) Print the results.  If there were no FAILED strings *and* the
  95. # number of SUCCESS strings is what we expect, simply
  96. # note that the test passed.  Otherwise, cat the output
  97. # generated by eval_oneprogram.sh and (possibly)
  98. # print other details.
  99. #
  100. set x $TESTLIST
  101. shift
  102. while [ -n "$1" ] ; do
  103. #
  104. # Parse agument stream...
  105. #
  106. EXPECTEDSUCCESSES=$1
  107. shift
  108. PROGRAM=
  109. while [ "$1" != "===" ] ; do { PROGRAM="$PROGRAM $1" ; shift ; } done
  110. shift
  111. testname="`echo $PROGRAM | grep '^#' | sed 's/^#//'`"
  112. echo '+==================================-o-===+'
  113. echo
  114. #
  115. # Decide whether to skip the test, if it's mising, else run it.
  116. #
  117. [ -n "$testname" ] && { # Skip the test?
  118. echo "SKIPPING test for "$testname"."
  119. echo
  120. continue
  121. }
  122. [ ! -e "`echo $PROGRAM | awk '{ print $1 }'`" ] && { # Missing test?
  123. TESTFAILURE=`expr $TESTFAILURE + 1`
  124. echo "MISSING test for "$PROGRAM"."
  125. echo
  126. continue
  127. }
  128. echo "TESTING "$PROGRAM"..." # Announce test!
  129. #
  130. # Run the test and collect the failed_count and success_count.
  131. #
  132. eval_oneprogram.sh $ARGUMENTS $PROGRAM >$TMPFILE
  133. failed_count=$?
  134. success_count=`awk '$(NF-1) == "SUCCESS:" { print $NF; exit }' $TMPFILE`
  135. [ -z "$success_count" ] && success_count=0
  136. #
  137. # Output best-effort results of the test  -OR-  a fully successful run.
  138. #
  139. [ "$failed_count" -eq 0 -a 
  140. "$success_count" -eq "$EXPECTEDSUCCESSES" ] &&
  141. {
  142. echo
  143. echo $PROGRAM PASSED # Successful, fully, completed
  144. echo
  145. true
  146. } || {
  147. TESTFAILURE=`expr $TESTFAILURE + 1`
  148. echo
  149. cat $TMPFILE
  150. echo
  151. [ "$success_count" -ne $EXPECTEDSUCCESSES ] && {
  152. echo "Got $success_count SUCCESSes"
  153. "out of $EXPECTEDSUCCESSES."
  154. echo
  155. }
  156. true
  157. }  # end -- evaluation of and output based upon test success.
  158. done  # endwhile
  159. #------------------------------------ -o- 
  160. # Cleanup, exit.
  161. #
  162. rm -f $TMPFILE
  163. exit $TESTFAILURE