#!/bin/sh

. ../support/simple_eval_tools.sh

HEADER AgentX trap sending support

SKIPIFNOT USING_AGENTX_MASTER_MODULE
SKIPIFNOT USING_AGENTX_SUBAGENT_MODULE
SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
SKIPIFNOT NETSNMP_SECMOD_USM

#
# Begin test
#

# start the trap demon
CONFIGTRAPD authcommunity log public
STARTTRAPD

# standard V3 configuration for initial user
. ./Sv3config
# configure the trap receiver.
CONFIGAGENT trapsink ${SNMP_TRANSPORT_SPEC}:${SNMP_TEST_DEST}${SNMP_SNMPTRAPD_PORT} public

# Start the agent without initializing the example mib.
if [ "x$SNMP_TRANSPORT_SPEC" = "xunix" ];then
ORIG_AGENT_FLAGS="$AGENT_FLAGS -x $SNMP_TMPDIR/agentx_socket"
else
ORIG_AGENT_FLAGS="$AGENT_FLAGS -x tcp:${SNMP_TEST_DEST}${SNMP_AGENTX_PORT}"
fi
AGENT_FLAGS="$ORIG_AGENT_FLAGS -I -example"
STARTAGENT

# test to see that the current agent doesn't support the example mib
CAPTURE "snmpget -On -t 3 $SNMP_FLAGS $AUTHTESTARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT .1.3.6.1.4.1.2021.254.1.0"

CHECK "No Such Object"

if test "$snmp_last_test_result" = 1; then
  # test the AgentX subagent by first running it...

  SNMP_SNMPD_PID_FILE_ORIG=$SNMP_SNMPD_PID_FILE
  SNMP_SNMPD_LOG_FILE_ORIG=$SNMP_SNMPD_LOG_FILE
  SNMP_SNMPD_PID_FILE=$SNMP_SNMPD_PID_FILE.num2
  SNMP_SNMPD_LOG_FILE=$SNMP_SNMPD_LOG_FILE.num2
  AGENT_FLAGS="$ORIG_AGENT_FLAGS -X -I example -Dadd"
  SNMP_CONFIG_FILE="$SNMP_TMPDIR/bogus.conf"

  STARTAGENT

  # test to see that the agent now supports the example mib
  CAPTURE "snmpget -On $SNMP_FLAGS -t 5 $AUTHTESTARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT .1.3.6.1.4.1.2021.254.1.0"

  CHECK "life the universe and everything"

  if test "$snmp_last_test_result" = 1; then

    # test to see that the agent now sends a trap from the exmaple mib
    CAPTURE "snmpset -On -r 0 -t 3 $SNMP_FLAGS $AUTHTESTARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT .1.3.6.1.4.1.2021.254.8.0 i 1"
    DELAY
    CHECKTRAPD "life the universe and everything"

  fi

  # stop the subagent
  STOPAGENT

  SNMP_SNMPD_PID_FILE=$SNMP_SNMPD_PID_FILE_ORIG
  SNMP_SNMPD_LOG_FILE=$SNMP_SNMPD_LOG_FILE_ORIG
fi

# stop the master agent
STOPAGENT

# stop the trap demon
STOPTRAPD

# all done (whew)
FINISHED
