#!/bin/sh

. ../support/simple_eval_tools.sh

HEADER Proxy illegal SET handling support

SKIPIFNOT USING_UCD_SNMP_PROXY_MODULE
SKIPIFNOT USING_MIBII_SYSTEM_MIB_MODULE
SKIPIF    NETSNMP_DISABLE_SNMPV2C
SKIPIF    NETSNMP_DISABLE_SET_SUPPORT

# XXX: ucd-snmp/proxy doesn't properly support TCP -- remove this once it does
[ "x$SNMP_TRANSPORT_SPEC" = "xtcp" ] && SKIP Test does not support TCP

#
# Begin test
#

# standard V3 configuration for initial user
. ./Sv3config
# config the proxy
CONFIGAGENT proxy -t 2 -r 1 -v 2c -c testcommunity $SNMP_TRANSPORT_SPEC:${SNMP_TEST_DEST}${SNMP_AGENTX_PORT} .1.3.6.1.2.1.1

# Start the agent without initializing the system mib.
ORIG_AGENT_FLAGS="$AGENT_FLAGS"
AGENT_FLAGS="$ORIG_AGENT_FLAGS -I -system_mib,winExtDLL -Dproxy"
STARTAGENT

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

#CHECK ".1.3.6.1.2.1.1.3.0 = No Such Object"

#if test "$snmp_last_test_result" = 1; then
  # test the proxy 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
  SNMP_CONFIG_FILE="$SNMP_TMPDIR/proxy.conf"
  echo "rwcommunity testcommunity" >> $SNMP_CONFIG_FILE
  if [ "$SNMP_TRANSPORT_SPEC" = "udp6" -o "$SNMP_TRANSPORT_SPEC" = "tcp6" ];then
    echo "rwcommunity6 testcommunity" >> $SNMP_CONFIG_FILE
  fi
#  echo "syscontact testcontact" >> $SNMP_CONFIG_FILE
  AGENT_FLAGS="$ORIG_AGENT_FLAGS -Dmib_init"
  ORIG_SNMP_SNMPD_PORT=$SNMP_SNMPD_PORT
  SNMP_SNMPD_PORT="${SNMP_AGENTX_PORT}"
  STARTAGENT
  SNMP_SNMPD_PORT=$ORIG_SNMP_SNMPD_PORT

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

  
  # we don't know the real value, unfortunately, so we test for what
  # we should *not* get back.
  CHECKCOUNT 0 ".1.3.6.1.2.1.1.4.0 = No Such Object"

  if test "$snmp_last_test_result" = 0; then

    # test to see that the agent now supports the system mib
    CAPTURE "snmpset -On -Ir $SNMP_FLAGS -t 5 $AUTHTESTARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT .1.3.6.1.2.1.1.4.0 i 42"

    # 5.0.x snmpset shows error on single line
    #CHECK ".1.3.6.1.2.1.1.4.0 = Wrong Type"
    # 5.1.x snmpset shows error on multiple lines
    CHECK "Reason: wrongType"
    CHECK "Failed object: .1.3.6.1.2.1.1.4.0"

  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

# all done (whew)
FINISHED
