1*** Settings ***
2Documentation  Utilities for SNMP testing.
3
4Resource  ../../lib/rest_client.robot
5Resource  ../../lib/utils.robot
6
7*** Keywords ***
8
9Get SNMP URI List
10    [Documentation]  Get all SNMP URIs and return them as list.
11
12    # Sample output:
13    #   "data": [
14    #     "/xyz/openbmc_project/network/snmp/manager/e9767624",
15    #     "/xyz/openbmc_project/network/snmp/manager/31f4ce8b"
16    #   ],
17
18    @{snmp_uri_list}=  Read Properties  ${SNMP_MANAGER_URI}
19
20    [Return]  @{snmp_uri_list}
21
22Configure SNMP Manager On BMC
23    [Documentation]  Configure SNMP manager on BMC.
24    [Arguments]  ${snmp_ip}  ${port}  ${expected_result}
25
26    # Description of argument(s):
27    # snmp_ip          SNMP manager IP.
28    # port             Network port where SNMP manager is listening.
29    # expected_result  Expected status of SNMP configuration.
30
31    @{snmp_parm_list}=  Create List  ${snmp_ip}  ${port}
32    ${data}=  Create Dictionary  data=@{snmp_parm_list}
33
34    ${resp}=  OpenBMC Post Request
35    ...  ${SNMP_MANAGER_URI}action/Client  data=${data}
36
37    Run Keyword If  '${expected_result}' == 'error'
38    ...      Should Be Equal As Strings
39    ...      ${resp.status_code}  ${HTTP_BAD_REQUEST}
40    ...      msg=Allowing the configuration of an invalid SNMP.
41    ...  ELSE
42    ...      Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
43    ...      msg=Not allowing the configuration of a valid SNMP.
44
45
46Get List Of SNMP Manager And Port Configured On BMC
47    [Documentation]  Get list of SNMP managers and return the list.
48
49    @{snmp_uri_list}=  Get SNMP URI List
50    @{ip_and_port_list}=  Create List
51
52    # Sample output of snmp_uri_list enumeration.
53    # {
54    #  "data": {
55    #    "/xyz/openbmc_project/network/snmp/manager/92ae7a66": {
56    #      "Address": "10.6.6.6",
57    #      "AddressFamily": "xyz.openbmc_project.Network.Client.IPProtocol.IPv4",
58    #      "Port": 186
59    #    },
60
61    FOR  ${snmp_uri}  IN   @{snmp_uri_list}
62      ${ip}=  Read Attribute  ${snmp_uri}  Address
63      ${port}=  Read Attribute  ${snmp_uri}  Port
64      Append To List  ${ip_and_port_list}  ${ip}  ${port}
65    END
66
67    [Return]  @{ip_and_port_list}
68
69
70Verify SNMP Manager
71    [Documentation]  Verify SNMP manager configured on BMC.
72    [Arguments]  ${snmp_ip}  ${port}
73
74    # Description of argument(s):
75    # snmp_ip  SNMP manager IP.
76    # port     Network port where SNMP manager is listening.
77
78    @{ip_and_port}=  Create List  ${snmp_ip}  ${port}
79
80    @{ip_and_port_list}=  Get List Of SNMP Manager And Port Configured On BMC
81
82    List Should Contain Sub List  ${ip_and_port_list}  ${ip_and_port}
83    ...  msg=Valid SNMP manager is not found on BMC.
84
85
86Get SNMP Manager Object
87    [Documentation]  Find the SNMP object for the given ip and port and return it.
88    # If no object can be located, return ${EMPTY}.
89    [Arguments]  ${ip}  ${port}
90
91    # Description of argument(s):
92    # ip             SNMP manager IP.
93    # port           Network port where SNMP manager is listening.
94
95    ${snmp_objs}=  Read Properties  ${SNMP_MANAGER_URI}enumerate
96    FOR  ${snmp_obj}  IN   @{snmp_objs}
97        ${obj}=  Set Variable  ${snmp_objs['${snmp_obj}']}
98        Run Keyword If
99        ...  '${obj['Address']}' == '${ip}' and '${obj['Port']}' == '${port}'
100        ...    Return From Keyword  ${snmp_obj}
101    END
102
103    Return From Keyword  ${EMPTY}
104
105
106Delete SNMP Manager And Object
107    [Documentation]  Delete SNMP manager.
108    [Arguments]  ${snmp_ip}  ${port}
109
110    # Description of argument(s):
111    # snmp_ip  SNMP manager IP.
112    # port     Network port where SNMP manager is listening.
113
114    ${snmp_obj}=  Get SNMP Manager Object  ${snmp_ip}  ${port}
115
116    # If the given IP and port is not configured, return.
117    # Otherwise, delete the IP and object.
118
119    Run Keyword And Return If  '${snmp_obj}' == '${EMPTY}'
120    ...  Pass Execution  SNMP manager to be deleted is not configured.
121
122    OpenBMC Delete Request  ${snmp_obj}
123
124    # Verify whether deleted SNMP is removed from BMC system.
125    ${status}=  Run Keyword And Return Status  Verify SNMP Manager
126    ...  ${snmp_ip}  ${port}
127    Should Be Equal  ${status}  ${False}  msg=SNMP manager is not deleted.
128
129
130Start SNMP Manager
131    [Documentation]  Start SNMP listener on the remote SNMP manager.
132
133    Open Connection And Log In  ${SNMP_MGR1_USERNAME}  ${SNMP_MGR1_PASSWORD}
134    ...  alias=snmp_server  host=${SNMP_MGR1_IP}
135
136    # The execution of the SNMP_TRAPD_CMD is necessary to cause SNMP to begin
137    # listening to SNMP messages.
138    SSHLibrary.write  ${SNMP_TRAPD_CMD} &
139