1*** Settings ***
2
3Documentation   Test OpenBMC GUI "SNMP Alerts" sub-menu of "Settings".
4
5Resource        ../../lib/gui_resource.robot
6Resource        ../../../lib/snmp/resource.robot
7Resource        ../../../lib/snmp/redfish_snmp_utils.robot
8
9Suite Setup     Suite Setup Execution
10Suite Teardown  Close Browser
11
12
13*** Variables ***
14
15${xpath_snmp_alerts_sub_menu}                     //*[@data-test-id='nav-item-snmp-alerts']
16${xpath_snmp_alerts_heading}                      //h1[text()="SNMP alerts"]
17${xpath_select_all_snmp}                          //*[@data-test-id='snmpAlerts-checkbox-selectAll']
18${xpath_add_destination}                          //button[contains(text(),'Add destination')]
19${xpath_snmp_alert_destination_heading}           //h5[contains(text(),'Add SNMP alert destination')]
20${xpath_ip_address_input_button}                  //*[@data-test-id='snmpAlerts-input-ipAddress']
21${xpath_port_optional_input_button}               //*[@data-test-id='snmpAlerts-input-port']
22${xpath_snmp_add_destination_button}              //*[@data-test-id='snmpAlerts-button-ok']
23${xpath_cancel_button}                            //button[contains(text(),'Cancel')]
24${xpath_delete_button}                            //*[@data-test-id='snmpAlerts-button-deleteRow-undefined']
25${xpath_delete_destination}                       //button[contains(text(),'Delete destination')]
26
27${snmp_page_heading}                              SNMP alerts
28${invalid_port_error}                             Value must be between 0 – 65535
29${invalid_destination_error}                      Error in adding SNMP alert destination
30
31
32*** Test Cases ***
33
34Verify Navigation To SNMP Alerts Page
35    [Documentation]  Verify navigation to SNMP alerts page.
36    [Tags]  Verify_Navigation_To_SNMP_Alerts_Page
37
38    Page Should Contain Element  ${xpath_snmp_alerts_heading}
39
40
41Verify Existence Of All Input Boxes In SNMP Alerts Page
42    [Documentation]  Verify existence of all sections in SNMP alerts page.
43    [Tags]  Verify_Existence_Of_All_Input_Boxes_In_SNMP_Alerts_Page
44
45    Page Should Contain Checkbox  ${xpath_select_all_snmp}
46
47
48Verify Existence Of All Buttons In SNMP Alerts Page
49    [Documentation]  Verify existence of all buttons in SNMP alerts page.
50    [Tags]  Verify_Existence_Of_All_Buttons_In_SNMP_Alerts_Page
51
52    Page should Contain Button  ${xpath_add_destination}
53
54
55Verify Existence Of All Fields In Add Destination
56    [Documentation]  Verify existence of all buttons and fields in add destination page.
57    [Tags]  Verify_Existence_Of_All_Fields_In_Add_Destination
58    [Teardown]  Run Keywords  Click Button  ${xpath_cancel_button}  AND
59    ...  Wait Until Keyword Succeeds  10 sec  5 sec
60    ...  Refresh GUI And Verify Element Value  ${xpath_snmp_alerts_heading}  ${snmp_page_heading}
61
62    Click Element  ${xpath_add_destination}
63    Wait Until Page Contains Element  ${xpath_snmp_alert_destination_heading}
64    Page Should Contain Element  ${xpath_ip_address_input_button}
65    Page Should Contain Element  ${xpath_port_optional_input_button}
66    Page Should Contain Element  ${xpath_cancel_button}
67    Page Should Contain Element  ${xpath_snmp_add_destination_button}
68
69
70Configure SNMP Settings On BMC With Non Default Port Via GUI And Verify
71    [Documentation]  Configure SNMP settings on BMC with non default port via GUI and verify.
72    [Tags]  Configure_SNMP_Settings_On_BMC_With_Non_Default_Port_Via_GUI_And_Verify
73    [Teardown]  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
74
75    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
76
77    Wait Until Page Contains  ${SNMP_MGR1_IP}  timeout=45s
78
79    Redfish.Login
80    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${NON_DEFAULT_PORT1}
81    Redfish.Logout
82
83Configure SNMP Settings On BMC Via GUI And Verify
84    [Documentation]  Configure SNMP settings on BMC via GUI and verify.
85    [Tags]  Configure_SNMP_Settings_On_BMC_Via_GUI_And_Verify
86    [Teardown]  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
87
88    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
89
90    Wait Until Page Contains  ${SNMP_MGR1_IP}  timeout=45s
91
92    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
93
94
95Configure SNMP Settings On BMC With Empty Port Via GUI And Verify
96    [Documentation]  Configure SNMP settings on BMC with empty port via GUI and verify.
97    [Tags]  Configure_SNMP_Settings_On_BMC_With_Empty_Port_Via_GUI_And_Verify
98    [Teardown]  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
99
100    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${empty_port}
101
102    Wait Until Page Contains  ${SNMP_MGR1_IP}  timeout=45s
103
104    # SNMP Manager IP is set with default port number when no port number is provided.
105    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
106
107
108Configure Invalid SNMP Settings On BMC Via GUI And Verify
109
110    [Documentation]  Configure invalid SNMP settings on BMC via GUI and verify.
111    [Tags]  Configure_Invalid_SNMP_Settings_On_BMC_Via_GUI_And_Verify
112    [Template]  Configure SNMP Manager On BMC With Invalid Setting Via GUI And Verify
113
114    # snmp_manager_ip   snmp_manager_port        Expected status
115    ${SNMP_MGR1_IP}     ${out_of_range_port}     ${invalid_port_error}
116    ${SNMP_MGR1_IP}     ${alpha_port}            ${invalid_port_error}
117    ${SNMP_MGR1_IP}     ${negative_port}         ${invalid_port_error}
118    ${out_of_range_ip}  ${NON_DEFAULT_PORT1}     ${invalid_destination_error}
119    ${alpha_ip}         ${NON_DEFAULT_PORT1}     ${invalid_destination_error}
120
121
122Configure Multiple SNMP Managers On BMC Via GUI And Verify
123    [Documentation]  Configure multiple SNMP managers on BMC via GUI and verify.
124    [Tags]  Configure_Multiple_SNMP_Managers_On_BMC_Via_GUI_And_Verify
125    [Template]  Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
126
127    # snmp_manager_ip      snmp_port
128    ${SNMP_MGR1_IP}     ${SNMP_DEFAULT_PORT}
129    ${SNMP_MGR2_IP}     ${SNMP_DEFAULT_PORT}
130
131
132Configure Multiple SNMP Managers With Non Default Port Via GUI And Verify
133    [Documentation]  Configure multiple SNMP managers with non-default port via GUI and verify.
134    [Tags]  Configure_Multiple_SNMP_Managers_With_Non_Default_Port_Via_GUI_And_Verify
135    [Template]  Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
136
137    # snmp_manager_ip      snmp_port
138    ${SNMP_MGR1_IP}     ${NON_DEFAULT_PORT1}
139    ${SNMP_MGR2_IP}     ${NON_DEFAULT_PORT1}
140
141
142Configure Multiple SNMP Managers With Different Ports Via GUI And Verify
143    [Documentation]  Configure multiple SNMP managers with different ports via GUI and verify.
144    [Tags]  Configure_Multiple_SNMP_Managers_With_Different_Ports_Via_GUI_And_Verify
145    [Template]  Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
146
147    # snmp_manager_ip      snmp_port
148    ${SNMP_MGR1_IP}     ${NON_DEFAULT_PORT1}
149    ${SNMP_MGR2_IP}     ${SNMP_DEFAULT_PORT}
150    ${SNMP_MGR3_IP}     ${NON_DEFAULT_PORT2}
151
152
153Configure Multiple SNMP Managers On BMC Via GUI And Verify Persistency On BMC Reboot
154    [Documentation]  Login GUI SNMP alerts page and
155    ...  add multiple SNMP Managers on BMC via GUI and verify persistency on BMC reboot.
156    [Tags]  Configure_Multiple_SNMP_Managers_On_BMC_Via_GUI_And_Verify_Persistency_On_BMC_Reboot
157    [Teardown]   Run Keywords  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
158    ...  AND  Delete SNMP Manager Via GUI  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
159
160    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
161    Wait Until Page Contains  ${SNMP_MGR1_IP}  timeout=45s
162
163    Configure SNMP Manager Via GUI  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
164    Wait Until Page Contains  ${SNMP_MGR2_IP}  timeout=45s
165
166    # Reboot BMC and check persistency SNMP manager.
167    Reboot BMC via GUI
168
169    Suite Setup Execution
170    Wait Until Page Contains  ${snmp_page_heading}  timeout=1min
171
172    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
173    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
174
175
176Configure SNMP Manager Via GUI And Verify SNMP Trap
177    [Documentation]  Login GUI SNMP alerts page and add SNMP manager via GUI
178    ...  and generate error on BMC and verify trap and its fields.
179    [Tags]  Configure_SNMP_Manager_Via_GUI_And_Verify_SNMP_Trap
180    [Template]  Create Error On BMC And Verify Trap On Default Port
181    [Teardown]  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
182
183    # event_log                 expected_error
184
185    # Generate internal failure error.
186    ${CMD_INTERNAL_FAILURE}     ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
187
188    # Generate timeout error.
189    ${CMD_FRU_CALLOUT}          ${SNMP_TRAP_BMC_CALLOUT_ERROR}
190
191    # Generate informational error.
192    ${CMD_INFORMATIONAL_ERROR}  ${SNMP_TRAP_BMC_INFORMATIONAL_ERROR}
193
194
195*** Keywords ***
196
197Suite Setup Execution
198    [Documentation]  Do test case setup tasks.
199
200    Launch Browser And Login GUI
201
202    Click Element  ${xpath_settings_menu}
203    Click Element  ${xpath_snmp_alerts_sub_menu}
204    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  snmp-alerts
205
206
207Configure SNMP Manager Via GUI
208    [Documentation]  Configure SNMP manager via GUI.
209    [Arguments]  ${snmp_ip}  ${port}
210
211    # Description of argument(s):
212    # snmp_ip  SNMP manager IP address.
213    # port     SNMP manager port.
214
215    Click Element  ${xpath_add_destination}
216    Wait Until Page Contains Element  ${xpath_snmp_alert_destination_heading}
217    Input Text  ${xpath_ip_address_input_button}  ${snmp_ip}
218    Wait Until Keyword Succeeds  30 sec  5 sec  Get Value  ${xpath_ip_address_input_button}
219    Input Text  ${xpath_port_optional_input_button}  ${port}
220    Click Element  ${xpath_snmp_add_destination_button}
221
222
223Delete SNMP Manager Via GUI
224    [Documentation]  Delete SNMP manager via GUI.
225    [Arguments]  ${snmp_mgr_ip}  ${snmp_mgr_port}
226
227    # Description of argument(s):
228    # snmp_mgr_ip       SNMP manager IP address.
229    # snmp_mgr_port     SNMP manager port.
230
231    Wait Until Page Contains  ${snmp_mgr_ip}  ${snmp_mgr_port}
232    Click Element At Coordinates  ${xpath_select_all_snmp}  0  0
233    Wait Until Keyword Succeeds  30 sec  5 sec  Click Element  ${xpath_delete_button}
234    Wait Until Page Contains  Delete SNMP alert destination
235    Click Element  ${xpath_delete_destination}
236    Wait Until Page Contains  Successfully deleted SNMP alert destination  timeout=45s
237    Wait Until Keyword Succeeds  30 sec  10 sec  Refresh GUI And Verify Element Value
238    ...  ${xpath_snmp_alerts_heading}  ${snmp_page_heading}
239
240
241Configure SNMP Manager On BMC With Invalid Setting Via GUI And Verify
242
243    [Documentation]  Configure SNMP manager on BMC with invalid setting via GUI and verify.
244    [Arguments]  ${snmp_manager_ip}  ${snmp_manager_port}  ${expected_error}
245    [Teardown]  Run Keyword If  '${expected_error}' == '${invalid_port_error}'
246    ...  Click Element  ${xpath_cancel_button}
247
248    # Description of argument(s):
249    # snmp_manager_ip     SNMP manager IP address.
250    # snmp_manager_port   SNMP manager port.
251    # expected_error      Expected error optionally provided in testcase
252    # ....                (e.g. Invalid format / Value must be between 0 – 65535).
253
254    Configure SNMP Manager Via GUI  ${snmp_manager_ip}  ${snmp_manager_port}
255    Wait Until Page Contains   ${expected_error}
256    ${status}=  Run Keyword And Return Status
257    ...  Verify SNMP Manager Configured On BMC  ${snmp_manager_ip}  ${snmp_manager_port}
258    Should Be Equal As Strings  ${status}  False
259    ...  msg=BMC is allowing to configure with invalid SNMP settings.
260
261
262Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
263    [Documentation]  Configure multiple SNMP managers on BMC with valid port value via GUI and verify.
264    [Arguments]  ${snmp_ip_value}  ${snmp_port_value}
265    [Teardown]  Delete SNMP Manager Via GUI  ${snmp_ip_value}  ${snmp_port_value}
266
267    # Description of argument(s):
268    # snmp_ip_value     SNMP manager IP address.
269    # snmp_port_value   SNMP manager port.
270
271    Configure SNMP Manager Via GUI  ${snmp_ip_value}  ${snmp_port_value}
272    Verify SNMP Manager Configured On BMC  ${snmp_ip_value}  ${snmp_port_value}
273
274
275Create Error On BMC And Verify Trap On Default Port
276    [Documentation]  Generate error on BMC and verify if trap is sent to default port.
277    [Arguments]  ${event_log}=${CMD_INTERNAL_FAILURE}  ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
278
279    # Description of argument(s):
280    # event_log       Event logs to be created.
281    # expected_error  Expected error on SNMP.
282
283    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
284
285    Start SNMP Manager
286
287    # Generate error log.
288    BMC Execute Command  ${event_log}
289
290    SSHLibrary.Switch Connection  snmp_server
291    ${SNMP_LISTEN_OUT}=  Read  delay=1s
292
293    # Stop SNMP manager process.
294    SSHLibrary.Execute Command  sudo killall snmptrapd
295
296    # Sample SNMP trap:
297    # 2021-06-16 07:05:29 xx.xx.xx.xx [UDP: [xx.xx.xx.xx]:58154->[xx.xx.xx.xx]:xxx]:
298    # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2100473) 5:50:04.73
299    #   SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
300    #  SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 369    SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque:
301    # UInt64: 1397718405502468474     SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
302    #      SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "xxx.xx.xx Failure"
303
304    ${lines}=  Split To Lines  ${SNMP_LISTEN_OUT}
305    ${trap_info}=  Get From List  ${lines}  -1
306    ${snmp_trap}=  Split String  ${trap_info}  \t
307
308    Verify SNMP Trap  ${snmp_trap}  ${expected_error}
309