From: Anders Wallin <walli...@gmail.com>

Added 6 test case for sending traps from snmpd. The test cases includes
traps or informs, statically configured trapsess in snmpd and dynamically
configured traps using snmpset.

Signed-off-by: Anders Wallin <walli...@gmail.com>
[bvanassche: Fixed shellcheck warnings / introduced settmib() and setnmib()]
---
 testing/fulltests/default/Sv3usmtraps         | 162 ++++++++++++++++++
 .../default/T031snmpv3dynamicinform_simple    |  18 ++
 .../default/T031snmpv3dynamictrap_simple      |  18 ++
 .../fulltests/default/T031snmpv3inform_simple |  18 ++
 .../default/T031snmpv3staticinform_simple     |  18 ++
 .../default/T031snmpv3statictrap_simple       |  18 ++
 .../fulltests/default/T031snmpv3trap_simple   |  18 ++
 7 files changed, 270 insertions(+)
 create mode 100644 testing/fulltests/default/Sv3usmtraps
 create mode 100644 testing/fulltests/default/T031snmpv3dynamicinform_simple
 create mode 100644 testing/fulltests/default/T031snmpv3dynamictrap_simple
 create mode 100644 testing/fulltests/default/T031snmpv3inform_simple
 create mode 100644 testing/fulltests/default/T031snmpv3staticinform_simple
 create mode 100644 testing/fulltests/default/T031snmpv3statictrap_simple
 create mode 100644 testing/fulltests/default/T031snmpv3trap_simple

