diff options
Diffstat (limited to 'testing/fulltests/support/simple_TESTCONF.sh')
-rw-r--r-- | testing/fulltests/support/simple_TESTCONF.sh | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/testing/fulltests/support/simple_TESTCONF.sh b/testing/fulltests/support/simple_TESTCONF.sh new file mode 100644 index 0000000..83c38c2 --- /dev/null +++ b/testing/fulltests/support/simple_TESTCONF.sh @@ -0,0 +1,260 @@ +#! /bin/sh -f + +# +# Variables: (* = exported) +# *SNMP_TMPDIR: place to put files used in testing. +# SNMP_TESTDIR: where the test scripts are kept. +# *SNMP_PERSISTENT_FILE: where to store the agent's persistent information +# (XXX: this should be specific to just the agent) + +# MinGW/MSYS only: translate an MSYS path back into a DOS path such that snmpd +# and the Net-SNMP applications can understand it. One of the features of MSYS +# is that if a POSIX-style path is passed as a command-line argument to an +# executable that MSYS translates that path to a DOS-style path before +# starting the executable. This is a key feature of MSYS that makes it +# possible to run shell scripts unmodified and at the same time to use +# executables that accept DOS-style paths. There is no support however for +# automatical translation of environment variables that contain paths. Hence +# this function that translates paths explicitly. +translate_path() { + if [ "$OSTYPE" = msys ]; then + local t=`set \ + | sed -n -e "s/^$1='\(.*\)'$/${SNMP_ENV_SEPARATOR}\1/p" \ + -e "s/^$1=\(.*\)$/${SNMP_ENV_SEPARATOR}\1/p" \ + | sed -e "s|${SNMP_ENV_SEPARATOR}/c/|${SNMP_ENV_SEPARATOR}c:/|g" \ + -e "s|${SNMP_ENV_SEPARATOR}/tmp/|${SNMP_ENV_SEPARATOR}c:/windows/temp/|g" \ + | sed -e "s/^${SNMP_ENV_SEPARATOR}//" \ + ` + eval "$1='$t'" + fi +} + +# +# Only allow ourselves to be eval'ed once +# +if [ "x$TESTCONF_SH_EVALED" != "xyes" ]; then + TESTCONF_SH_EVALED=yes + +# +# set cpu and memory limits to prevent major damage +# +# defaults: 1h CPU, 500MB VMEM +# +[ "x$SNMP_LIMIT_VMEM" = "x" ] && SNMP_LIMIT_VMEM=512000 +[ "x$SNMP_LIMIT_CPU" = "x" ] && SNMP_LIMIT_CPU=3600 +# ulimit will fail if existing limit is lower -- ignore because it's ok +ulimit -S -t $SNMP_LIMIT_CPU 2>/dev/null +# not all sh-alikes support "ulimit -v" -- play safe +[ "x$BASH_VERSION" != "x" ] && ulimit -S -v $SNMP_LIMIT_VMEM 2>/dev/null + +# +# Set up an NL suppressing echo command +# +case "`echo 'x\c'`" in + 'x\c') + ECHO() { echo -n $*; } + ;; + x) + ECHO() { echo $*\\c; } + ;; + *) + echo "I don't understand your echo command ..." + exit 1 + ;; +esac +# +# how verbose should we be (0 or 1) +# +if [ "x$SNMP_VERBOSE" = "x" ]; then + SNMP_VERBOSE=0 + export SNMP_VERBOSE +fi + +SNMP_ENV_SEPARATOR="`${builddir}/net-snmp-config --env-separator`" + +if [ "x$MIBDIRS" = "x" ]; then + if [ "x$SNMP_PREFER_NEAR_MIBS" = "x1" ]; then + MIBDIRS=${srcdir}/mibs + export MIBDIRS + fi +fi + +# Set up the path to the programs we want to use. +if [ "x$SNMP_PATH" = "x" ]; then + PATH=${builddir}/agent:${builddir}/apps:$PATH + export PATH + SNMP_PATH=yes + export SNMP_PATH +fi + +# make sure that we can fulfill all library dependencies +_ld_lib_path="${SNMP_UPDIR}/snmplib/.libs:${SNMP_UPDIR}/agent/.libs:${SNMP_UPDIR}/agent/helpers/.libs" +case `uname` in + CYGWIN*) + PATH="${_ld_lib_path}:$PATH" + export PATH + ;; + Darwin*) + if [ "x$DYLD_LIBRARY_PATH" != "x" ]; then + DYLD_LIBRARY_PATH="${_ld_lib_path}:${DYLD_LIBRARY_PATH}" + else + DYLD_LIBRARY_PATH="${_ld_lib_path}" + fi + export DYLD_LIBRARY_PATH + ;; + HP-UX*) + if [ "x$SHLIB_PATH" != "x" ]; then + SHLIB_PATH="${_ld_lib_path}:${SHLIB_PATH}" + else + SHLIB_PATH="${_ld_lib_path}" + fi + export SHLIB_PATH + ;; + *) + if [ "x$LD_LIBRARY_PATH" != "x" ]; then + LD_LIBRARY_PATH="${_ld_lib_path}:${LD_LIBRARY_PATH}" + else + LD_LIBRARY_PATH="${_ld_lib_path}" + fi + export LD_LIBRARY_PATH + ;; +esac + +# Set up temporary directory +if [ "x$SNMP_HEADERONLY" != "xyes" ]; then + if [ "x$SNMP_TMPDIR" = "x" ]; then + if [ "x$testnum" = "x" ] ; then + testnum=0 + fi + SNMP_TMPDIR="/tmp/snmp-test-$testnum-$$" + translate_path SNMP_TMPDIR + export SNMP_TMPDIR + if [ -d $SNMP_TMPDIR ]; then + echo "$0: ERROR: $SNMP_TMPDIR already existed." + exit 1; + fi + fi + if [ ! -d $SNMP_TMPDIR ]; then + mkdir -p $SNMP_TMPDIR + chmod 0700 $SNMP_TMPDIR + fi + if [ "x$SNMP_TMP_PERSISTENTDIR" = "x" ]; then + SNMP_TMP_PERSISTENTDIR=$SNMP_TMPDIR/persist + export SNMP_TMP_PERSISTENTDIR + fi + if [ ! -d $SNMP_TMP_PERSISTENTDIR ]; then + mkdir $SNMP_TMP_PERSISTENTDIR + chmod 0700 $SNMP_TMP_PERSISTENTDIR + fi +fi + +if [ "x$SNMP_SAVE_TMPDIR" = "x" ]; then + SNMP_SAVE_TMPDIR="no" + export SNMP_SAVE_TMPDIR +fi + +SNMP_IGNORE_WINDOWS_REGISTRY="true" +export SNMP_IGNORE_WINDOWS_REGISTRY +SNMP_PERLPROG="`${builddir}/net-snmp-config --perlprog`" +SNMP_TESTDIR="$SNMP_BASEDIR/tests" +SNMP_CONFIG_FILE="$SNMP_TMPDIR/snmpd.conf" +SNMPTRAPD_CONFIG_FILE="$SNMP_TMPDIR/snmptrapd.conf" +SNMPAPP_CONFIG_FILE="$SNMP_TMPDIR/snmp.conf" +AGENTX_CONFIG_FILE="$SNMP_TMPDIR/agentx.conf" +SNMP_SNMPTRAPD_LOG_FILE="$SNMP_TMPDIR/snmptrapd.log" +SNMP_SNMPTRAPD_PID_FILE="$SNMP_TMPDIR/snmptrapd.pid" +SNMP_SNMPD_PID_FILE="$SNMP_TMPDIR/snmpd.pid" +SNMP_SNMPD_LOG_FILE="$SNMP_TMPDIR/snmpd.log" +SNMP_AGENTX_PID_FILE="$SNMP_TMPDIR/agentx.pid" +SNMP_AGENTX_LOG_FILE="$SNMP_TMPDIR/agentx.log" +SNMPCONFPATH="${SNMP_TMPDIR}${SNMP_ENV_SEPARATOR}${SNMP_TMP_PERSISTENTDIR}" +translate_path SNMPCONFPATH +export SNMPCONFPATH +SNMP_PERSISTENT_DIR=$SNMP_TMP_PERSISTENTDIR +translate_path SNMP_PERSISTENT_DIR +export SNMP_PERSISTENT_DIR +#SNMP_PERSISTENT_FILE="$SNMP_TMP_PERSISTENTDIR/persistent-store.conf" +#export SNMP_PERSISTENT_FILE + +## Setup default flags and ports iff not done +if [ "x$SNMP_FLAGS" = "x" ]; then + SNMP_FLAGS="-d" +fi +if test -x /bin/netstat ; then + NETSTAT=/bin/netstat +elif test -x /usr/bin/netstat ; then + NETSTAT=/usr/bin/netstat +elif test -x /usr/sbin/netstat ; then + # e.g. Tru64 Unix + NETSTAT=/usr/sbin/netstat +elif test -x /usr/etc/netstat ; then + # e.g. IRIX + NETSTAT=/usr/etc/netstat +elif test -x /cygdrive/c/windows/system32/netstat ; then + # Cygwin + NETSTAT=/cygdrive/c/windows/system32/netstat +elif test -x /c/Windows/System32/netstat ; then + # MinGW + MSYS + NETSTAT=/c/Windows/System32/netstat +else + NETSTAT="" +fi + +if [ "x$OSTYPE" = "xmsys" ]; then + # Obtain the MSYS installation path from the !C: environment variable, + # remove surrounding single quotes and convert backslashes into forward + # slashes. + MSYS_PATH="$(set \ + | sed -n 's|^\!C:='"'"'\(.*\)'"'"'$|\1|p' | sed 's|\\|/|g')" + MSYS_SH="$MSYS_PATH/sh.exe" +fi + +PROBE_FOR_PORT() { + BASE_PORT=$1 + MAX_RETRIES=10 + if test -x "$NETSTAT" ; then + if test -z "$RANDOM"; then + RANDOM=2 + fi + while : + do + BASE_PORT=`expr $BASE_PORT + \( $RANDOM % 100 \)` + IN_USE=`$NETSTAT -a -n 2>/dev/null | grep "[\.:]$BASE_PORT "` + if [ $? -ne 0 ]; then + echo "$BASE_PORT" + break + fi + MAX_RETRIES=`expr $MAX_RETRIES - 1` + if [ $MAX_RETRIES -eq 0 ]; then + echo "ERROR: Could not find available port." >&2 + echo "NOPORT" + exit 255 + fi + done + fi +} + +if [ "x$SNMP_SNMPD_PORT" = "x" ]; then + SNMP_SNMPD_PORT=`PROBE_FOR_PORT 8765` +fi +if [ "x$SNMP_SNMPTRAPD_PORT" = "x" ]; then + SNMP_SNMPTRAPD_PORT=`PROBE_FOR_PORT 5678` +fi +if [ "x$SNMP_AGENTX_PORT" = "x" ]; then + SNMP_AGENTX_PORT=`PROBE_FOR_PORT 7676` +fi +if [ "x$SNMP_TRANSPORT_SPEC" = "x" ];then + SNMP_TRANSPORT_SPEC="udp" +fi +if [ "x$SNMP_TEST_DEST" = "x" -a $SNMP_TRANSPORT_SPEC != "unix" ];then + SNMP_TEST_DEST="127.0.0.1:" +fi +export SNMP_FLAGS SNMP_SNMPD_PORT SNMP_SNMPTRAPD_PORT + +# Make sure the agent doesn't parse any config file but what we give it. +# this is mainly to protect against a broken agent that doesn't +# properly handle combinations of -c and -C. (since I've broke it before). +#SNMPCONFPATH="$SNMP_TMPDIR/does-not-exist" +#export SNMPCONFPATH + +fi # Only allow ourselves to be eval'ed once |