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      Selenium2Library  120  120
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    Rprint Timen  ${TEST NAME} ==> [STARTED]
121    Launch Browser And Login OpenBMC GUI
122    Log To Console  Verifying the system state and stablity...
123
124    Click Button  ${xpath_select_server_power}
125    ${obmc_current_state}=  Get Text  ${xpath_power_indicator}
126    Rpvars  obmc_current_state
127
128    ${obmc_state_status}=  Run Keyword And Return Status
129    ...  Should Contain  ${obmc_current_state}  ${obmc_test_setup_state}
130    Return From Keyword If  '${obmc_state_status}' == 'True'
131
132    ${obmc_standby_state}=  Run Keyword And Return Status
133    ...  Should Contain  ${obmc_current_state}  ${obmc_standby_state}
134
135    Run Keyword If  '${obmc_standby_state}' == 'True'
136    ...  Reboot OpenBMC
137    Run Keyword If  '${obmc_test_setup_state}' == '${obmc_PowerRunning_state}'
138    ...  Run Keywords  Power On OpenBMC  AND
139    ...  Wait Until Keyword Succeeds  10 min  60 sec  Is Host Running
140    Run Keyword If  '${obmc_test_setup_state}' == '${obmc_PowerOff_state}'
141    ...  Power Off OpenBMC
142
143Power Off OpenBMC
144    [Documentation]  Power off the OBMC system.
145
146    Log To Console  Power Off OpenBMC...
147    Click Element  ${xpath_display_server_power_status}
148    Execute JavaScript  window.scrollTo(0, document.body.scrollHeight)
149    Click Button  ${xpath_select_button_orderly_shutdown}
150    Click Yes Button  ${xpath_select_button_orderly_shutdown_yes}
151    Wait OpenBMC To Become Stable  ${obmc_off_state}
152
153Power On OpenBMC
154    [Documentation]  Power on the OBMC system.
155
156    Log To Console  Power On OpenBMC...
157    Click Element  ${xpath_display_server_power_status}
158    Click Button  ${xpath_select_button_power_on }
159    Wait OpenBMC To Become Stable  ${obmc_running_state}
160
161Reboot OpenBMC
162    [Documentation]  Rebooting the OBMC system.
163
164    Log To Console  Reboting the OpenBMC...
165    Click Element  ${xpath_display_server_power_status}
166    Click Button  ${xpath_select_button_orderly_shutdown}
167    Click Yes Button  ${xpath_select_button_orderly_shutdown_yes}
168    Wait OpenBMC To Become Stable  ${obmc_off_state}
169
170Wait OpenBMC To Become Stable
171    [Documentation]  Power off the OBMC.
172    [Arguments]  ${obmc_expected_state}  ${retry_time}=15 min
173    ...  ${retry_interval}=45 sec
174
175    # Description of argument(s):
176    # OBMC_expected_state      The OBMC state which is required for test.
177    # retry_time               Total wait time after executing the command.
178    # retry_interval           Time interval for to keep checking with in the
179    #                          above total wait time.
180
181    Wait Until Keyword Succeeds  ${retry_time}  ${retry_interval}
182    ...  Wait Until Element Contains  ${xpath_display_server_power_status}
183    ...  ${obmc_expected_state}
184    Wait Until Keyword Succeeds  ${retry_time}  ${retry_interval}
185    ...  Verify OpenBMC State From REST Interface  ${obmc_expected_state}
186
187Verify OpenBMC State From REST Interface
188    [Documentation]  Verify system state from REST Interface.
189    [Arguments]  ${obmc_required_state}
190
191    # Description of argument(s):
192    # obmc_required_state      The OBMC state which is required for test.
193
194    ${obmc_current_state_REST}=  Get Host State
195    Should Be Equal  ${obmc_current_state_REST}  ${obmc_required_state}
196
197Click Yes Button
198    [Documentation]  Click the 'Yes' button.
199    [Arguments]  ${xpath_button_yes}
200
201    # Description of argument(s):
202    # xpath_button_yes      The xpath of 'Yes' button.
203
204    Click Button  ${xpath_button_yes}
205
206LogOut OpenBMC GUI
207    [Documentation]  Log out of OpenBMC GUI.
208    SSHLibrary.Close All Connections
209    # Passing direct id element "header" as an argument to Click Element.
210    Click Element  ${xpath_button_logout}
211    Wait Until Page Contains Element  ${xpath_button_login}
212
213Test Teardown Execution
214    [Documentation]  Do final closure activities of test case execution.
215    Rprint Pgm Footer
216    Print Dashes  0  100  1  =
217    Close Browser
218
219
220Open Browser With URL
221    [Documentation]  Open browser with specified URL and returns browser id.
222    [Arguments]  ${URL}  ${browser}=ff  ${mode}=${GUI_MODE}
223
224    # Description of argument(s):
225    # URL      Openbmc GUI URL to be open
226    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
227    # browser  Browser used to open above URL
228    #          (e.g. gc for google chrome, ff for firefox).
229    # mode     Browser opening mode(e.g. headless, header).
230
231    ${browser_ID}=  Run Keyword If  '${mode}' == 'headless'
232    ...  Launch Headless Browser  ${URL}  ${browser}
233    ...  ELSE  Open Browser  ${URL}  ${browser}
234
235    [Return]  ${browser_ID}
236
237
238Model Server Power Click Button
239    [Documentation]  Click main server power in the header section.
240    [Arguments]  ${div_element}  ${anchor_element}
241
242    # Description of argument(s):
243    # div_element     Server power header divisional element
244    #                 (e.g. header_wrapper.)
245    # anchor_element  Server power header anchor element
246    #                 (e.g. header_wrapper_elt.)
247
248    Wait Until Element Is Visible
249    ...  //*[@id='header__wrapper']/div/div[${div_element}]/a[${anchor_element}]/span
250    Click Element
251    ...  //*[@id='header__wrapper']/div/div[${div_element}]/a[${anchor_element}]/span
252
253Controller Server Power Click Button
254    [Documentation]  Click main server power in the header section.
255    [Arguments]  ${controller_element}
256
257    # Description of argument(s):
258    # controller_element  Server power controller element
259    #                     (e.g. power__power-on.)
260
261    Click Element  ${xpath_select_server_power}
262    Wait Until Element Is Visible  ${controller_element}
263    Page Should Contain Button  ${controller_element}
264    Click Element  ${controller_element}
265
266Controller Power Operations Confirmation Click Button
267    [Documentation]  Click Common Power Operations Confirmation.
268    [Arguments]  ${main_element}  ${sub_element}  ${confirm_msg_elt}  ${confirmation}
269
270    # Description of argument(s):
271    # main_element     Server power operations element
272    #                  (e.g. power_operations.)
273    # sub_element      Server power operations sub element
274    #                  (e.g. warm_boot, shut_down.)
275    # confirm_msg_elt  Server power operations confirm message element
276    #                  (e.g. confirm_msg.)
277    # confirmation     Server power operations confirmation
278    #                  (e.g. yes.)
279
280    ${element_path}=  Catenate  //*[@id='power-operations']/div[${main_element}]/div[${sub_element}]
281    ...  /confirm/div/div[${confirm_msg_elt}]/button[${confirmation}]
282    Click Element  ${element_path.replace(" ","")}
283
284
285GUI Power On
286    [Documentation]  Power on the host using GUI.
287
288    Model Server Power Click Button  ${header_wrapper}  ${header_wrapper_elt}
289    Page Should Contain  Attempts to power on the server
290    Controller Server Power Click Button  power__power-on
291    Page Should Contain  Running
292
293Verify Display Content
294    [Documentation]  Verify text content display.
295    [Arguments]  ${display_text}
296
297    # Description of argument(s):
298    # display_text   The text which is expected to be found on the web page.
299
300    Page Should Contain  ${display_text}
301
302Warm Reboot openBMC
303    [Documentation]  Warm reboot the OBMC system.
304
305    Log To Console  Warm Reboting the OpenBMC...
306    Click Element  ${xpath_select_button_warm_reboot}
307    Verify Warning Message Display Text  ${xpath_warm_reboot_warning_message}
308    ...  ${text_warm_reboot_warning_message}
309    Click Yes Button  ${xpath_select_button_warm_reboot_yes}
310    Wait OpenBMC To Become Stable  ${obmc_running_state}
311
312Click No Button
313    [Documentation]  Click the 'No' button.
314    [Arguments]  ${xpath_button_no}
315
316    # Description of argument(s):
317    # xpath_button_no      The xpath of 'No' button.
318
319    Click Button  ${xpath_button_no}
320
321Cold Reboot openBMC
322    [Documentation]  Cold reboot the OBMC system.
323
324    Log To Console  Cold Reboting the OpenBMC...
325    Click Element  ${xpath_select_button_cold_reboot}
326    Verify Warning Message Display Text  ${xpath_cold_reboot_warning_message}
327    ...  ${text_cold_reboot_warning_message}
328    Click Yes Button  ${xpath_select_button_cold_reboot_yes}
329    Wait OpenBMC To Become Stable  ${obmc_running_state}
330
331Orderly Shutdown OpenBMC
332    [Documentation]  Do orderly shutdown the OBMC system.
333
334    Log To Console  Orderly Shutdown the OpenBMC...
335    Click Element  ${xpath_select_button_orderly_shutdown}
336    Verify Warning Message Display Text  ${xpath_orderly_shutdown_warning_message}
337    ...  ${text_orderly_shutdown_warning_message}
338    Click Yes Button  ${xpath_select_button_orderly_shutdown_yes}
339    Wait OpenBMC To Become Stable  ${obmc_off_state}
340
341Immediate Shutdown openBMC
342    [Documentation]  Do immediate shutdown the OBMC system.
343
344    Log To Console  Immediate Shutdown the OpenBMC...
345    Click Element  ${xpath_select_button_immediate_shutdown}
346    Verify Warning Message Display Text
347    ...  ${xpath_immediate_shutdown_warning_message}
348    ...  ${text_immediate_shutdown_warning_message}
349    Click Yes Button  ${xpath_select_button_immediate_shutdown_yes}
350    Wait OpenBMC To Become Stable  ${obmc_off_state}
351
352Verify Warning Message Display Text
353    [Documentation]  Verify the warning message display text.
354    [Arguments]  ${xpath_text_message}  ${text_message}
355
356    # xpath_text_message  Xpath of warning message display.
357    # text_message        Content of the display message info.
358
359    Element Text Should Be  ${xpath_text_message}  ${text_message}
360
361
362Expected Initial Test State
363    [Documentation]  Power on the host if "Running" expected, Power off the
364    ...  host if "Off" expected as per the requirement of initial test state.
365    [Arguments]  ${expectedState}
366    # Description of argument(s):
367    # expectedState    Test initial host state.
368
369    Run Keyword If  '${expectedState}' == 'Running'
370    ...  REST Power On  stack_mode=skip  quiet=1
371
372    Run Keyword If  '${expectedState}' == 'Off'
373    ...  REST Power Off  stack_mode=skip  quiet=1
374
375Launch Browser And Login OpenBMC GUI
376    [Documentation]  Launch browser and log into openbmc GUI.
377
378    Open Browser With URL  ${obmc_gui_url}
379    Login OpenBMC GUI  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
380
381Logout And Close Browser
382    [Documentation]  Logout from openbmc application and close the browser.
383
384    Click Element  //*[text()='Log out']
385    Close Browser
386