Support to generate error, collect SNMP trap and verify SNMP trap
Changes:
Added to keyword to generate error and collect trap.
Added keyword to verify trap contents.
Added test cases to configure SNMP manager with different ports.
Signed-off-by: Prashanth Katti <prkatti1@in.ibm.com>
Change-Id: I3286835f26d7a3a693e6b557250c8181277d226b
diff --git a/lib/snmp/redfish_snmp_utils.robot b/lib/snmp/redfish_snmp_utils.robot
index 66ffad7..8f43918 100644
--- a/lib/snmp/redfish_snmp_utils.robot
+++ b/lib/snmp/redfish_snmp_utils.robot
@@ -164,3 +164,71 @@
... Verify SNMP Manager Configured On BMC ${snmp_mgr_ip} ${snmp_port}
Should Be Equal ${status} ${False} msg=SNMP manager is not deleted in the backend.
+
+
+Create Error On BMC And Verify Trap
+ [Documentation] Generate error on BMC and verify if trap is sent.
+ [Arguments] ${event_log}=${CMD_INTERNAL_FAILURE} ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
+
+ # Description of argument(s):
+ # event_log Event logs to be created.
+ # expected_error Expected error on SNMP.
+
+ Configure SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${SNMP_DEFAULT_PORT} ${HTTP_CREATED}
+
+ Start SNMP Manager
+
+ # Generate error log.
+ BMC Execute Command ${event_log}
+
+ SSHLibrary.Switch Connection snmp_server
+ ${SNMP_LISTEN_OUT}= Read delay=1s
+
+ Delete SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${SNMP_DEFAULT_PORT}
+
+ # Stop SNMP manager process.
+ SSHLibrary.Execute Command sudo killall snmptrapd
+
+ # Sample SNMP trap:
+ # 2021-06-16 07:05:29 xx.xx.xx.xx [UDP: [xx.xx.xx.xx]:58154->[xx.xx.xx.xx]:xxx]:
+ # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2100473) 5:50:04.73
+ # SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
+ # SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 369 SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque:
+ # UInt64: 1397718405502468474 SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
+ # SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "xxx.xx.xx Failure"
+
+ ${lines}= Split To Lines ${SNMP_LISTEN_OUT}
+ ${trap_info}= Get From List ${lines} -1
+ ${snmp_trap}= Split String ${trap_info} \t
+
+ Verify SNMP Trap ${snmp_trap} ${expected_error}
+
+ [Return] ${snmp_trap}
+
+
+Verify SNMP Trap
+ [Documentation] Verify SNMP trap.
+ [Arguments] ${snmp_trap} ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
+
+ # Description of argument(s):
+ # snmp_trap SNMP trap collected on SNMP manager.
+ # expected_error Expected error on SNMP.
+
+ # Verify all the mandatory fields of trap.
+ Should Contain ${snmp_trap}[0] DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks:
+ Should Be Equal ${snmp_trap}[1] SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
+ Should Match Regexp ${snmp_trap}[2] SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: \[0-9]*
+ Should Match Regexp ${snmp_trap}[3] SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque: UInt64: \[0-9]*
+ Should Match Regexp ${snmp_trap}[4] SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: \[0-9]
+ Should Be Equal ${snmp_trap}[5] SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "${expected_error}"
+
+
+Start SNMP Manager
+ [Documentation] Start SNMP listener on the remote SNMP manager.
+
+ Open Connection And Log In ${SNMP_MGR1_USERNAME} ${SNMP_MGR1_PASSWORD}
+ ... alias=snmp_server host=${SNMP_MGR1_IP}
+
+ # The execution of the SNMP_TRAPD_CMD is necessary to cause SNMP to begin
+ # listening to SNMP messages.
+ SSHLibrary.write ${SNMP_TRAPD_CMD} &
diff --git a/redfish/events/test_bmc_snmp_trap.robot b/redfish/events/test_bmc_snmp_trap.robot
index 6946b80..7587371 100644
--- a/redfish/events/test_bmc_snmp_trap.robot
+++ b/redfish/events/test_bmc_snmp_trap.robot
@@ -22,6 +22,23 @@
${snmp_version} SNMPv2c
${subscription_uri} /redfish/v1/EventService/Subscriptions
+${CMD_INTERNAL_FAILURE} busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging
+... xyz.openbmc_project.Logging.Create Create ssa{ss} xyz.openbmc_project.Common.Error.InternalFailure
+... xyz.openbmc_project.Logging.Entry.Level.Error 0
+
+${CMD_FRU_CALLOUT} busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging
+... xyz.openbmc_project.Logging.Create Create ssa{ss} xyz.openbmc_project.Common.Error.Timeout
+... xyz.openbmc_project.Logging.Entry.Level.Error 2 "TIMEOUT_IN_MSEC" "5"
+... "CALLOUT_INVENTORY_PATH" "/xyz/openbmc_project/inventory/system/chassis/motherboard"
+
+${CMD_INFORMATIONAL_ERROR} busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging
+... xyz.openbmc_project.Logging.Create Create ssa{ss} xyz.openbmc_project.Common.Error.TestError2
+... xyz.openbmc_project.Logging.Entry.Level.Informational 0
+
+${SNMP_TRAP_BMC_INTERNAL_FAILURE} xyz.openbmc_project.Common.Error.InternalFailure
+${SNMP_TRAP_BMC_CALLOUT_ERROR} xyz.openbmc_project.Common.Error.Timeout
+${SNMP_TRAP_BMC_INFORMATIONAL_ERROR} xyz.openbmc_project.Common.Error.TestError2
+
*** Test Cases ***
@@ -35,6 +52,47 @@
Verify SNMP Manager Configured On BMC ${SNMP_MGR1_IP} ${SNMP_DEFAULT_PORT}
+Configure SNMP Manager On BMC With Non-default Port And Verify
+ [Documentation] Configure SNMP Manager On BMC And Verify.
+ [Tags] Configure_SNMP_Manager_On_BMC_With_Non_Default_Port_And_Verify
+ [Teardown] Delete SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${NON_DEFAULT_PORT1}
+
+ Configure SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${NON_DEFAULT_PORT1} ${HTTP_CREATED}
+
+ Verify SNMP Manager Configured On BMC ${SNMP_MGR1_IP} ${NON_DEFAULT_PORT1}
+
+
+Configure SNMP Manager On BMC With Out Of Range Port And Verify
+ [Documentation] Configure SNMP Manager On BMC with out-of range port and verify.
+ [Tags] Configure_SNMP_Manager_On_BMC_With_Out_Of_Range_Port_And_Verify
+ [Teardown] Delete SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${out_of_range_port}
+
+ Configure SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${out_of_range_port} ${HTTP_BAD_REQUEST}
+
+ ${status}= Run Keyword And Return Status
+ ... Verify SNMP Manager Configured On BMC ${SNMP_MGR1_IP} ${out_of_range_port}
+
+ Should Be Equal As Strings ${status} False
+ ... msg=BMC is allowing to configure out of range port.
+
+
+Generate Error On BMC And Verify SNMP Trap
+ [Documentation] Generate error on BMC and verify trap and its fields.
+ [Tags] Generate_Error_On_BMC_And_Verify_SNMP_Trap
+ [Template] Create Error On BMC And Verify Trap
+
+ # event_log expected_error
+
+ # Generate internal failure error.
+ ${CMD_INTERNAL_FAILURE} ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
+
+ # Generate timeout error.
+ ${CMD_FRU_CALLOUT} ${SNMP_TRAP_BMC_CALLOUT_ERROR}
+
+ # Generate informational error.
+ ${CMD_INFORMATIONAL_ERROR} ${SNMP_TRAP_BMC_INFORMATIONAL_ERROR}
+
+
*** Keywords ***
Suite Setup Execution