blob: e8cca2b6db6a5b1e542b3b182781436d315149d5 [file] [log] [blame]
#!/bin/sh
#
# RUNTESTS [-h]...
#
# RETURNS: Number of failed tests.
#
# CALLS: eval_oneprogram.sh [-h][-lk] <program>
#
# SOURCES: TESTCONF.sh
#
#
USAGE_LONG='
#
# HOW TO ENTER A NEW TEST
#
# Copy the template file (T2.sh) XXX to the tests directory, and have
# the file begin with a 'T'. All files in the tests directory
# begining with a 'T' are assumed to be a test. See the file for
# further instructions
#
# HOW TESTS ARE RUN AND EVALUATED
#
# ...
#
'
#
# Suggested improvement(s):
# Run a given test against a running agent.
# Display errors
# interactively pick tests to run.
# options arguments to pick tests to run.
#
#
# 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="Usage: `basename $0` [-h] [-i] [-v] [-V] [-s] [-T TESTNUMS] [-D bindir] [-S seconds]"
usage() {
echo;
echo $USAGE;
#cat <<BLIK | sed 's/^#//' | sed '1d' | $PAGER
#$USAGE_LONG
#BLIK
exit 0
}
trap "exit 1;" 1 2 3 9 13 15 17
SNMP_BASEDIR=`dirname $0`
### 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=0
SNMP_SLEEP=1 ## default seconds to sleep
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"
;;
-T)
shift
test_nums="$1"
;;
-a)
test_nums="all"
;;
-A)
shift
AGENT_FLAGS="$1"
export AGENT_FLAGS
;;
-S)
shift
SNMP_SLEEP="$1"
;;
esac
shift
done
export SNMP_SLEEP
# 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 [ -f "$bf" ] ; then
PATH=$SNMP_UPDIR:$PATH
else
bf=apps/snmpget
if [ -f "$bf" ] ; then
PATH=$SNMP_UPDIR/apps:$PATH
fi
fi
bf=agent/snmpd
if [ -f "$bf" ] ; then
PATH=$SNMP_UPDIR/agent:$PATH
fi
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.
rmdir $SNMP_TMPDIR
unset SNMP_TMPDIR
export SNMP_TMPDIR
#
# 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 T*; 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"
fi
shift
a=`expr $a + 1`
done
fi
fi
#echo Starting: Running tests $do_tests
fi
#
# Run the tests
#
if [ "x$test_nums" = "xall" ]; then
num=1
else
num="$test_nums"
fi
for testfile in $do_tests; do
dothisone="yes";
if [ "x$interactive" = "xyes" ]; then
eval_onescript.sh $testfile $num "yes"
ECHO " Run test #$num (y/n) [y]? "
read inp
if [ "x$inp" = "xn" ]; then
dothisone=no
fi
fi
if [ "x$dothisone" = "xyes" ]; then
eval_onescript.sh $testfile $num "no"
if [ $? = 0 ]; then
success_count=`expr $success_count + 1`
else
failed_count=`expr $failed_count + 1`
fi
fi
num=`expr $num + 1`
done
echo Summary: $success_count / `expr $failed_count + $success_count` succeeded.
exit $failed_count