blob: f6dc6a6f86cd80fa7b5f8094c1c0907bf2e823fe [file] [log] [blame]
#!/bin/sh
#
# RUNTESTS [-h]...
#
# RETURNS: Number of failed tests.
#
# CALLS: eval_oneprogram.sh [-h][-lk] <program>
#
#
#
# Suggested improvement(s):
# Run a given test against a running agent.
#
# Variables: (* = exported)
# *SNMP_BASEDIR: the source base directory for tests
# *SNMP_UPDIR: directory above where the test binaries live (-D option)
# *SNMP_PATH ## yes, PATH is already setup
# *SNMP_VERBOSE ## 0=silent, 1=warnings, 2=more
# Usage mess. (No, it works.)
#
usage() {
cat << BLIK
Usage: `basename $0` [-a] [-S SLEEPTIME] [-h] [-i] [-v] [-V] [-s] [-XM]
[-T TESTNUMS] [-D bindir] [-S seconds] [-P <udp|tcp|udp6|tcp6|unix>]
-a run all tests.
-T NUMS run particular tests (command separated list of numbers)
-i run interactively
-v be verbose
-V be very verbose
-S TIME TIME should be used as the timeout when waiting for a
response from the agent.
-A FLAGS Extra flags to pass to the agent.
-t FLAGS Extra flags to pass to the trapd.
-s Don't erase the runtime data directory for successful tests
-XM Don't set MIBDIRS environment unless absolutely necessary
-x Turn on SH output debugging for tests.
-P TRANS Specify on which transport domain to run the tests.Default is udp.
-p prefix Specify test case prefix. Options are [T|V]. Default is T
BLIK
exit 0
}
trap "exit 1;" 1 2 3 9 13 15
SNMP_BASEDIR=`dirname $0`
SNMP_PREFER_NEAR_MIBS=1 ## prefer MIB files found in source hierarchy
export SNMP_PREFER_NEAR_MIBS
SNMP_TEST_PREFIX=${SNMP_TEST_PREFIX:=T}
export SNMP_TEST_PREFIX
### Check for the configuration script.
##if [ ! -s "${SNMP_BASEDIR}/TESTCONF.sh" ] ; then
## echo "No TESTCONF.sh in \"$SNMP_BASEDIR\" ; exiting"
## exit 0
##fi
ORIGDIR=`pwd` ## this script may be invoked with relative path
SNMP_UPDIR=.. ## building from the source tree
interactive=no
SNMP_VERBOSE=${SNMP_VERBOSE:=0}
SNMP_SLEEP=${SNMP_SLEEP:=1} ## default seconds to sleep
SH_DEBUG=0
USE_TEST_NUMS=0
while [ -n "$1" ]; do
case "$1" in
-h)
usage
exit
;;
-i)
interactive="yes"
;;
-v)
SNMP_VERBOSE=1
;;
-V)
SNMP_VERBOSE=2
;;
-s)
SNMP_SAVE_TMPDIR="yes"
export SNMP_SAVE_TMPDIR
;;
-D)
shift
SNMP_UPDIR="$1"
;;
-p)
shift
SNMP_TEST_PREFIX="$1"
;;
-P)
shift
SNMP_TRANSPORT_SPEC="$1"
export SNMP_TRANSPORT_SPEC
if [ "x$SNMP_TRANSPORT_SPEC" = "xunix" ];then
SNMP_SNMPD_PORT="/var/tmp/unixsnmpd"
SNMP_SNMPTRAPD_PORT="/var/tmp/unixsnmptrapd"
SNMP_TEST_DEST=""
export SNMP_SNMPD_PORT
export SNMP_SNMPTRAPD_PORT
export SNMP_TEST_DEST
fi
;;
-T)
shift
test_nums=`echo $1 | sed 's/,/ /g'`
;;
-a)
test_nums="all"
;;
-A)
shift
AGENT_FLAGS="$1"
export AGENT_FLAGS
;;
-S)
shift
SNMP_SLEEP="$1"
;;
-t)
shift
TRAPD_FLAGS="$1"
export TRAPD_FLAGS
;;
-x)
SH_DEBUG=1
;;
-XM)
SNMP_PREFER_NEAR_MIBS=0
;;
-n)
USE_TEST_NUMS=1
;;
esac
shift
done
export SNMP_SLEEP
# Make sure MinGW / MSYS users have the pskill.exe program to stop the agent and
# snmptrapd
if [ "x$OSTYPE" = "xmsys" -a "x`which pskill.exe 2>/dev/null`" = "x" ]; then
echo "Could not find pskill.exe. Aborting tests."
echo "pskill.exe can be installed as follows:"
echo "- Download pskill.exe from http://technet.microsoft.com/en-us/sysinternals/default.aspx."
echo "- Copy pskill.exe to C:\\MinGW\\msys\\1.0\\bin."
exit 1
fi
# Find executables in source first, then build, then existing PATH.
## Add to PATH if a binary is found.
cd $SNMP_UPDIR
SNMP_UPDIR=`pwd`
bf=snmpget
if [ -x "$bf" ] ; then
PATH=$SNMP_UPDIR:$PATH
else
for dd in apps bin ; do
bf=$dd/snmpget
if [ -x "$bf" ] ; then
PATH=$SNMP_UPDIR/$dd:$PATH
break
fi
done
fi
for dd in agent bin sbin ; do
bf=$dd/snmpd
if [ -x "$bf" ] ; then
PATH=$SNMP_UPDIR/$dd:$PATH
break
fi
done
bf=include/net-snmp/net-snmp-config.h
if [ ! -s "$bf" ] ; then
echo "No \"$bf\" in $SNMP_UPDIR . Some tests will be skipped"
fi
unset bf
# Run from the test scripts directory.
cd $ORIGDIR ; cd ${SNMP_BASEDIR}
SNMP_BASEDIR=`pwd`
# Setup for the next test run.
rm -f core tests/core
PATH=${SNMP_BASEDIR}:$PATH
SNMP_PATH=yes
export PATH
export SNMP_BASEDIR
export SNMP_PATH
export SNMP_UPDIR
export SNMP_VERBOSE
WHICH=which
$WHICH $0 > /dev/null 2>&1
if [ $? -ne 0 ] ; then
WHICH=type
fi
for needed in snmpd snmpget snmpgetnext; do
$WHICH $needed > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo "No $needed found. Exiting"
exit 1
fi
done
#
# Distinguished expectations.
#
if [ $SNMP_VERBOSE -gt 0 ]; then
echo ${SNMP_UPDIR}/testing
echo path is $PATH
echo top of build is $SNMP_UPDIR
echo source testing is $SNMP_BASEDIR
$WHICH snmpusm
fi
#
# Source the testing configuration file
#
. TESTCONF.sh
# Hack: the above created a directory, now we have to nuke it and
# forget about it... All for the convenience of the test writer.
rm -fR $SNMP_TMPDIR
unset SNMP_TMPDIR
export SNMP_TMPDIR
if [ "x$SNMP_PREFER_NEAR_MIBS" = "x0" ]; then
# try the compiled MIBDIRS directory first.
# if MIB files are not found, fallback to the source base
snmptranslate -On -IR sysDescr > /dev/null 2>&1
if [ $? -ne 0 ] ; then
if [ "x$MIBDIRS" = "x" ]; then
MIBDIRS=${SNMP_BASEDIR}/../mibs
export MIBDIRS
fi
fi
snmptranslate -On -IR sysDescr > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo "Could not resolve sysDescr in $MIBDIRS. Exiting"
exit 1
fi
fi ## SNMP_PREFER_NEAR_MIBS
#
# Switch to the testing directory, for ease of the client test packages.
#
cd ./tests
#------------------------------------ -o-
# Globals.
#
PROGRAM=
ARGUMENTS="$*"
TMPFILE=$SNMP_TMPDIR/eval_suite.sh$$
testname=
success_count=0
failed_count=0
if [ "x$do_tests" = "x" ]; then
#
# List the tests in question
#
num=0
for testfile in $SNMP_TEST_PREFIX*; do
case $testfile in
# Skip backup files, and the like.
*~) ;;
*.bak) ;;
*.orig) ;;
*.rej) ;;
# Do the rest
*)
num=`expr $num + 1`
if [ "x$interactive" != "xyes" -a "x$test_nums" = "x" ]; then
eval_onescript.sh $testfile $num "yes"
fi
all_tests="$all_tests $num"
all_files="$all_files $testfile"
;;
esac
done
#
# TODO: allow user to interactively pick the list of tests to run.
#
if [ "x$interactive" != "xyes" ]; then
if [ "x$test_nums" = "x" ]; then
ECHO "Enter test numbers [all]: "
read inp
else
if [ "x$test_nums" = "xall" ]; then
inp=""
else
inp="$test_nums"
fi
fi
if [ "x$inp" = "x" ]; then
do_tests="$all_files"
else
a=1
set $all_files
while [ $a -le $num ]; do
if echo " $inp " | grep " $a " > /dev/null; then
do_tests="$do_tests $1"
if [ "x$test_nums" = "x" ] ; then
test_nums=$a
fi
fi
shift
a=`expr $a + 1`
done
fi
fi
#echo Starting: Running tests $do_tests
fi
#
# Run the tests
#
if [ "x$test_nums" = "xall" -o "x$test_nums" = "x" ] ; then
num=1
else
num="$test_nums"
fi
cntr=0
for testfile in $do_tests; do
dothisone="yes"
if [ $USE_TEST_NUMS = 1 ] ; then
num=`echo $testfile | sed -e 's/^T//;s/[a-zA-Z].*//;'`
else
id_x=0
for itest in $inp; do
if [ "$cntr" = "$id_x" ] ; then
num="$itest"
fi
id_x=`expr $id_x + 1`
done
fi
if [ "x$interactive" = "xyes" ]; then
if [ $SH_DEBUG = 1 ] ; then
sh -x "${SNMP_BASEDIR}/eval_onescript.sh" $testfile $num "yes"
else
eval_onescript.sh $testfile $num "yes"
fi
ECHO " Run test #$num (y/n) [y]? "
read inp2
if [ "x$inp2" = "xn" ]; then
dothisone=no
fi
fi
if [ "x$dothisone" = "xyes" ]; then
if [ $SH_DEBUG = 1 ] ; then
sh -x "${SNMP_BASEDIR}/eval_onescript.sh" $testfile $num "no"
else
eval_onescript.sh $testfile $num "no"
fi
if [ $? = 0 ]; then
success_count=`expr $success_count + 1`
else
failed_count=`expr $failed_count + 1`
fi
fi
num=`expr $num + 1`
cntr=`expr $cntr + 1`
done
echo Summary: $success_count / `expr $failed_count + $success_count` succeeded.
exit $failed_count