xref: /openbmc/openbmc-test-automation/gui/lib/gui_resource.robot (revision feb79d60e26d78a6e91521ee41b1af5b8ba71f4c)
1*** Settings ***
2Documentation  This is a resource file containing user-defined keywords for new Vue based OpenBMC GUI.
3
4Library        XvfbRobot
5Library        SeleniumLibrary
6Library        SSHLibrary  30 Seconds
7Resource       ../../lib/state_manager.robot
8Variables      ../data/gui_variables.py
9
10
11*** Variables ***
12${OPENBMC_GUI_URL}            https://${OPENBMC_HOST}:${HTTPS_PORT}
13${xpath_power_page}           //*[@data-test-id='appHeader-container-power']
14${xpath_power_shutdown}       //*[@data-test-id='serverPowerOperations-button-shutDown']
15${xpath_power_power_on}       //*[@data-test-id='serverPowerOperations-button-powerOn']
16${xpath_power_reboot}         //*[@data-test-id='serverPowerOperations-button-reboot']
17${xpath_confirm}              //button[contains(text(),'Confirm')]
18
19# Default GUI browser and mode is set to "Firefox" and "headless"
20# respectively here.
21${GUI_BROWSER}               ff
22${GUI_MODE}                  headless
23
24
25*** Keywords ***
26
27Open Browser With URL
28    [Documentation]  Open browser with specified URL and returns browser id.
29    [Arguments]  ${URL}  ${browser}=ff  ${mode}=${GUI_MODE}
30
31    # Description of argument(s):
32    # URL      Openbmc GUI URL to be open
33    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
34    # browser  Browser used to open above URL
35    #          (e.g. gc for google chrome, ff for firefox).
36    # mode     Browser opening mode(e.g. headless, header).
37
38    IF  '${mode}' == 'headless'
39       ${browser_ID}=  Launch Headless Browser  ${URL}  ${browser}
40    ELSE
41       ${browser_ID}=  Open Browser  ${URL}  ${browser}
42    END
43    RETURN  ${browser_ID}
44
45
46Launch Header Browser
47    [Documentation]  Open the browser with the URL and
48    ...              login on windows platform.
49    [Arguments]  ${browser_type}=${GUI_BROWSER}
50
51    # Description of argument(s):
52    # browser_type  Type of browser (e.g. "firefox", "chrome", etc.).
53
54    ${BROWSER_ID}=  Open Browser  ${OPENBMC_GUI_URL}  ${browser_type}
55    Maximize Browser Window
56    Set Global Variable  ${BROWSER_ID}
57
58
59Launch Headless Browser
60    [Documentation]  Launch headless browser.
61    [Arguments]  ${URL}=${OPENBMC_GUI_URL}  ${browser}=${GUI_BROWSER}
62
63    # Description of argument(s):
64    # URL      Openbmc GUI URL to be open
65    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
66    # browser  Browser to open given URL in headless way
67    #          (e.g. gc for google chrome, ff for firefox).
68
69    Start Virtual Display
70    ${browser_ID}=  Open Browser  ${URL}    ${browser}
71    Set Window Size  1920  1080
72
73    RETURN  ${browser_ID}
74
75
76Launch Browser And Login GUI
77    [Documentation]  Launch browser and login to OpenBMC GUI, retry 2 attempts
78    ...              in 1 minute time.
79
80    Wait Until Keyword Succeeds  195 sec   65 sec  Retry Browser Login Attempts
81
82
83Retry Browser Login Attempts
84    [Documentation]  Launch browser and login to OpenBMC GUI.
85
86    Open Browser With URL  ${OPENBMC_GUI_URL}
87    Login GUI  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
88
89
90Login GUI
91    [Documentation]  Login to OpenBMC GUI.
92    [Arguments]  ${username}=${OPENBMC_USERNAME}  ${password}=${OPENBMC_PASSWORD}
93
94    # Description of argument(s):
95    # username  The username to be used for login.
96    # password  The password to be used for login.
97
98    Go To  ${OPENBMC_GUI_URL}
99    Wait Until Element Is Enabled  ${xpath_login_username_input}
100    Input Text  ${xpath_login_username_input}  ${username}
101    Input Password  ${xpath_login_password_input}  ${password}
102    Wait Until Element Is Enabled  ${xpath_login_button}
103    Click Element  ${xpath_login_button}
104    Wait Until Page Contains  Operations  timeout=60s
105    Wait Until Element Is Not Visible
106    ...  ${xpath_page_loading_progress_bar}  timeout=120s
107
108
109Launch Browser And Login GUI With Given User
110    [Documentation]  Launch browser and login eBMC with specified user
111    ...  credentials through GUI.
112    [Arguments]  ${user_name}  ${user_password}
113
114    # Description of argument(s):
115    # user_name        User name to login to eBMC.
116    # user_password    User password to login to eBMC.
117
118    Open Browser With URL  ${OPENBMC_GUI_URL}
119    LOGIN GUI  ${user_name}  ${user_password}
120
121
122Logout GUI
123    [Documentation]  Logout of OpenBMC GUI.
124
125    Click Element  ${xpath_root_button_menu}
126    Click Element  ${xpath_logout_button}
127    Wait Until Page Contains Element  ${xpath_login_button}
128
129
130Generate Test Error Log
131    [Documentation]  Generate test error log.
132
133    BMC Execute Command  ${CMD_UNRECOVERABLE_ERROR}
134
135
136Set Timezone In Profile Settings Page
137    [Documentation]  Set the given timezone in profile settings page.
138    [Arguments]  ${timezone}=Default
139
140    # Description of argument(s):
141    # timezone  Timezone to select (eg. Default or Browser_offset).
142
143    Wait Until Page Contains Element  ${xpath_root_button_menu}
144    Click Element  ${xpath_root_button_menu}
145    Click Element  ${xpath_profile_settings}
146    Click Element At Coordinates  ${xpath_default_UTC}  0  0
147    Click Element  ${xpath_profile_save_button}
148
149
150Refresh GUI
151    [Documentation]  Refresh GUI via refresh button in header.
152
153    Click Element  ${xpath_refresh_button}
154    # Waiting for  page to load fully after refresh.
155    Wait Until Element Is Not Visible   ${xpath_page_loading_progress_bar}  timeout=120s
156
157
158Refresh GUI And Verify Element Value
159    [Documentation]  Refresh GUI using refresh button and verify that given element contains expected value.
160    [Arguments]  ${element}  ${expected_value}
161
162    # Description of argument(s):
163    # element         Element whose value need to be checked.
164    # expected_value  Expected value of for the given element.
165
166    # Refresh GUI.
167    Refresh GUI
168
169    # Check element value and verify that it contains expected value.
170    ${element_value}=  Get Text  ${element}
171    Log  ${element_value}
172    Should Contain  ${element_value}  ${expected_value}
173
174
175Reboot BMC via GUI
176    [Documentation]  Reboot BMC via GUI.
177
178    Click Element  ${xpath_operations_menu}
179    Click Element  ${xpath_reboot_bmc_sub_menu}
180    Click Button  ${xpath_reboot_bmc_button}
181    Wait Until Keyword Succeeds  30 sec  10 sec  Click Button  ${xpath_confirm_bmc_reboot}
182    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Unpingable
183    Wait For Host To Ping  ${OPENBMC_HOST}  1 min
184
185
186Add DNS Servers And Verify
187    [Documentation]  Login to GUI Network page,add DNS server on BMC
188    ...  and verify it via BMC CLI.
189    [Arguments]  ${dns_server}   ${expected_status}=Valid format
190
191    # Description of the argument(s):
192    # dns_server           A list of static name server IPs to be
193    #                      configured on the BMC.
194    # expected_status      Expected status while adding DNS server address
195    #                      (e.g. Invalid format / Field required).
196
197    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=15sec
198
199    Click Button  ${xpath_add_dns_ip_address_button}
200    Input Text  ${xpath_input_static_dns}  ${dns_server}
201    Click Button  ${xpath_add_button}
202    IF  '${expected_status}' != 'Valid format'
203        Page Should Contain  ${expected_status}
204        Return From Keyword
205    END
206
207    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=10sec
208    Wait Until Page Contains  ${dns_server}  timeout=40sec
209
210    # Check if newly added DNS server is configured on BMC.
211    ${cli_name_servers}=  CLI Get Nameservers
212    ${cmd_status}=  Run Keyword And Return Status
213    ...  List Should Contain Sub List  ${cli_name_servers}  ${dns_server}
214    IF  '${expected_status}' == '${HTTP_OK}'
215       Should Be True  ${cmd_status} == ${True}
216    ELSE
217       Should Not Be True  ${cmd_status}
218    END
219
220
221Navigate To Server Power Page
222    [Documentation]  Navigate To Server Power Page.
223
224    Click Element  ${xpath_power_page}
225    Wait Until Element Is Not Visible  ${xpath_page_loading_progress_bar}  timeout=30s
226
227
228Power Off Server
229    [Documentation]  Powering off server.
230
231    ${boot_state}  ${host_state}=  Redfish Get Boot Progress
232    IF  '${host_state}' == 'Disabled'
233        Log To Console    Server is already powered Off.
234    ELSE
235        Navigate To Server Power Page
236        Wait And Click Element  ${xpath_power_shutdown}
237        Click Button  ${xpath_confirm}
238        Wait Until Element Is Visible  ${xpath_power_poweron}  timeout=60
239        Verify And Close Information Message Via GUI
240        Wait Until Keyword Succeeds  5m  30s  Check Boot Progress State Via Redfish  None  Disabled
241    END
242
243
244Power On Server
245    [Documentation]  Powering on server.
246
247    ${boot_state}  ${host_state}=  Redfish Get Boot Progress
248    IF  '${boot_state}' == 'OSRunning'
249        Log To Console    Server is already powered On.
250    ELSE
251        Set BIOS Attribute    pvm_stop_at_standby    Disabled
252        Navigate To Server Power Page
253        Wait And Click Element  ${xpath_power_power_on}
254        Wait Until Element Is Visible  ${xpath_power_shutdown}  timeout=60s
255        Verify And Close Information Message Via GUI
256        Wait Until Keyword Succeeds  10m  45s  Check Boot Progress State Via Redfish  OSRunning  Enabled
257    END
258
259
260Check Boot Progress State Via Redfish
261    [Documentation]   Checking boot progress state via redfish.
262    [Arguments]  ${expected_boot_state}  ${expected_host_state}
263
264    # Description of argument(s):
265    # expected_boot_state      Expected Boot states are "OSRunning" and "None".
266    # expected_host_state      Expected Host states are "Enabled" and "Disabled"
267
268    ${boot_state}  ${host_state}=  Redfish Get Boot Progress
269    Log To Console  Current boot state: ${boot_state}, host state: ${host_state}
270
271    Should Be Equal As Strings  ${boot_state}  ${expected_boot_state}
272    ...  msg=Boot state mismatch: expected '${expected_boot_state}', got '${boot_state}'
273    Should Be Equal As Strings  ${host_state}  ${expected_host_state}
274    ...  msg=Host state mismatch: expected '${expected_host_state}', got '${host_state}'
275
276
277Verify And Close Information Message Via GUI
278    [Documentation]  Verify and close Information message via GUI page.
279
280    Wait Until Element Is Visible  ${xpath_close_information_message}  timeout=5s
281    Page Should Contain Element  ${xpath_information_message}
282    Click Element  ${xpath_close_information_message}
283
284
285Reboot Server
286    [Documentation]  Rebooting the server.
287
288    Navigate To Server Power Page
289    ${present}=    Run Keyword And Return Status
290    ...  Element Should Be Visible    ${xpath_power_reboot}
291    IF  ${present}
292      Click Element  ${xpath_power_reboot}
293      Wait Until Element Is Visible  ${xpath_confirm}  timeout=30
294      Click Button  ${xpath_confirm}
295      Wait Until Element Is Visible  ${xpath_power_reboot}  timeout=60
296    ELSE
297      Log To console    Server is already powered Off, can't reboot.
298    END
299
300
301Verify Success Message On BMC GUI Page
302    [Documentation]  Perform actions on the GUI and verify that a success message is displayed.
303
304    Wait Until Element Is Visible   ${xpath_success_message}  timeout=30
305    Page Should Contain Element   ${xpath_success_message}
306    Wait Until Element Is Not Visible   ${xpath_success_message}  timeout=30
307
308
309Verify Error And Unauthorized Message On GUI
310    [Documentation]   Perform operations on GUI with Readonly user and
311    ...               verify Error and Unauthorized messages.
312
313    Wait Until Element Is Visible  ${xpath_error_popup}
314    Page Should Contain  Error
315    Page Should Contain  Unauthorized
316    Click Element  ${xpath_error_popup}
317    Click Element  ${xpath_unauthorized_popup}
318
319
320Create Readonly User And Login To GUI
321    [Documentation]   Logout current GUI sessions and Created Readonly_user
322    ...               via Redfish and Login BMC GUI with Readonly user
323
324    # Logout current GUI session.
325    Logout GUI
326
327    # Created readonly_user via redfish and login BMC GUI with readonly
328    # user to perform test.
329    Redfish.Login
330    Redfish Create User  readonly_user  ${OPENBMC_PASSWORD}  ReadOnly  ${True}
331    Login GUI  readonly_user  ${OPENBMC_PASSWORD}
332
333
334Delete Readonly User And Logout Current GUI Session
335    [Documentation]  Logout current GUI session and delete Readonly user,
336    ...              Perform Login GUI with default user and password.
337
338    # Delete Read-only user and Logout current GUI session.
339    Logout GUI
340    Redfish.Delete  /redfish/v1/AccountService/Accounts/readonly_user
341    Close Browser
342
343    # Login BMC GUI with default user.
344    Launch Browser And Login GUI
345
346
347Wait And Click Element
348    [Documentation]  Wait until element is visible then click the element.
349    [Arguments]  ${locator}  ${wait_timeout}=10s
350
351    # Description of argument(s):
352    # locator        xpath of the element.
353    # wait_timeout   timeout for the locator to visible.
354
355    Wait Until Element Is Visible    ${locator}    timeout=${wait_timeout}
356    Click Element    ${locator}
357
358
359Navigate To Required Sub Menu
360    [Documentation]  Navigate to required sub menu from main menu.
361    [Arguments]  ${xpath_main_menu}  ${xpath_sub_menu}  ${sub_menu_text}
362
363    # Description of argument(s):
364    # xpath_main_menu    Locator of main menu.
365    # xpath_sub_menu     Locator of sub menu.
366    # sub_menu_text      Text of sub menu.
367
368    ${present}=    Run Keyword And Return Status
369    ...  Element Should Be Visible    ${xpath_sub_menu}
370
371    IF  not ${present}
372        Wait And Click Element  ${xpath_main_menu}
373    END
374    Wait And Click Element  ${xpath_sub_menu}  wait_timeout=60s
375    Location Should Contain  ${sub_menu_text}
376    Wait Until Element Is Not Visible  ${xpath_page_loading_progress_bar}  timeout=1min
377