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${obmc_gui_url}              https://${OPENBMC_HOST}
13
14# Default GUI browser and mode is set to "Firefox" and "headless"
15# respectively here.
16${GUI_BROWSER}               ff
17${GUI_MODE}                  headless
18
19
20*** Keywords ***
21
22Open Browser With URL
23    [Documentation]  Open browser with specified URL and returns browser id.
24    [Arguments]  ${URL}  ${browser}=ff  ${mode}=${GUI_MODE}
25
26    # Description of argument(s):
27    # URL      Openbmc GUI URL to be open
28    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
29    # browser  Browser used to open above URL
30    #          (e.g. gc for google chrome, ff for firefox).
31    # mode     Browser opening mode(e.g. headless, header).
32
33    ${browser_ID}=  Run Keyword If  '${mode}' == 'headless'
34    ...  Launch Headless Browser  ${URL}  ${browser}
35    ...  ELSE  Open Browser  ${URL}  ${browser}
36
37    [Return]  ${browser_ID}
38
39
40Launch Header Browser
41    [Documentation]  Open the browser with the URL and
42    ...              login on windows platform.
43    [Arguments]  ${browser_type}=${GUI_BROWSER}
44
45    # Description of argument(s):
46    # browser_type  Type of browser (e.g. "firefox", "chrome", etc.).
47
48    ${BROWSER_ID}=  Open Browser  ${obmc_gui_url}  ${browser_type}
49    Maximize Browser Window
50    Set Global Variable  ${BROWSER_ID}
51
52
53Launch Headless Browser
54    [Documentation]  Launch headless browser.
55    [Arguments]  ${URL}=${obmc_gui_url}  ${browser}=${GUI_BROWSER}
56
57    # Description of argument(s):
58    # URL      Openbmc GUI URL to be open
59    #          (e.g. https://openbmc-test.mybluemix.net/#/login).
60    # browser  Browser to open given URL in headless way
61    #          (e.g. gc for google chrome, ff for firefox).
62
63    Start Virtual Display
64    ${browser_ID}=  Open Browser  ${URL}
65    Set Window Size  1920  1080
66
67    [Return]  ${browser_ID}
68
69
70Launch Browser And Login GUI
71    [Documentation]  Launch browser and login to OpenBMC GUI, retry 2 attempts
72    ...              in 1 minute time.
73
74    Wait Until Keyword Succeeds  130 sec   65 sec  Retry Browser Login Attempts
75
76
77Retry Browser Login Attempts
78    [Documentation]  Launch browser and login to OpenBMC GUI.
79
80    Open Browser With URL  ${obmc_gui_url}
81    Login GUI  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
82
83
84Login GUI
85    [Documentation]  Login to OpenBMC GUI.
86    [Arguments]  ${username}=${OPENBMC_USERNAME}  ${password}=${OPENBMC_PASSWORD}
87
88    # Description of argument(s):
89    # username  The username to be used for login.
90    # password  The password to be used for login.
91
92    Go To  ${obmc_gui_url}
93    Wait Until Element Is Enabled  ${xpath_textbox_username}
94    Input Text  ${xpath_textbox_username}  ${username}
95    Input Password  ${xpath_textbox_password}  ${password}
96    Click Element  ${xpath_login_button}
97    Wait Until Page Contains  Overview  timeout=60s
98
99
100Logout GUI
101    [Documentation]  Logout of OpenBMC GUI.
102
103    Click Element  ${xpath_root_button_menu}
104    Click Element  ${xpath_logout_button}
105    Wait Until Page Contains Element  ${xpath_login_button}
106
107
108Generate Test Error Log
109    [Documentation]  Generate test error log.
110
111    BMC Execute Command  ${CMD_UNRECOVERABLE_ERROR}
112
113
114Set Timezone In Profile Settings Page
115    [Documentation]  Set the given timezone in profile settings page.
116    [Arguments]  ${timezone}=Default
117
118    # Description of argument(s):
119    # timezone  Timezone to select (eg. Default or Browser_offset).
120
121    Wait Until Page Contains Element  ${xpath_root_button_menu}
122    Click Element  ${xpath_root_button_menu}
123    Click Element  ${xpath_profile_settings}
124    Click Element At Coordinates  ${xpath_default_UTC}  0  0
125    Click Element  ${xpath_profile_save_button}
126
127
128Refresh GUI
129    [Documentation]  Refresh GUI via refresh button in header.
130
131    Click Element  ${xpath_refresh_button}
132    # Added delay for page to load fully after refresh.
133    Sleep  5s
134
135
136Refresh GUI And Verify Element Value
137    [Documentation]  Refresh GUI using refresh button and verify that given element contains expected value.
138    [Arguments]  ${element}  ${expected_value}
139
140    # Description of argument(s):
141    # element         Element whose value need to be checked.
142    # expected_value  Expected value of for the given element.
143
144    # Refresh GUI.
145
146    Click Element  ${xpath_refresh_button}
147
148    # Check element value and verify that it contains expected value.
149    ${element_value}=  Get Text  ${element}
150    Log  ${element_value}
151    Should Contain  ${element_value}  ${expected_value}
152
153
154Reboot BMC via GUI
155    [Documentation]  Reboot BMC via GUI.
156
157    Click Element  ${xpath_operations_menu}
158    Click Element  ${xpath_reboot_bmc_sub_menu}
159    Click Button  ${xpath_reboot_bmc_button}
160    Wait Until Keyword Succeeds  30 sec  10 sec  Click Button  ${xpath_confirm_bmc_reboot}
161    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Unpingable
162    Wait For Host To Ping  ${OPENBMC_HOST}  1 min
163
164
165Add DNS Servers And Verify
166    [Documentation]  Login to GUI Network page,add DNS server on BMC
167    ...  and verify it via BMC CLI.
168    [Arguments]  ${dns_server}   ${expected_status}=Valid format
169
170    # Description of the argument(s):
171    # dns_server           A list of static name server IPs to be
172    #                      configured on the BMC.
173    # expected_status      Expected status while adding DNS server address
174    #                      (e.g. Invalid format / Field required).
175
176    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=15sec
177
178    Click Button  ${xpath_add_dns_ip_address_button}
179    Input Text  ${xpath_input_static_dns}  ${dns_server}
180    Click Button  ${xpath_add_button}
181    Run keyword if  '${expected_status}' != 'Valid format'
182    ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword
183
184    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=10sec
185    Wait Until Page Contains  ${dns_server}  timeout=40sec
186
187    # Check if newly added DNS server is configured on BMC.
188    ${cli_name_servers}=  CLI Get Nameservers
189    ${cmd_status}=  Run Keyword And Return Status
190    ...  List Should Contain Sub List  ${cli_name_servers}  ${dns_server}
191