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} &