1*** Settings ***
2Documentation  This testing requires special setup where SNMP trapd is
3...            configured and installed. For download, installation and
4...            configuration refer http://www.net-snmp.org/.
5
6
7Resource      ../../lib/snmp/resource.robot
8Resource      ../../lib/snmp/redfish_snmp_utils.robot
9Resource      ../../lib/bmc_redfish_resource.robot
10Resource      ../../lib/openbmc_ffdc.robot
11Resource      ../../lib/logging_utils.robot
12
13
14Test Teardown  FFDC On Test Case Fail
15Suite Setup    Suite Setup Execution
16
17
18*** Test Cases ***
19
20Configure SNMP Manager On BMC And Verify
21    [Documentation]  Configure SNMP manager on BMC via Redfish and verify.
22    [Tags]  Configure_SNMP_Manager_On_BMC_And_Verify
23    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
24
25    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}  ${HTTP_CREATED}
26
27    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
28
29
30Configure SNMP Manager On BMC With Non Default Port And Verify
31    [Documentation]  Configure SNMP Manager On BMC And Verify.
32    [Tags]  Configure_SNMP_Manager_On_BMC_With_Non_Default_Port_And_Verify
33    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
34
35    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}  ${HTTP_CREATED}
36
37    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
38
39
40Configure SNMP Manager On BMC With Out Of Range Port And Verify
41    [Documentation]  Configure SNMP Manager On BMC with out-of range port and verify.
42    [Tags]  Configure_SNMP_Manager_On_BMC_With_Out_Of_Range_Port_And_Verify
43    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${out_of_range_port}
44
45    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${out_of_range_port}  ${HTTP_BAD_REQUEST}
46
47    ${status}=  Run Keyword And Return Status
48    ...  Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${out_of_range_port}
49
50    Should Be Equal As Strings  ${status}  False
51    ...  msg=BMC is allowing to configure out of range port.
52
53
54Generate Error On BMC And Verify SNMP Trap
55    [Documentation]  Generate error on BMC and verify trap and its fields.
56    [Tags]  Generate_Error_On_BMC_And_Verify_SNMP_Trap
57    [Template]  Create Error On BMC And Verify Trap
58
59    # event_log                 expected_error
60
61    # Generate internal failure error.
62    ${CMD_INTERNAL_FAILURE}     ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
63
64    # Generate timeout error.
65    ${CMD_FRU_CALLOUT}          ${SNMP_TRAP_BMC_CALLOUT_ERROR}
66
67    # Generate informational error.
68    ${CMD_INFORMATIONAL_ERROR}  ${SNMP_TRAP_BMC_INFORMATIONAL_ERROR}
69
70
71Configure SNMP Manager On BMC With Alpha Port And Verify
72    [Documentation]  Configure SNMP Manager On BMC with alpha port and verify.
73    [Tags]  Configure_SNMP_Manager_On_BMC_With_Alpha_Port_And_Verify
74    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${alpha_port}
75
76    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${alpha_port}  ${HTTP_BAD_REQUEST}
77
78    ${status}=  Run Keyword And Return Status
79    ...  Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${alpha_port}
80
81    Should Be Equal As Strings  ${status}  False
82    ...  msg=BMC is allowing to configure invalid port.
83
84
85Configure SNMP Manager On BMC With Empty Port And Verify
86    [Documentation]  Configure SNMP Manager On BMC with empty port and verify
87    ...  SNMP manager gets configured with default port.
88    [Tags]  Configure_SNMP_Manager_On_BMC_With_Empty_Port_And_Verify
89    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
90
91    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${empty_port}
92
93    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
94
95
96Configure Multiple SNMP Managers And Verify
97    [Documentation]  Configure multiple SNMP managers and verify.
98    [Tags]  Configure_Multiple_SNMP_Managers_And_Verify
99    [Teardown]  Run Keywords
100    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
101    ...  AND
102    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
103
104    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
105    Configure SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
106    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
107    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
108
109
110Generate Error On BMC And Verify SNMP Trap Is Sent To Non-Default Port
111    [Documentation]  Generate error on BMC and verify trap and its fields.
112    [Tags]  Generate_Error_On_BMC_And_Verify_SNMP_Trap_Is_Sent_To_Non-Default_Port
113    [Template]  Create Error On BMC And Verify Trap On Non-Default Port
114
115    # event_log                 expected_error
116
117    # Generate internal failure error.
118    ${CMD_INTERNAL_FAILURE}     ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
119
120    # Generate timeout error.
121    ${CMD_FRU_CALLOUT}          ${SNMP_TRAP_BMC_CALLOUT_ERROR}
122
123    # Generate informational error.
124    ${CMD_INFORMATIONAL_ERROR}  ${SNMP_TRAP_BMC_INFORMATIONAL_ERROR}
125
126
127Verify SNMP SysUpTime
128    [Documentation]  Verify SNMP SysUpTime.
129    [Tags]  Verify_SNMP_SysUpTime
130
131    Generate Error And Verify System Up Time
132
133
134Verify SNMP SysUpTime On BMC Reboot
135    [Documentation]  Verify SNMP SysUpTime on BMC reboot.
136    [Tags]  Verify_SNMP_SysUpTime_On_BMC_Reboot
137
138    # Reboot BMC to reset system uptime.
139    OBMC Reboot (off)
140
141    ${uptime}=  Generate Error And Verify System Up Time
142
143    # Check if uptime is reset after reboot.
144    Should Be True  ${uptime} <= 1  msg=SNMP SysUpTime is not reset on reboot
145
146
147Configure Multiple SNMP Managers With Non Default Port And Verify
148    [Documentation]  Configure multiple SNMP Managers with non-default port And Verify.
149    [Tags]  Configure_Multiple_SNMP_Managers_With_Non_Default_Port_And_Verify
150    [Teardown]  Run Keywords
151    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
152    ...  AND
153    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${NON_DEFAULT_PORT1}
154
155    # Configure multiple SNMP managers with non-default port.
156    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
157    Configure SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${NON_DEFAULT_PORT1}
158
159    # Verify if SNMP managers are configured.
160    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
161    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${NON_DEFAULT_PORT1}
162
163
164Configure Multiple SNMP Managers With Different Ports And Verify
165    [Documentation]  Configure multiple SNMP Managers with different ports And Verify.
166    [Tags]  Configure_Multiple_SNMP_Managers_With_Different_Ports_And_Verify
167    [Teardown]  Run Keywords
168    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
169    ...  AND
170    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${NON_DEFAULT_PORT1}
171    ...  AND
172    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR3_IP}  ${NON_DEFAULT_PORT2}
173
174    # Configure multiple SNMP managers with different ports.
175    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
176    Configure SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${NON_DEFAULT_PORT1}
177    Configure SNMP Manager Via Redfish  ${SNMP_MGR3_IP}  ${NON_DEFAULT_PORT2}
178
179    # Verify if SNMP managers are configured.
180    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
181    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${NON_DEFAULT_PORT1}
182    Verify SNMP Manager Configured On BMC  ${SNMP_MGR3_IP}  ${NON_DEFAULT_PORT2}
183
184
185Configure SNMP Manager With Out Of Range IP On BMC And Verify
186    [Documentation]  Configure SNMP Manager On BMC with out-of range IP and expect an error.
187    [Tags]  Configure_SNMP_Manager_With_Out_Of_Range_IP_On_BMC_And_Verify
188    [Teardown]  Delete SNMP Manager Via Redfish  ${out_of_range_ip}  ${SNMP_DEFAULT_PORT}
189
190    Configure SNMP Manager Via Redfish  ${out_of_range_ip}  ${SNMP_DEFAULT_PORT}  ${HTTP_BAD_REQUEST}
191
192    ${status}=  Run Keyword And Return Status
193    ...  Verify SNMP Manager Configured On BMC  ${out_of_range_ip}  ${SNMP_DEFAULT_PORT}
194
195    Should Be Equal As Strings  ${status}  False
196    ...  msg=BMC is allowing to configure out of range IP.
197
198
199Verify Persistency Of SNMP Manager And Trap On BMC Reboot
200    [Documentation]  Verify persistency of SNMP manager configuration on BMC
201    ...  and BMC is able to send trap after reboot.
202    [Tags]  Verify_Persistency_Of_SNMP_Manager_And_Trap_On_BMC_Reboot
203    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
204
205    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}  ${HTTP_CREATED}
206
207    # Reboot BMC and check persistency SNMP manager.
208    OBMC Reboot (off)
209
210    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
211
212    # Check if trap is generated and sent to SNMP manager after reboot.
213    Generate Error On BMC And Verify Trap
214    ...  ${CMD_INTERNAL_FAILURE}  ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
215
216
217Configure SNMP Manager With Less Octet IP And Verify
218    [Documentation]  Configure SNMP manager on BMC with less octet IP and expect an error.
219    [Tags]  Configure_SNMP_Manager_With_Less_Octet_IP_And_Verify
220    [Teardown]  Delete SNMP Manager Via Redfish  ${less_octet_ip}  ${SNMP_DEFAULT_PORT}
221
222    Configure SNMP Manager Via Redfish  ${less_octet_ip}  ${SNMP_DEFAULT_PORT}  ${HTTP_BAD_REQUEST}
223
224    ${status}=  Run Keyword And Return Status
225    ...  Verify SNMP Manager Configured On BMC  ${less_octet_ip}  ${SNMP_DEFAULT_PORT}
226
227    Should Be Equal As Strings  ${status}  False
228    ...  msg=BMC is allowing to configure less octet IP.
229
230
231Configure SNMP Manager On BMC With Negative Port And Verify
232    [Documentation]  Configure SNMP Manager On BMC with negative port and verify.
233    [Tags]  Configure_SNMP_Manager_On_BMC_With_Negative_Port_And_Verify
234
235    [Teardown]  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${negative_port}
236
237    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${negative_port}  ${HTTP_BAD_REQUEST}
238
239    ${status}=  Run Keyword And Return Status
240    ...  Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${negative_port}
241
242    Should Be Equal As Strings  ${status}  False
243    ...  msg=BMC is allowing to configure negative port.
244
245
246Configure Multiple SNMP Managers On BMC And Verify Persistency On BMC Reboot
247    [Documentation]  Configure multiple SNMP Managers on BMC and verify persistency on BMC reboot.
248    [Tags]  Configure_Multiple_SNMP_Managers_On_BMC_And_Verify_Persistency_On_BMC_Reboot
249    [Teardown]  Run Keywords
250    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
251    ...  AND
252    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
253
254    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
255    Configure SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
256
257    # Reboot BMC and check persistency SNMP manager.
258    OBMC Reboot (off)
259
260    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
261    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
262
263
264Configure Multiple SNMP Managers On BMC And Check Trap On BMC Reboot
265    [Documentation]  Configure multiple SNMP Managers on BMC and check trap on BMC reboot.
266    [Tags]  Configure_Multiple_SNMP_Managers_On_BMC_And_Check_Trap_On_BMC_Reboot
267    [Teardown]  Run Keywords
268    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
269    ...  AND
270    ...  Delete SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
271
272    Configure SNMP Manager Via Redfish  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
273    Configure SNMP Manager Via Redfish  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
274
275    # Reboot BMC and check persistency SNMP manager.
276    OBMC Reboot (off)
277
278    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
279    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
280
281    # Check if trap is generated and sent to SNMP managers after reboot.
282    Generate Error On BMC And Verify Trap
283    ...  ${CMD_INTERNAL_FAILURE}  ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
284
285
286*** Keywords ***
287
288Suite Setup Execution
289    [Documentation]  Do suite setup execution.
290
291    Redfish.Login
292
293    # Check for SNMP configurations.
294    Valid Value  SNMP_MGR1_IP
295    Valid Value  SNMP_DEFAULT_PORT
296
297
298Generate Error And Verify System Up Time
299    [Documentation]  Generate error and verify system up time.
300
301    # Get system uptime on BMC.
302    # Example output of uptime:
303    # (8055.79 15032.86)
304
305    ${cmd_output}   ${stderr}  ${rc}=  BMC Execute Command  cat /proc/uptime
306    @{times}=  Split String  ${cmd_output}
307
308    ${bmc_uptime_in_minutes}=  Evaluate  int(${times}[0])/60
309
310    ${trap}=  Create Error On BMC And Verify Trap
311
312    # Extract System up time from SNMP trap.
313    # Example - SNMP trap:
314    # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (252367) 0:42:03.67
315    # SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
316    # SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 54
317    # SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque: UInt64: 4622921648578756984
318    # SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
319    # SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING:
320
321    @{words}=  Split String  ${trap}[0]  =
322
323    ${timeticks}=  Fetch From Right  ${words}[1]  (
324    ${snmp_sysuptime}=  Fetch From Left  ${timeticks}  )
325
326    # SNMP SysUptime will be in milli seconds.
327    # Convert into minutes.
328    ${sysuptime_in_minutes}=  Evaluate  int(${snmp_sysuptime})/6000
329
330    Should Be Equal As Integers  ${bmc_uptime_in_minutes}  ${sysuptime_in_minutes}
331
332    [Return]  ${sysuptime_in_minutes}
333