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    ${SNMP_MGR1_IP}     ${alphanumeric_port}     ${invalid_port_error}
119    ${out_of_range_ip}  ${NON_DEFAULT_PORT1}     ${invalid_destination_error}
120    ${alpha_ip}         ${NON_DEFAULT_PORT1}     ${invalid_destination_error}
121    ${negative_ip}      ${NON_DEFAULT_PORT1}     ${invalid_destination_error}
122    ${empty_ip}         ${NON_DEFAULT_PORT1}     ${invalid_destination_error}
123
124
125Configure Multiple SNMP Managers On BMC Via GUI And Verify
126    [Documentation]  Configure multiple SNMP managers on BMC via GUI and verify.
127    [Tags]  Configure_Multiple_SNMP_Managers_On_BMC_Via_GUI_And_Verify
128    [Template]  Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
129
130    # snmp_manager_ip      snmp_port
131    ${SNMP_MGR1_IP}     ${SNMP_DEFAULT_PORT}
132    ${SNMP_MGR2_IP}     ${SNMP_DEFAULT_PORT}
133
134
135Configure Multiple SNMP Managers With Non Default Port Via GUI And Verify
136    [Documentation]  Configure multiple SNMP managers with non-default port via GUI and verify.
137    [Tags]  Configure_Multiple_SNMP_Managers_With_Non_Default_Port_Via_GUI_And_Verify
138    [Template]  Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
139
140    # snmp_manager_ip      snmp_port
141    ${SNMP_MGR1_IP}     ${NON_DEFAULT_PORT1}
142    ${SNMP_MGR2_IP}     ${NON_DEFAULT_PORT1}
143
144
145Configure Multiple SNMP Managers With Different Ports Via GUI And Verify
146    [Documentation]  Configure multiple SNMP managers with different ports via GUI and verify.
147    [Tags]  Configure_Multiple_SNMP_Managers_With_Different_Ports_Via_GUI_And_Verify
148    [Template]  Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
149
150    # snmp_manager_ip      snmp_port
151    ${SNMP_MGR1_IP}     ${NON_DEFAULT_PORT1}
152    ${SNMP_MGR2_IP}     ${SNMP_DEFAULT_PORT}
153    ${SNMP_MGR3_IP}     ${NON_DEFAULT_PORT2}
154
155
156Configure Multiple SNMP Managers On BMC Via GUI And Verify Persistency On BMC Reboot
157    [Documentation]  Login GUI SNMP alerts page and
158    ...  add multiple SNMP Managers on BMC via GUI and verify persistency on BMC reboot.
159    [Tags]  Configure_Multiple_SNMP_Managers_On_BMC_Via_GUI_And_Verify_Persistency_On_BMC_Reboot
160    [Teardown]   Run Keywords  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
161    ...  AND  Delete SNMP Manager Via GUI  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
162
163    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
164    Wait Until Page Contains  ${SNMP_MGR1_IP}  timeout=45s
165
166    Configure SNMP Manager Via GUI  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
167    Wait Until Page Contains  ${SNMP_MGR2_IP}  timeout=45s
168
169    # Reboot BMC and check persistency SNMP manager.
170    Reboot BMC via GUI
171
172    Suite Setup Execution
173    Wait Until Page Contains  ${snmp_page_heading}  timeout=1min
174
175    Verify SNMP Manager Configured On BMC  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
176    Verify SNMP Manager Configured On BMC  ${SNMP_MGR2_IP}  ${SNMP_DEFAULT_PORT}
177
178
179Configure SNMP Manager Via GUI And Verify SNMP Trap
180    [Documentation]  Login GUI SNMP alerts page and add SNMP manager via GUI
181    ...  and generate error on BMC and verify trap and its fields.
182    [Tags]  Configure_SNMP_Manager_Via_GUI_And_Verify_SNMP_Trap
183    [Template]  Create Error On BMC And Verify Trap On Default Port
184    [Teardown]  Delete SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
185
186    # event_log                 expected_error
187
188    # Generate internal failure error.
189    ${CMD_INTERNAL_FAILURE}     ${SNMP_TRAP_BMC_INTERNAL_FAILURE}
190
191    # Generate timeout error.
192    ${CMD_FRU_CALLOUT}          ${SNMP_TRAP_BMC_CALLOUT_ERROR}
193
194    # Generate informational error.
195    ${CMD_INFORMATIONAL_ERROR}  ${SNMP_TRAP_BMC_INFORMATIONAL_ERROR}
196
197
198*** Keywords ***
199
200Suite Setup Execution
201    [Documentation]  Do test case setup tasks.
202
203    Launch Browser And Login GUI
204
205    Click Element  ${xpath_settings_menu}
206    Click Element  ${xpath_snmp_alerts_sub_menu}
207    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  snmp-alerts
208
209
210Configure SNMP Manager Via GUI
211    [Documentation]  Configure SNMP manager via GUI.
212    [Arguments]  ${snmp_ip}  ${port}
213
214    # Description of argument(s):
215    # snmp_ip  SNMP manager IP address.
216    # port     SNMP manager port.
217
218    Click Element  ${xpath_add_destination}
219    Wait Until Page Contains Element  ${xpath_snmp_alert_destination_heading}
220    Input Text  ${xpath_ip_address_input_button}  ${snmp_ip}
221    Wait Until Keyword Succeeds  30 sec  5 sec  Get Value  ${xpath_ip_address_input_button}
222    Input Text  ${xpath_port_optional_input_button}  ${port}
223    Click Element  ${xpath_snmp_add_destination_button}
224
225
226Delete SNMP Manager Via GUI
227    [Documentation]  Delete SNMP manager via GUI.
228    [Arguments]  ${snmp_mgr_ip}  ${snmp_mgr_port}
229
230    # Description of argument(s):
231    # snmp_mgr_ip       SNMP manager IP address.
232    # snmp_mgr_port     SNMP manager port.
233
234    Wait Until Page Contains  ${snmp_mgr_ip}  ${snmp_mgr_port}
235    Click Element At Coordinates  ${xpath_select_all_snmp}  0  0
236    Wait Until Keyword Succeeds  30 sec  5 sec  Click Element  ${xpath_delete_button}
237    Wait Until Page Contains  Delete SNMP alert destination
238    Click Element  ${xpath_delete_destination}
239    Wait Until Page Contains  Successfully deleted SNMP alert destination  timeout=45s
240    Wait Until Keyword Succeeds  30 sec  10 sec  Refresh GUI And Verify Element Value
241    ...  ${xpath_snmp_alerts_heading}  ${snmp_page_heading}
242
243
244Configure SNMP Manager On BMC With Invalid Setting Via GUI And Verify
245
246    [Documentation]  Configure SNMP manager on BMC with invalid setting via GUI and verify.
247    [Arguments]  ${snmp_manager_ip}  ${snmp_manager_port}  ${expected_error}
248    [Teardown]  Run Keyword If  '${expected_error}' == '${invalid_port_error}'
249    ...  Click Element  ${xpath_cancel_button}
250
251    # Description of argument(s):
252    # snmp_manager_ip     SNMP manager IP address.
253    # snmp_manager_port   SNMP manager port.
254    # expected_error      Expected error optionally provided in testcase
255    # ....                (e.g. Invalid format / Value must be between 0 – 65535).
256
257    Configure SNMP Manager Via GUI  ${snmp_manager_ip}  ${snmp_manager_port}
258    Wait Until Page Contains   ${expected_error}
259    ${status}=  Run Keyword And Return Status
260    ...  Verify SNMP Manager Configured On BMC  ${snmp_manager_ip}  ${snmp_manager_port}
261    Should Be Equal As Strings  ${status}  False
262    ...  msg=BMC is allowing to configure with invalid SNMP settings.
263
264
265Configure Multiple SNMP Managers On BMC With Valid Port Via GUI And Verify
266    [Documentation]  Configure multiple SNMP managers on BMC with valid port value via GUI and verify.
267    [Arguments]  ${snmp_ip_value}  ${snmp_port_value}
268    [Teardown]  Delete SNMP Manager Via GUI  ${snmp_ip_value}  ${snmp_port_value}
269
270    # Description of argument(s):
271    # snmp_ip_value     SNMP manager IP address.
272    # snmp_port_value   SNMP manager port.
273
274    Configure SNMP Manager Via GUI  ${snmp_ip_value}  ${snmp_port_value}
275    Verify SNMP Manager Configured On BMC  ${snmp_ip_value}  ${snmp_port_value}
276
277
278Create Error On BMC And Verify Trap On Default Port
279    [Documentation]  Generate error on BMC and verify if trap is sent to default port.
280    [Arguments]  ${event_log}=${CMD_INTERNAL_FAILURE}  ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
281
282    # Description of argument(s):
283    # event_log       Event logs to be created.
284    # expected_error  Expected error on SNMP.
285
286    Configure SNMP Manager Via GUI  ${SNMP_MGR1_IP}  ${SNMP_DEFAULT_PORT}
287
288    Start SNMP Manager
289
290    # Generate error log.
291    BMC Execute Command  ${event_log}
292
293    SSHLibrary.Switch Connection  snmp_server
294    ${SNMP_LISTEN_OUT}=  Read  delay=1s
295
296    # Stop SNMP manager process.
297    SSHLibrary.Execute Command  sudo killall snmptrapd
298
299    # Sample SNMP trap:
300    # 2021-06-16 07:05:29 xx.xx.xx.xx [UDP: [xx.xx.xx.xx]:58154->[xx.xx.xx.xx]:xxx]:
301    # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2100473) 5:50:04.73
302    #   SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
303    #  SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 369    SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque:
304    # UInt64: 1397718405502468474     SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
305    #      SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "xxx.xx.xx Failure"
306
307    ${lines}=  Split To Lines  ${SNMP_LISTEN_OUT}
308    ${trap_info}=  Get From List  ${lines}  -1
309    ${snmp_trap}=  Split String  ${trap_info}  \t
310
311    Verify SNMP Trap  ${snmp_trap}  ${expected_error}
312