diff --git a/testing/fulltests/default/Sv3usmtraps 
b/testing/fulltests/default/Sv3usmtraps
new file mode 100644
index 000000000000..3f110c4acfe2
--- /dev/null
+++ b/testing/fulltests/default/Sv3usmtraps
@@ -0,0 +1,162 @@
+#!/bin/sh
+#
+# SNMPv3 dynamic trap config
+#
+# Input variables:
+#   NOTIFYTYPE     trap|inform
+#   TRAPSESS       yes|no
+#   DYNTRAP        yes|no
+#
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+
+## Defaults
+[ "x$NOTIFYTYPE" = "x" ] && NOTIFYTYPE="trap"
+[ "x$TRAPSESS"   = "x" ] && TRAPSESS="yes"
+[ "x$DYNTRAP"    = "x" ] && DYNTRAP="no"
+
+case "$NOTIFYTYPE" in
+    "trap")
+        notifytype=1
+        trapsess_arg="";;
+    "inform")
+        notifytype=2
+        trapsess_arg="-Ci";;
+    *)
+        echo "Error: NOTIFYTYPE = $NOTIFYTYPE is not supported"
+        return 1;;
+esac
+
+ipv4_2_hex() {
+    # remove the ':' at the end of the first argument
+    local host=${1%:}
+    local port=$2
+
+    printf "0x"
+    for i in $(echo "$host" | tr '.' ' '); do
+       printf "%02x" "$i"
+    done
+    printf "%04x\\n" "$port"
+}
+
+ipv6_2_hex() {
+    # remove the ':' at the end of the first argument
+    local host=${1%:}
+    local port=$2
+
+    printf "0x"
+    if echo "$host" | grep -q ::; then
+       no_of_colons=$(echo "$host" | tr -d -c ':' | awk '{ print length }')
+       case $no_of_colons in
+           7) host=$(echo "$host" | sed 's/::/:0:/') ;;
+           6) host=$(echo "$host" | sed 's/::/:0:0:/') ;;
+           5) host=$(echo "$host" | sed 's/::/:0:0:0:/') ;;
+           4) host=$(echo "$host" | sed 's/::/:0:0:0:0:/') ;;
+       esac
+    fi
+    for i in $(echo "$host" | tr ':' ' '); do
+       printf "%04x" "${i:-0}"
+    done
+    printf "%04x\\n" "$port"
+}
+
+settmib() {
+    CAPTURE "snmpset -t 3 -r 0 -d $TESTAUTHARGS 
$SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT SNMP-TARGET-MIB::$1 $2 $3"
+}
+
+setnmib() {
+    CAPTURE "snmpset -t 3 -r 0 -d $TESTAUTHARGS 
$SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT SNMP-NOTIFICATION-MIB::$1 
$2 $3"
+}
+
+dyntrap_config() {
+    if [ "$SNMP_TRANSPORT_SPEC" = "udp" ]; then
+       tdomain="SNMPv2-TM::snmpUDPDomain"
+       targetaddr=$(ipv4_2_hex "$SNMP_TEST_DEST" "$SNMP_SNMPTRAPD_PORT")
+    elif [ "$SNMP_TRANSPORT_SPEC" = "udp6" ]; then
+       tdomain="SNMPv2-SMI::mib-2.100.1.2"
+       targetaddr=$(ipv6_2_hex "$SNMP_TEST_DEST" "$SNMP_SNMPTRAPD_PORT")
+    else
+       tdomain="NA"
+       targetaddr="NA"
+    fi
+
+    obj="'dynamictrap'"
+    link=dynamictrap
+
+    settmib "snmpTargetParamsRowStatus.$obj"     = 5
+    settmib "snmpTargetParamsStorageType.$obj"   = 3 # nonVolatile
+    settmib "snmpTargetParamsMPModel.$obj"       = 3 # USM
+    settmib "snmpTargetParamsSecurityModel.$obj" = 3 # USM
+    settmib "snmpTargetParamsSecurityName.$obj"  = "$TESTAUTHUSER"
+    settmib "snmpTargetParamsSecurityLevel.$obj" = 2 # authNoPriv
+
+    # snmpNotify
+    setnmib "snmpNotifyRowStatus.$obj"   = 5
+    setnmib "snmpNotifyTag.$obj"         = "$link"
+    setnmib "snmpNotifyType.$obj"        = "$notifytype"
+    setnmib "snmpNotifyStorageType.$obj" = 3
+
+    # snmpTargetAddr
+    settmib "snmpTargetAddrRowStatus.$obj"   = 5
+    settmib "snmpTargetAddrTimeout.$obj"     = 1000
+    settmib "snmpTargetAddrRetryCount.$obj"  = 5
+    settmib "snmpTargetAddrTagList.$obj"     = "$link"
+    settmib "snmpTargetAddrParams.$obj"      = "$link"
+    settmib "snmpTargetAddrStorageType.$obj" = 3
+    settmib "snmpTargetAddrTDomain.$obj"     = "$tdomain"
+    settmib "snmpTargetAddrTAddress.$obj"    x "$targetaddr"
+
+    # enable the trap
+    settmib "snmpTargetAddrRowStatus.$obj" = 1
+    settmib "snmpTargetParamsRowStatus.$obj" = 1
+    setnmib "snmpNotifyRowStatus.$obj" = 1
+
+    if [ "$SNMP_VERBOSE" -gt 0 ]; then
+        for table in SNMP-TARGET-MIB::snmpTargetAddrTable   \
+                     SNMP-TARGET-MIB::snmpTargetParamsTable \
+                     SNMP-NOTIFICATION-MIB::snmpNotifyTable; do
+           CAPTURE "snmpwalk -v 3 -r 2 -t 10 $TESTAUTHARGS 
$SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT ${table}"
+        done
+    fi
+}
+
+
+## common SNMPv3 USM config
+CREATEUSERENGINEID=0x80001f88802b3d0e1111111111
+. ./Sv3usmconfigbase
+
+CONFIGTRAPD "[snmp]" persistentDir "$SNMP_TMP_PERSISTENTDIR"
+CONFIGTRAPD oldEngineID "$CREATEUSERENGINEID"
+CONFIGTRAPD "$CREATEAUTHUSER"
+CONFIGTRAPD authUser log $TESTAUTHUSER
+
+STARTTRAPD
+
+CONFIGAGENT "[snmp]" persistentdir "$SNMP_TMP_PERSISTENTDIR"
+CONFIGAGENT oldEngineID "$CREATEUSERENGINEID"
+CONFIGAGENT "$CREATEAUTHUSER"
+CONFIGAGENT rwuser "$TESTAUTHUSER" auth
+
+if [ "x$TRAPSESS" = "xyes" ]; then
+    CONFIGAGENT trapsess $trapsess_arg -e $CREATEUSERENGINEID $TESTAUTHARGS \
+               "${SNMP_TRANSPORT_SPEC}:${SNMP_TEST_DEST}${SNMP_SNMPTRAPD_PORT}"
+fi
+
+#AGENT_FLAGS="$AGENT_FLAGS -Dtrap -Dsend_notifications -DsnmpTargetAddrEntry 
-Dtarget_sessions -DsnmpNotifyTable_data"
+STARTAGENT
+
+[ "x$DYNTRAP" = "xyes" ] && dyntrap_config
+
+CAPTURE "snmpset -On -t 3 -r 0 -d $TESTAUTHARGS 
$SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT .1.3.6.1.4.1.2021.254.8.0 
i 1"
+
+STOPAGENT
+
+STOPTRAPD
+
+NO_OF_TRAPS=0
+[ "x$TRAPSESS" = "xyes" ] && NO_OF_TRAPS=$((NO_OF_TRAPS+1))
+[ "x$DYNTRAP"  = "xyes" ] && NO_OF_TRAPS=$((NO_OF_TRAPS+1))
+
+CHECKTRAPDCOUNT $NO_OF_TRAPS "life the universe and everything"
+
+FINISHED
diff --git a/testing/fulltests/default/T031snmpv3dynamicinform_simple 
b/testing/fulltests/default/T031snmpv3dynamicinform_simple
new file mode 100644
index 000000000000..dbff2e67c3fe
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3dynamicinform_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic informs are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE=inform
+TRAPSESS=no
+DYNTRAP=yes
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3dynamictrap_simple 
b/testing/fulltests/default/T031snmpv3dynamictrap_simple
new file mode 100644
index 000000000000..1991e53701fa
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3dynamictrap_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic traps are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE="trap"
+TRAPSESS="no"
+DYNTRAP="yes"
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3inform_simple 
b/testing/fulltests/default/T031snmpv3inform_simple
new file mode 100644
index 000000000000..4e0306372384
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3inform_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic and static informs are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE=inform
+TRAPSESS=yes
+DYNTRAP=yes
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3staticinform_simple 
b/testing/fulltests/default/T031snmpv3staticinform_simple
new file mode 100644
index 000000000000..58912d12f26f
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3staticinform_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 static informs are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE=inform
+TRAPSESS=yes
+DYNTRAP=no
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3statictrap_simple 
b/testing/fulltests/default/T031snmpv3statictrap_simple
new file mode 100644
index 000000000000..e8dcb7bdd9f6
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3statictrap_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 static traps are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE="trap"
+TRAPSESS="yes"
+DYNTRAP="no"
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3trap_simple 
b/testing/fulltests/default/T031snmpv3trap_simple
new file mode 100644
index 000000000000..c1bfd718f0e5
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3trap_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic and static traps are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE="trap"
+TRAPSESS="yes"
+DYNTRAP="yes"
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
-- 
2.17.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to