RUNTESTS
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:8k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. #
  3. # RUNTESTS [-h]...
  4. #
  5. # RETURNS: Number of failed tests.
  6. #
  7. # CALLS: eval_oneprogram.sh [-h][-lk] <program>
  8. #
  9. #
  10. #
  11. # Suggested improvement(s):
  12. # Run a given test against a running agent.
  13. #
  14. # Variables:  (* = exported)
  15. #  *SNMP_BASEDIR:     the source base directory for tests
  16. #  *SNMP_UPDIR:     directory above where the test binaries live (-D option)
  17. #  *SNMP_PATH ## yes, PATH is already setup
  18. #  *SNMP_VERBOSE ## 0=silent, 1=warnings, 2=more
  19. # Usage mess.  (No, it works.)
  20. #
  21. usage() { 
  22.     cat << BLIK
  23. Usage: `basename $0` [-a] [-S SLEEPTIME] [-h] [-i] [-v] [-V] [-s] [-XM]
  24.        [-T TESTNUMS] [-D bindir] [-S seconds] [-P <udp|tcp|udp6|tcp6|unix>]
  25.   -a        run all tests.
  26.   -T NUMS   run particular tests (command separated list of numbers)
  27.   -i        run interactively
  28.   -v        be verbose
  29.   -V        be very verbose
  30.   -S TIME   TIME should be used as the timeout when waiting for a
  31.             response from the agent.
  32.   -A FLAGS  Extra flags to pass to the agent.
  33.   -t FLAGS  Extra flags to pass to the trapd.
  34.   -s        Don't erase the runtime data directory for successful tests
  35.   -XM       Don't set MIBDIRS environment unless absolutely necessary
  36.   -x        Turn on SH output debugging for tests.
  37.   -P TRANS  Specify on which transport domain to run the tests.Default is udp.
  38. BLIK
  39.     exit 0
  40. }
  41. trap "exit 1;" 1 2 3 9 13 15 17
  42. SNMP_BASEDIR=`dirname $0`
  43. SNMP_PREFER_NEAR_MIBS=1 ## prefer MIB files found in source hierarchy
  44. export SNMP_PREFER_NEAR_MIBS
  45. ### Check for the configuration script.
  46. ##if [ ! -s "${SNMP_BASEDIR}/TESTCONF.sh"  ] ; then 
  47. ##  echo "No TESTCONF.sh in "$SNMP_BASEDIR" ; exiting"
  48. ##  exit 0
  49. ##fi
  50. ORIGDIR=`pwd` ## this script may be invoked with relative path
  51. SNMP_UPDIR=.. ## building from the source tree
  52. interactive=no
  53. SNMP_VERBOSE=${SNMP_VERBOSE:=0}
  54. SNMP_SLEEP=${SNMP_SLEEP:=1}  ## default seconds to sleep
  55. SH_DEBUG=0
  56. while [ -n "$1" ]; do
  57.     case "$1" in
  58. -h)
  59.     usage
  60.     exit
  61.     ;;
  62. -i)
  63.     interactive="yes"
  64.     ;;
  65. -v)
  66.     SNMP_VERBOSE=1
  67.     ;;
  68. -V)
  69.     SNMP_VERBOSE=2
  70.     ;;
  71. -s)
  72.     SNMP_SAVE_TMPDIR="yes"
  73.     export SNMP_SAVE_TMPDIR
  74.     ;;
  75. -D)
  76.     shift
  77.     SNMP_UPDIR="$1"
  78.     ;;
  79. -P)
  80. shift
  81. SNMP_TRANSPORT_SPEC="$1"
  82. export SNMP_TRANSPORT_SPEC
  83. if [ "x$SNMP_TRANSPORT_SPEC" = "xunix" ];then
  84. SNMP_SNMPD_PORT="/var/tmp/unixsnmpd"
  85. SNMP_SNMPTRAPD_PORT="/var/tmp/unixsnmptrapd"
  86. SNMP_TEST_DEST=""
  87. export SNMP_SNMPD_PORT
  88. export SNMP_SNMPTRAPD_PORT
  89. export SNMP_TEST_DEST
  90. fi
  91. ;;
  92. -T)
  93.     shift
  94.     test_nums=`echo $1 | sed 's/,/ /g'`
  95.     ;;
  96. -a)
  97.     test_nums="all"
  98.     ;;
  99. -A)
  100.     shift
  101.     AGENT_FLAGS="$1"
  102.     export AGENT_FLAGS
  103.     ;;
  104. -S)
  105.     shift
  106.     SNMP_SLEEP="$1"
  107.     ;;
  108. -t)
  109.     shift
  110.     TRAPD_FLAGS="$1"
  111.     export TRAPD_FLAGS
  112.     ;;
  113. -x)
  114.     SH_DEBUG=1
  115.     ;;
  116. -XM)
  117.     SNMP_PREFER_NEAR_MIBS=0
  118.     ;;
  119.     esac
  120.     shift
  121. done
  122. export SNMP_SLEEP
  123. # Make sure MinGW / MSYS users have the kill.exe program to stop the agent and snmptrapd
  124. if [ "x$OSTYPE" = "xmsys" ]; then
  125.   kill_command=`which kill.exe`
  126.   if [ "x$kill_command" = "x" ]; then
  127.     echo Could not find kill.exe.  Aborting tests
  128.     echo Kill.exe is available from the Support Tools package availble on the
  129.     echo Windows 2000 CDROM under SUPPORT\TOOLS.
  130.     exit
  131.   fi
  132. fi
  133. # Find executables in source first, then build, then existing PATH.
  134. ## Add to PATH if a binary is found.
  135. cd $SNMP_UPDIR
  136. SNMP_UPDIR=`pwd`
  137. bf=snmpget
  138. if [ -x "$bf" ] ; then
  139.    PATH=$SNMP_UPDIR:$PATH
  140. else
  141.   for dd in apps bin ; do
  142.    bf=$dd/snmpget
  143.    if [ -x "$bf" ] ; then
  144.       PATH=$SNMP_UPDIR/$dd:$PATH
  145.       break
  146.    fi
  147.   done
  148. fi
  149. for dd in agent bin sbin ; do
  150.    bf=$dd/snmpd
  151.    if [ -x "$bf" ] ; then
  152.       PATH=$SNMP_UPDIR/$dd:$PATH
  153.       break
  154.    fi
  155. done
  156. bf=include/net-snmp/net-snmp-config.h
  157. if [ ! -s "$bf" ] ; then
  158.    echo "No "$bf" in $SNMP_UPDIR . Some tests will be skipped"
  159. fi
  160. unset bf
  161. # Run from the test scripts directory.
  162. cd $ORIGDIR ; cd ${SNMP_BASEDIR}
  163. SNMP_BASEDIR=`pwd`
  164. # Setup for the next test run.
  165. rm -f core tests/core
  166. PATH=${SNMP_BASEDIR}:$PATH
  167. SNMP_PATH=yes
  168. export PATH
  169. export SNMP_BASEDIR
  170. export SNMP_PATH
  171. export SNMP_UPDIR
  172. export SNMP_VERBOSE
  173. WHICH=which
  174. $WHICH $0 > /dev/null 2>&1
  175. if [ $? -ne 0 ] ; then
  176.     WHICH=type
  177. fi
  178. for needed in snmpd snmpget snmpgetnext; do
  179.     $WHICH $needed > /dev/null 2>&1
  180.     if [ $? -ne 0  ] ; then 
  181.         echo "No $needed found. Exiting"
  182.         exit 1
  183.     fi
  184. done
  185. #
  186. # Distinguished expectations.
  187. #
  188. if [ $SNMP_VERBOSE -gt 0 ]; then
  189.     echo ${SNMP_UPDIR}/testing
  190.     echo path is $PATH
  191.     echo top of build is $SNMP_UPDIR
  192.     echo source testing is $SNMP_BASEDIR
  193.     $WHICH snmpusm
  194. fi
  195. #
  196. # Source the testing configuration file
  197. #
  198. . TESTCONF.sh
  199. # Hack: the above created a directory, now we have to nuke it and
  200. # forget about it...  All for the convenience of the test writer.
  201. rmdir $SNMP_TMPDIR
  202. unset SNMP_TMPDIR
  203. export SNMP_TMPDIR
  204. if [ "x$SNMP_PREFER_NEAR_MIBS" = "x0" ]; then
  205.     # try the compiled MIBDIRS directory first.
  206.     # if MIB files are not found, fallback to the source base
  207.     snmptranslate -On -IR sysDescr > /dev/null 2>&1
  208.     if [ $? -ne 0 ] ; then
  209.         if [ "x$MIBDIRS" = "x" ]; then
  210.      MIBDIRS=${SNMP_BASEDIR}/../mibs
  211.      export MIBDIRS
  212.         fi
  213.     fi
  214.     snmptranslate -On -IR sysDescr > /dev/null 2>&1
  215.     if [ $? -ne 0 ] ; then
  216.         echo "Could not resolve sysDescr in $MIBDIRS. Exiting"
  217.         exit 1
  218.     fi
  219. fi ## SNMP_PREFER_NEAR_MIBS
  220. #
  221. # Switch to the testing directory, for ease of the client test packages.
  222. #
  223. cd ./tests
  224. #------------------------------------ -o- 
  225. # Globals.
  226. #
  227. PROGRAM=
  228. ARGUMENTS="$*"
  229. TMPFILE=$SNMP_TMPDIR/eval_suite.sh$$
  230. testname=
  231. success_count=0
  232. failed_count=0
  233. if [ "x$do_tests" = "x" ]; then
  234.     #
  235.     # List the tests in question
  236.     #
  237.     num=0
  238.     for testfile in T*; do
  239. case $testfile in
  240.     # Skip backup files, and the like.
  241.     *~)     ;;
  242.     *.bak)  ;;
  243.     *.orig) ;;
  244.     *.rej)  ;;
  245.     # Do the rest
  246.     *)
  247. num=`expr $num + 1`
  248. if [ "x$interactive" != "xyes" -a "x$test_nums" = "x" ]; then
  249.     eval_onescript.sh $testfile $num "yes"
  250. fi
  251. all_tests="$all_tests $num"
  252. all_files="$all_files $testfile"
  253. ;;
  254. esac
  255.     done
  256.     #
  257.     # TODO: allow user to interactively pick the list of tests to run.
  258.     #
  259.     if [ "x$interactive" != "xyes" ]; then
  260. if [ "x$test_nums" = "x" ]; then
  261.     ECHO "Enter test numbers [all]: "
  262.     read inp
  263. else
  264.     if [ "x$test_nums" = "xall" ]; then
  265. inp=""
  266.     else
  267. inp="$test_nums"
  268.     fi
  269. fi
  270. if [ "x$inp" = "x" ]; then
  271.     do_tests="$all_files"
  272. else
  273.     a=1
  274.     set $all_files
  275.     while [ $a -le $num ]; do
  276. if echo " $inp " | grep " $a " > /dev/null; then
  277.     do_tests="$do_tests $1"
  278.     if [ "x$test_nums" = "x" ] ; then
  279. test_nums=$a
  280.     fi
  281. fi
  282. shift
  283. a=`expr $a + 1`
  284.     done
  285. fi
  286.     fi
  287.     #echo Starting: Running tests $do_tests
  288. fi
  289. #
  290. # Run the tests
  291. #
  292. if [ "x$test_nums" = "xall" -o "x$test_nums" = "x" ] ; then
  293.     num=1
  294. else
  295.     num="$test_nums"
  296. fi
  297. cntr=0
  298. for testfile in $do_tests; do
  299.     dothisone="yes"
  300.     id_x=0
  301.     for itest in $inp; do
  302.         if [ "$cntr" = "$id_x" ] ; then
  303.             num="$itest"
  304.         fi
  305.     id_x=`expr $id_x + 1`
  306.     done
  307.     if [ "x$interactive" = "xyes" ]; then
  308.         if [ $SH_DEBUG = 1 ] ; then
  309.     sh -x "${SNMP_BASEDIR}/eval_onescript.sh" $testfile $num "yes"
  310. else
  311.     eval_onescript.sh $testfile $num "yes"
  312. fi
  313. ECHO "  Run test #$num (y/n) [y]? "
  314. read inp2
  315. if [ "x$inp2" = "xn" ]; then
  316.     dothisone=no
  317. fi
  318.     fi
  319.   
  320.     if [ "x$dothisone" = "xyes" ]; then
  321.         if [ $SH_DEBUG = 1 ] ; then
  322.     sh -x "${SNMP_BASEDIR}/eval_onescript.sh" $testfile $num "no"
  323. else
  324.     eval_onescript.sh $testfile $num "no"
  325. fi
  326. if [ $? = 0 ]; then
  327.     success_count=`expr $success_count + 1`
  328. else
  329.     failed_count=`expr $failed_count + 1`
  330. fi
  331.     fi
  332.     num=`expr $num + 1`
  333.     cntr=`expr $cntr + 1`
  334. done
  335. echo Summary: $success_count / `expr $failed_count + $success_count` succeeded.
  336. exit $failed_count