1*** Settings ***
2Documentation  This is a resource file of OpenBMC ASMI It contains the
3...            user-defined keywords which are available to all gui modules
4
5Library      String
6Library      Collections
7Library      DateTime
8Library      XvfbRobot
9Library      OperatingSystem
10Library      SeleniumLibrary
11Library      AngularJSLibrary
12Library      SSHLibrary  30 Seconds
13Library      Process
14Library      supporting_libs.py
15Library      ../../lib/gen_print.py
16Library      ../../lib/gen_robot_print.py
17Library      ../../lib/gen_valid.py
18Library      ../../lib/gen_robot_ssh.py
19Library      ../../lib/bmc_ssh_utils.py
20Resource     ../../lib/resource.robot
21Resource     ../../lib/rest_client.robot
22Resource     ../../lib/state_manager.robot
23Variables    ../data/resource_variables.py
24
25*** Variables ***
26${obmc_gui_url}              https://${OPENBMC_HOST}
27
28${obmc_PowerOff_state}       Off
29${obmc_PowerRunning_state}   Running
30${obmc_PowerStandby_state}   Standby
31
32# Default GUI broswer and mode is set to "Firefox" and "headless"
33# respectively here.
34${GUI_BROWSER}               ff
35${GUI_MODE}                  headless
36
37*** Keywords ***
38Launch OpenBMC GUI Browser
39    [Documentation]  Launch the OpenBMC GUI URL on a browser.
40    # By default uses headless mode, otherwise, the GUI browser.
41
42    ${op_system}=  Get Operating System
43    Run Keyword If  '${op_system}' == 'windows'
44    ...     Launch Header Browser
45    ...  ELSE IF  '${op_system}' == 'Darwin'
46            # Mac OS is currently having some issues with firefox, so using
47            # chrome.
48            # TODO: Need to add support for other browsers. Issue #1280.
49    ...     Launch Header Browser  chrome
50    ...  ELSE
51            # Linux OS.
52    ...     Launch Headless Browser
53
54Get Operating System
55    [Documentation]  Identify platform/OS.
56
57    ${curdir_lower_case}=  Convert To Lowercase  ${CURDIR}
58    ${windows_platform}=  Run Keyword And Return Status
59    ...  Should Contain  ${curdir_lower_case}  c:\
60    ${op_system}=  Run Keyword If  '${windows_platform}' == 'True'
61    ...     Set Variable  windows
62    ...   ELSE
63    ...     Run  uname
64    [Return]  ${op_system}
65
66Launch Header Browser
67    [Documentation]  Open the browser with the URL and
68    ...              login on windows platform.
69    [Arguments]  ${browser_type}=${GUI_BROWSER}
70
71    # Description of argument(s):
72    # browser_type  Type of browser (e.g. "firefox", "chrome", etc.).
73
74    ${BROWSER_ID}=  Open Browser  ${obmc_gui_url}  ${browser_type}
75    Maximize Browser Window
76    Set Global Variable  ${BROWSER_ID}
77
78Launch Headless Browser
79    [Documentation]  Launch headless browser.
80    [Arguments]  ${URL}=${obmc_gui_url}  ${browser}=${GUI_BROWSER}
81
82    # Description of argument(s):
83    # URL      Openbmc GUI URL to be open
84    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
85    # browser  Browser to open given URL in headless way
86    #          (e.g. gc for google chrome, ff for firefox).
87
88    Start Virtual Display
89    ${browser_ID}=  Open Browser  ${URL}
90    Set Window Size  1920  1080
91
92    [Return]  ${browser_ID}
93
94Login OpenBMC GUI
95    [Documentation]  Perform login to open BMC GUI.
96    [Arguments]  ${username}=${OPENBMC_USERNAME}
97    ...  ${password}=${OPENBMC_PASSWORD}
98
99    # Description of argument(s):
100    # username      The username.
101    # password      The password.
102
103    Go To  ${obmc_gui_url}
104    Wait Until Element Is Enabled  ${xpath_textbox_hostname}
105    Input Text  ${xpath_textbox_hostname}  ${OPENBMC_HOST}
106    Input Text  ${xpath_textbox_username}  ${username}
107    Input Password  ${xpath_textbox_password}  ${password}
108    Click Element  login__submit
109    Wait Until Element Is Enabled  ${xpath_button_logout}
110    Page Should Contain  Server information
111
112
113Test Setup Execution
114    [Documentation]  Verify all the preconditions to be tested.
115    [Arguments]  ${obmc_test_setup_state}=${OBMC_PowerOff_state}
116
117    # Description of argument(s):
118    # obmc_test_setup      The OpenBMC required state.
119
120    Print Timen  ${TEST NAME} ==> [STARTED]
121    Launch Browser And Login OpenBMC GUI
122    Log To Console  Verifying the system state and stablity...
123
124    Click Element  ${xpath_select_server_power}
125    Wait Until Page Does Not Contain  Unreachable
126    ${obmc_current_state}=  Get Text  ${xpath_power_indicator}
127    Rpvars  obmc_current_state
128
129    ${obmc_state_status}=  Run Keyword And Return Status
130    ...  Should Contain  ${obmc_current_state}  ${obmc_test_setup_state}
131    Return From Keyword If  '${obmc_state_status}' == 'True'
132
133    ${obmc_standby_state}=  Run Keyword And Return Status
134    ...  Should Contain  ${obmc_current_state}  ${obmc_standby_state}
135
136    Run Keyword If  '${obmc_standby_state}' == 'True'
137    ...  Reboot OpenBMC
138    Run Keyword If  '${obmc_test_setup_state}' == '${obmc_PowerRunning_state}'
139    ...  Run Keywords  Power On OpenBMC  AND
140    ...  Wait Until Keyword Succeeds  10 min  60 sec  Is Host Running
141    Run Keyword If  '${obmc_test_setup_state}' == '${obmc_PowerOff_state}'
142    ...  Run Keywords  Redfish.Login  AND  Redfish Power Off  AND  Redfish.Logout
143
144Power Off OpenBMC
145    [Documentation]  Power off the OBMC system.
146
147    Log To Console  Power Off OpenBMC...
148    Click Element  ${xpath_select_server_power}
149    Execute JavaScript  window.scrollTo(0, document.body.scrollHeight)
150    Click Button  ${xpath_select_button_orderly_shutdown}
151    Click Yes Button  ${xpath_select_button_orderly_shutdown_yes}
152    Wait OpenBMC To Become Stable  ${obmc_off_state}
153
154Power On OpenBMC
155    [Documentation]  Power on the OBMC system.
156
157    Log To Console  Power On OpenBMC...
158    Click Element  ${xpath_select_server_power}
159    Click Button  ${xpath_select_button_power_on }
160    Wait OpenBMC To Become Stable  ${obmc_running_state}
161
162Reboot OpenBMC
163    [Documentation]  Rebooting the OBMC system.
164
165    Log To Console  Reboting the OpenBMC...
166    Click Element  ${xpath_select_server_power}
167    Click Button  ${xpath_select_button_orderly_shutdown}
168    Click Yes Button  ${xpath_select_button_orderly_shutdown_yes}
169    Wait OpenBMC To Become Stable  ${obmc_off_state}
170
171Wait OpenBMC To Become Stable
172    [Documentation]  Power off the OBMC.
173    [Arguments]  ${obmc_expected_state}  ${retry_time}=15 min
174    ...  ${retry_interval}=45 sec
175
176    # Description of argument(s):
177    # OBMC_expected_state      The OBMC state which is required for test.
178    # retry_time               Total wait time after executing the command.
179    # retry_interval           Time interval for to keep checking with in the
180    #                          above total wait time.
181
182    Wait Until Keyword Succeeds  ${retry_time}  ${retry_interval}
183    ...  Wait Until Element Contains  ${xpath_select_server_power}
184    ...  ${obmc_expected_state}
185    Wait Until Keyword Succeeds  ${retry_time}  ${retry_interval}
186    ...  Verify OpenBMC State From REST Interface  ${obmc_expected_state}
187
188Verify OpenBMC State From REST Interface
189    [Documentation]  Verify system state from REST Interface.
190    [Arguments]  ${obmc_required_state}
191
192    # Description of argument(s):
193    # obmc_required_state      The OBMC state which is required for test.
194
195    ${obmc_current_state_REST}=  Get Host State
196    Should Be Equal  ${obmc_current_state_REST}  ${obmc_required_state}
197
198Click Yes Button
199    [Documentation]  Click the 'Yes' button.
200    [Arguments]  ${xpath_button_yes}
201
202    # Description of argument(s):
203    # xpath_button_yes      The xpath of 'Yes' button.
204
205    Click Button  ${xpath_button_yes}
206
207LogOut OpenBMC GUI
208    [Documentation]  Log out of OpenBMC GUI.
209    SSHLibrary.Close All Connections
210    # Passing direct id element "header" as an argument to Click Element.
211    Click Element  ${xpath_button_logout}
212    Wait Until Page Contains Element  ${xpath_button_login}
213
214Test Teardown Execution
215    [Documentation]  Do final closure activities of test case execution.
216    Print Pgm Footer
217    Print Dashes  0  100  1  =
218    Close Browser
219
220
221Open Browser With URL
222    [Documentation]  Open browser with specified URL and returns browser id.
223    [Arguments]  ${URL}  ${browser}=ff  ${mode}=${GUI_MODE}
224
225    # Description of argument(s):
226    # URL      Openbmc GUI URL to be open
227    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
228    # browser  Browser used to open above URL
229    #          (e.g. gc for google chrome, ff for firefox).
230    # mode     Browser opening mode(e.g. headless, header).
231
232    ${browser_ID}=  Run Keyword If  '${mode}' == 'headless'
233    ...  Launch Headless Browser  ${URL}  ${browser}
234    ...  ELSE  Open Browser  ${URL}  ${browser}
235
236    [Return]  ${browser_ID}
237
238
239Controller Server Power Click Button
240    [Documentation]  Click main server power in the header section.
241    [Arguments]  ${controller_element}
242
243    # Description of argument(s):
244    # controller_element  Server power controller element
245    #                     (e.g. power__power-on.)
246
247    Click Element  ${xpath_select_server_power}
248    Wait Until Element Is Visible  ${controller_element}
249    Page Should Contain Button  ${controller_element}
250    Click Element  ${controller_element}
251
252Controller Power Operations Confirmation Click Button
253    [Documentation]  Click Common Power Operations Confirmation.
254    [Arguments]  ${main_element}  ${sub_element}  ${confirm_msg_elt}  ${confirmation}
255
256    # Description of argument(s):
257    # main_element     Server power operations element
258    #                  (e.g. power_operations.)
259    # sub_element      Server power operations sub element
260    #                  (e.g. warm_boot, shut_down.)
261    # confirm_msg_elt  Server power operations confirm message element
262    #                  (e.g. confirm_msg.)
263    # confirmation     Server power operations confirmation
264    #                  (e.g. yes.)
265
266    ${element_path}=  Catenate  //*[@id='power-operations']/div[${main_element}]/div[${sub_element}]
267    ...  /confirm/div/div[${confirm_msg_elt}]/button[${confirmation}]
268    Click Element  ${element_path.replace(" ","")}
269
270
271GUI Power On
272    [Documentation]  Power on the host using GUI.
273
274    Controller Server Power Click Button  power__power-on
275    Wait Until Page Contains  Running   timeout=30s
276
277Verify Display Content
278    [Documentation]  Verify text content display.
279    [Arguments]  ${display_text}
280
281    # Description of argument(s):
282    # display_text   The text which is expected to be found on the web page.
283
284    Page Should Contain  ${display_text}
285
286Warm Reboot openBMC
287    [Documentation]  Warm reboot the OBMC system.
288
289    Log To Console  Warm Reboting the OpenBMC...
290    Click Element  ${xpath_select_button_warm_reboot}
291    Verify Warning Message Display Text  ${xpath_operation_warning_message}
292    ...  ${text_warm_reboot_warning_message}
293    Click Yes Button  ${xpath_select_button_warm_reboot_yes}
294    Wait OpenBMC To Become Stable  ${obmc_running_state}
295
296Click No Button
297    [Documentation]  Click the 'No' button.
298    [Arguments]  ${xpath_button_no}
299
300    # Description of argument(s):
301    # xpath_button_no      The xpath of 'No' button.
302
303    Click Button  ${xpath_button_no}
304
305Cold Reboot openBMC
306    [Documentation]  Cold reboot the OBMC system.
307
308    Log To Console  Cold Reboting the OpenBMC...
309    Click Element  ${xpath_select_button_cold_reboot}
310    Verify Warning Message Display Text  ${xpath_operation_warning_message}
311    ...  ${text_cold_reboot_warning_message}
312    Click Yes Button  ${xpath_select_button_cold_reboot_yes}
313    Wait OpenBMC To Become Stable  ${obmc_running_state}
314
315Orderly Shutdown OpenBMC
316    [Documentation]  Do orderly shutdown the OBMC system.
317
318    Log To Console  Orderly Shutdown the OpenBMC...
319    Click Element  ${xpath_select_button_orderly_shutdown}
320    Verify Warning Message Display Text  ${xpath_operation_warning_message}
321    ...  ${text_orderly_shutdown_warning_message}
322    Click Yes Button  ${xpath_select_button_orderly_shutdown_yes}
323    Wait OpenBMC To Become Stable  ${obmc_off_state}
324
325Immediate Shutdown openBMC
326    [Documentation]  Do immediate shutdown the OBMC system.
327
328    Log To Console  Immediate Shutdown the OpenBMC...
329    Click Element  ${xpath_select_button_immediate_shutdown}
330    Verify Warning Message Display Text
331    ...  ${xpath_operation_warning_message}
332    ...  ${text_immediate_shutdown_warning_message}
333    Click Yes Button  ${xpath_select_button_immediate_shutdown_yes}
334    Wait OpenBMC To Become Stable  ${obmc_off_state}
335
336Verify Warning Message Display Text
337    [Documentation]  Verify the warning message display text.
338    [Arguments]  ${xpath_text_message}  ${text_message}
339
340    # xpath_text_message  Xpath of warning message display.
341    # text_message        Content of the display message info.
342
343    Element Should Contain  ${xpath_text_message}  ${text_message}
344
345
346Expected Initial Test State
347    [Documentation]  Power on the host if "Running" expected, Power off the
348    ...  host if "Off" expected as per the requirement of initial test state.
349    [Arguments]  ${expectedState}
350    # Description of argument(s):
351    # expectedState    Test initial host state.
352
353    Run Keyword If  '${expectedState}' == 'Running'
354    ...  REST Power On  stack_mode=skip  quiet=1
355
356    Run Keyword If  '${expectedState}' == 'Off'
357    ...  REST Power Off  stack_mode=skip  quiet=1
358
359Launch Browser And Login OpenBMC GUI
360    [Documentation]  Launch browser and log into openbmc GUI.
361
362    Open Browser With URL  ${obmc_gui_url}
363    Login OpenBMC GUI  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
364
365Logout And Close Browser
366    [Documentation]  Logout from openbmc application and close the browser.
367
368    Click Element  //*[text()='Log out']
369    Close Browser
370