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

SNMP编程

开发平台:

Unix_Linux

  1. #
  2. # eval_tools.sh
  3. #
  4. # Output functions for script tests.  Source this from other test scripts
  5. # to establish a standardized repertory of test functions.
  6. #
  7. #
  8. # Except where noted, all functions return:
  9. # 0 On success, (Bourne Shell's ``true'')
  10. # non-0 Otherwise.
  11. #
  12. # Input arguments to each function are documented with each function.
  13. #
  14. #
  15. # XXX  Suggestions:
  16. # DEBUG ON|OFF
  17. # dump CAPTURE output to stdout as well as to junkoutputfile.
  18. #
  19. #
  20. # Only allow ourselves to be eval'ed once
  21. #
  22. if [ "x$EVAL_TOOLS_SH_EVALED" != "xyes" ]; then
  23.     EVAL_TOOLS_SH_EVALED=yes
  24.     . TESTCONF.sh
  25. #
  26. # Variables used in global environment of calling script.
  27. #
  28. failcount=0
  29. junkoutputfile="$SNMP_TMPDIR/output-`basename $0`$$"
  30. seperator="-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
  31. if [ -z "$OK_TO_SAVE_RESULT" ] ; then
  32. OK_TO_SAVE_RESULT=1
  33. export OK_TO_SAVE_RESULT
  34. fi
  35. #
  36. # HEADER: returns a single line when SNMP_HEADERONLY mode and exits.
  37. #
  38. HEADER() {
  39.     if [ "x$SNMP_HEADERONLY" != "x" ]; then
  40.         echo test $*
  41. exit 0;
  42.     else
  43. ECHO "testing $*...  "
  44. headerStr="testing $*"
  45.     fi
  46. }
  47. #------------------------------------ -o-
  48. #
  49. OUTPUT() { # <any_arguments>
  50. cat <<GRONK
  51. $*
  52. GRONK
  53. }
  54. CAN_USLEEP() {
  55.    if [ "$SNMP_CAN_USLEEP" = 0 -o "$SNMP_CAN_USLEEP" = 0 ] ; then
  56.      return $SNMP_CAN_USLEEP
  57.    fi
  58.    sleep .1 > /dev/null 2>&1
  59.    if [ $? = 0 ] ; then
  60.      SNMP_CAN_USLEEP=1
  61.    else
  62.      SNMP_CAN_USLEEP=0
  63.    fi
  64.    export SNMP_CAN_USLEEP
  65. }
  66. #------------------------------------ -o-
  67. #
  68. SUCCESS() { # <any_arguments>
  69. [ "$failcount" -ne 0 ] && return
  70. cat <<GROINK
  71. SUCCESS: $*
  72. GROINK
  73. }
  74. #------------------------------------ -o-
  75. #
  76. FAILED() { # <return_value>, <any_arguments>
  77. [ "$1" -eq 0 ] && return
  78. shift
  79. failcount=`expr $failcount + 1`
  80. cat <<GRONIK
  81. FAILED: $*
  82. GRONIK
  83. }
  84. #------------------------------------ -o-
  85. #
  86. SKIPIFNOT() {
  87. grep "^#define $1 " $SNMP_UPDIR/include/net-snmp/net-snmp-config.h $SNMP_UPDIR/include/net-snmp/agent/mib_module_config.h $SNMP_UPDIR/include/net-snmp/agent/agent_module_config.h > /dev/null
  88. if [ $? != 0 ]; then
  89.     REMOVETESTDATA
  90.     echo "SKIPPED"
  91.     exit 0;
  92. fi
  93. }
  94. SKIPIF() {
  95. grep "^#define $1 " $SNMP_UPDIR/include/net-snmp/net-snmp-config.h $SNMP_UPDIR/include/net-snmp/agent/mib_module_config.h $SNMP_UPDIR/include/net-snmp/agent/agent_module_config.h > /dev/null
  96. if [ $? = 0 ]; then
  97.     REMOVETESTDATA
  98.     echo "SKIPPED"
  99.     exit 0;
  100. fi
  101. }
  102. #------------------------------------ -o-
  103. #
  104. VERIFY() { # <path_to_file(s)>
  105. local missingfiles=
  106. for f in $*; do
  107. [ -e "$f" ] && continue
  108. echo "FAILED: Cannot find file "$f"."
  109. missingfiles=true
  110. done
  111. [ "$missingfiles" = true ] && exit 1000
  112. }
  113. #------------------------------------ -o-
  114. #
  115. STARTTEST() {
  116. [ ! -e "$junkoutputfile" ] && {
  117. touch $junkoutputfile
  118. return
  119. }
  120. echo "FAILED: Output file already exists: "$junkoutputfile"."
  121. exit 1000
  122. }
  123. #------------------------------------ -o-
  124. #
  125. STOPTEST() {
  126. rm -f "$junkoutputfile"
  127. }
  128. #------------------------------------ -o-
  129. #
  130. REMOVETESTDATA() {
  131. # ECHO "removing $SNMP_TMPDIR  "
  132. rm -rf $SNMP_TMPDIR
  133. }
  134. #------------------------------------ -o-
  135. # Captures output from command, and returns the command's exit code.
  136. CAPTURE() { # <command_with_arguments_to_execute>
  137.     echo $* >> $SNMP_TMPDIR/invoked
  138. if [ $SNMP_VERBOSE -gt 0 ]; then
  139. cat <<KNORG
  140. EXECUTING: $*
  141. KNORG
  142. fi
  143. ( $* 2>&1 ) > $junkoutputfile 2>&1
  144. RC=$?
  145. if [ $SNMP_VERBOSE -gt 1 ]; then
  146. echo "Command Output: "
  147. echo "MIBDIR $MIBDIRS $MIBS"
  148. echo "$seperator"
  149. cat $junkoutputfile | sed 's/^/  /'
  150. echo "$seperator"
  151. fi
  152. return $RC
  153. }
  154. #------------------------------------ -o-
  155. # Delay to let processes settle
  156. DELAY() {
  157.     if [ "$SNMP_SLEEP" != "0" ] ; then
  158. sleep $SNMP_SLEEP
  159.     fi
  160. }
  161. SAVE_RESULTS() {
  162.    real_return_value=$return_value
  163. }
  164. #
  165. # Checks the output result against what we expect.
  166. #   Sets return_value to 0 or 1.
  167. #
  168. EXPECTRESULT() {
  169.   if [ $OK_TO_SAVE_RESULT -ne 0 ] ; then
  170.     if [ "$snmp_last_test_result" = "$1" ]; then
  171. return_value=0
  172.     else
  173. return_value=1
  174.     fi
  175.   fi
  176. }
  177. #------------------------------------ -o-
  178. # Returns: Count of matched lines.
  179. #
  180. CHECK() { # <pattern_to_match>
  181.     if [ $SNMP_VERBOSE -gt 0 ]; then
  182. echo -n "checking output for "$*"..."
  183.     fi
  184.     rval=`grep -c "$*" "$junkoutputfile" 2>/dev/null`
  185.     if [ $SNMP_VERBOSE -gt 0 ]; then
  186. echo "$rval matches found"
  187.     fi
  188.     snmp_last_test_result=$rval
  189.     EXPECTRESULT 1  # default
  190.     return $rval
  191. }
  192. CHECKFILE() {
  193.     file=$1
  194.     if [ "x$file" = "x" ] ; then
  195.         file=$junkoutputfile
  196.     fi
  197.     shift
  198.     myoldjunkoutputfile="$junkoutputfile"
  199.     junkoutputfile="$file"
  200.     CHECK $*
  201.     junkoutputfile="$myoldjunkoutputfile"
  202. }
  203. CHECKTRAPD() {
  204.     CHECKFILE $SNMP_SNMPTRAPD_LOG_FILE $@
  205. }
  206. CHECKAGENT() {
  207.     CHECKGAENT $SNMP_SNMPD_LOG_FILE $@
  208. }
  209. WAITFORAGENT() {
  210.     WAITFOR "$@" $SNMP_SNMPD_LOG_FILE
  211. }
  212. WAITFORTRAPD() {
  213.     WAITFOR "$@" $SNMP_SNMPTRAPD_LOG_FILE
  214. }
  215. WAITFOR() {
  216.   ## save the previous save state and test result
  217.     save_state=$OK_TO_SAVE_RESULT
  218.     save_test=$snmp_last_test_result
  219.     OK_TO_SAVE_RESULT=0
  220.     sleeptime=$SNMP_SLEEP
  221.     oldsleeptime=$SNMP_SLEEP
  222.     if [ "$1" != "" ] ; then
  223. CAN_USLEEP
  224. if [ $SNMP_CAN_USLEEP = 1 ] ; then
  225.   sleeptime=`expr $SNMP_SLEEP '*' 50`
  226.           SNMP_SLEEP=.1
  227. else 
  228.   sleeptime=`expr $SNMP_SLEEP '*' 5`
  229.   SNMP_SLEEP=1
  230. fi
  231.         while [ $sleeptime -gt 0 ] ; do
  232.   if [ "$2" = "" ] ; then
  233.             CHECK "$@"
  234.           else
  235.     CHECKFILE "$2" "$1"
  236.   fi
  237.           if [ "$snmp_last_test_result" != "" ] ; then
  238.               if [ "$snmp_last_test_result" -gt 0 ] ; then
  239.          break;
  240.               fi
  241.   fi
  242.           DELAY
  243.           sleeptime=`expr $sleeptime - 1`
  244.         done
  245.         SNMP_SLEEP=$oldsleeptime
  246.     else
  247.         if [ $SNMP_SLEEP -ne 0 ] ; then
  248.     sleep $SNMP_SLEEP
  249.         fi
  250.     fi
  251.   ## restore the previous save state and test result
  252.     OK_TO_SAVE_RESULT=$save_state
  253.     snmp_last_test_result=$save_test
  254. }    
  255. # WAITFORORDIE "grep string" ["file"]
  256. WAITFORORDIE() {
  257.     WAITFOR "$1" "$2"
  258.     if [ "$snmp_last_test_result" != 0 ] ; then
  259.         FINISHED
  260.     fi
  261.     ECHO "."
  262. }
  263. # CHECKFILE "grep string" ["file"]
  264. CHECKORDIE() {
  265.     CHECKFILE "$2" "$1"
  266.     if [ "$snmp_last_test_result" = 0 ] ; then
  267.         FINISHED
  268.     fi
  269.     ECHO "."
  270. }
  271. #------------------------------------ -o-
  272. # Returns: Count of matched lines.
  273. #
  274. CHECKEXACT() { # <pattern_to_match_exactly>
  275. rval=`grep -wc "$*" "$junkoutputfile" 2>/dev/null`
  276. snmp_last_test_result=$rval
  277. EXPECTRESULT 1  # default
  278. return $rval
  279. }
  280. CONFIGAGENT() {
  281.     if [ "x$SNMP_CONFIG_FILE" = "x" ]; then
  282. echo "$0: failed because var: SNMP_CONFIG_FILE wasn't set"
  283. exit 1;
  284.     fi
  285.     echo $* >> $SNMP_CONFIG_FILE
  286. }
  287. CONFIGTRAPD() {
  288.     if [ "x$SNMPTRAPD_CONFIG_FILE" = "x" ]; then
  289. echo "$0: failed because var: SNMPTRAPD_CONFIG_FILE wasn't set"
  290. exit 1;
  291.     fi
  292.     echo $* >> $SNMPTRAPD_CONFIG_FILE
  293. }
  294. #
  295. # common to STARTAGENT and STARTTRAPD
  296. # log command to "invoked" file
  297. # delay after command to allow for settle
  298. #
  299. STARTPROG() {
  300.     if [ $SNMP_VERBOSE -gt 1 ]; then
  301. echo "$CFG_FILE contains: "
  302. if [ -f $CFG_FILE ]; then
  303.     cat $CFG_FILE
  304. else
  305.     echo "[no config file]"
  306. fi
  307.     fi
  308.     if test -f $CFG_FILE; then
  309. COMMAND="$COMMAND -C -c $CFG_FILE"
  310.     fi
  311.     if [ $SNMP_VERBOSE -gt 0 ]; then
  312. echo "running: $COMMAND"
  313.     fi
  314.     if [ "x$PORT_SPEC" != "x" ]; then
  315.         COMMAND="$COMMAND $PORT_SPEC"
  316.     fi
  317.     echo $COMMAND >> $SNMP_TMPDIR/invoked
  318.     if [ "x$OSTYPE" = "xmsys" ]; then
  319.       ## $COMMAND > $LOG_FILE.stdout 2>&1 &
  320.       COMMAND="cmd.exe //c start //min $COMMAND"
  321.       start $COMMAND > $LOG_FILE.stdout 2>&1
  322.     else
  323.       $COMMAND > $LOG_FILE.stdout 2>&1
  324.     fi
  325. }
  326. #------------------------------------ -o-
  327. STARTAGENT() {
  328.     SNMPDSTARTED=1
  329.     COMMAND="snmpd $SNMP_FLAGS -r -U -p $SNMP_SNMPD_PID_FILE -Lf $SNMP_SNMPD_LOG_FILE $AGENT_FLAGS"
  330.     CFG_FILE=$SNMP_CONFIG_FILE
  331.     LOG_FILE=$SNMP_SNMPD_LOG_FILE
  332.     PORT_SPEC="$SNMP_SNMPD_PORT"
  333.     if [ "x$SNMP_TRANSPORT_SPEC" != "x" ]; then
  334.         PORT_SPEC="$SNMP_TRANSPORT_SPEC:$PORT_SPEC"
  335.     fi
  336.     STARTPROG
  337.     WAITFORAGENT "NET-SNMP version"
  338. }
  339. #------------------------------------ -o-
  340. STARTTRAPD() {
  341.     TRAPDSTARTED=1
  342.     COMMAND="snmptrapd -d -u $SNMP_SNMPTRAPD_PID_FILE -Lf $SNMP_SNMPTRAPD_LOG_FILE $TRAPD_FLAGS"
  343.     CFG_FILE=$SNMPTRAPD_CONFIG_FILE
  344.     LOG_FILE=$SNMP_SNMPTRAPD_LOG_FILE
  345.     PORT_SPEC="$SNMP_SNMPTRAPD_PORT"
  346.     if [ "x$SNMP_TRANSPORT_SPEC" != "x" ]; then
  347.         PORT_SPEC="$SNMP_TRANSPORT_SPEC:$PORT_SPEC"
  348.     fi
  349.     STARTPROG
  350.     WAITFORTRAPD "NET-SNMP version"
  351. }
  352. ## used by STOPAGENT and STOPTRAPD
  353. # delay before kill to allow previous action to finish
  354. #    this is especially important for interaction between
  355. #    master agent and sub agent.
  356. STOPPROG() {
  357.     if [ -f $1 ]; then
  358.         if [ "x$OSTYPE" = "xmsys" ]; then
  359.           COMMAND="kill.exe `cat $1`"
  360.         else
  361.           COMMAND="kill -TERM `cat $1`"
  362.         fi
  363. echo $COMMAND >> $SNMP_TMPDIR/invoked
  364. $COMMAND > /dev/null 2>&1
  365.     fi
  366. }
  367. #------------------------------------ -o-
  368. #
  369. STOPAGENT() {
  370.     SAVE_RESULTS
  371.     STOPPROG $SNMP_SNMPD_PID_FILE
  372.     if [ "x$OSTYPE" != "xmsys" ]; then
  373.         WAITFORAGENT "shutting down"
  374.     fi
  375.     if [ $SNMP_VERBOSE -gt 1 ]; then
  376. echo "Agent Output:"
  377. echo "$seperator [stdout]"
  378. cat $SNMP_SNMPD_LOG_FILE.stdout
  379. echo "$seperator [logfile]"
  380. cat $SNMP_SNMPD_LOG_FILE
  381. echo "$seperator"
  382.     fi
  383. }
  384. #------------------------------------ -o-
  385. #
  386. STOPTRAPD() {
  387.     SAVE_RESULTS
  388.     STOPPROG $SNMP_SNMPTRAPD_PID_FILE
  389.     if [ "x$OSTYPE" != "xmsys" ]; then
  390.         WAITFORTRAPD "Stopped"
  391.     fi
  392.     if [ $SNMP_VERBOSE -gt 1 ]; then
  393. echo "snmptrapd Output:"
  394. echo "$seperator [stdout]"
  395. cat $SNMP_SNMPTRAPD_LOG_FILE.stdout
  396. echo "$seperator [logfile]"
  397. cat $SNMP_SNMPTRAPD_LOG_FILE
  398. echo "$seperator"
  399.     fi
  400. }
  401. #------------------------------------ -o-
  402. #
  403. FINISHED() {
  404.     ## no more changes to test result.
  405.     OK_TO_SAVE_RESULT=0
  406.     if [ "$SNMPDSTARTED" = "1" ] ; then
  407.       STOPAGENT
  408.     fi
  409.     if [ "$TRAPDSTARTED" = "1" ] ; then
  410.       STOPTRAPD
  411.     fi
  412.     for pfile in $SNMP_TMPDIR/*pid* ; do
  413.         if [ "x$pfile" = "x$SNMP_TMPDIR/*pid*" ]; then
  414.             ECHO "(no pid file(s) found) "
  415.             break
  416.         fi
  417.         if [ ! -f $pfile ]; then
  418.             ECHO "('$pfile' disappeared) "
  419.             continue
  420.         fi
  421. pid=`cat $pfile`
  422. ps -e | egrep "^[  ]*$pid[  ]+" > /dev/null 2>&1
  423. if [ $? = 0 ] ; then
  424.     SNMP_SAVE_TMPDIR=yes
  425.             if [ "x$OSTYPE" = "xmsys" ]; then
  426.               COMMAND="kill.exe $pid"
  427.             else
  428.               COMMAND="kill -9 $pid"
  429.             fi
  430.     echo $COMMAND "($pfile)" >> $SNMP_TMPDIR/invoked
  431.     $COMMAND > /dev/null 2>&1
  432.     return_value=1
  433. fi
  434.     done
  435.     if [ "x$real_return_value" != "x0" ]; then
  436. if [ -s core ] ; then
  437.     # XX hope that only one prog cores !
  438.     cp core $SNMP_TMPDIR/core.$$
  439.     rm -f core
  440. fi
  441. echo "FAIL"
  442. echo "$headerStr...FAIL" >> $SNMP_TMPDIR/invoked
  443. exit $real_return_value
  444.     fi
  445.     echo "ok"
  446.     echo "$headerStr...ok" >> $SNMP_TMPDIR/invoked
  447.     if [ "x$SNMP_SAVE_TMPDIR" != "xyes" ]; then
  448. REMOVETESTDATA
  449.     fi
  450.     exit $real_return_value
  451. }
  452. #------------------------------------ -o-
  453. #
  454. VERBOSE_OUT() {
  455.     if [ $SNMP_VERBOSE > $1 ]; then
  456. shift
  457. echo "$*"
  458.     fi
  459. }
  460. fi # Only allow ourselves to be eval'ed once