1*** Settings ***
2
3Documentation   Test OpenBMC GUI "Network" sub-menu of "Settings".
4
5Resource        ../../lib/gui_resource.robot
6Resource        ../../../lib/bmc_network_utils.robot
7
8Suite Setup     Suite Setup Execution
9Suite Teardown  Close Browser
10
11
12*** Variables ***
13
14${xpath_network_heading}                 //h1[text()="Network"]
15${xpath_interface_settings}              //h2[text()="Interface settings"]
16${xpath_network_settings}                //h2[text()="Network settings"]
17${xpath_static_ipv4}                     //h2[text()="IPv4"]
18${xpath_static_dns}                      //h2[text()="Static DNS"]
19${xpath_domain_name_toggle}              //*[@data-test-id="networkSettings-switch-useDomainName"]
20${xpath_dns_servers_toggle}              //*[@data-test-id="networkSettings-switch-useDns"]
21${xpath_ntp_servers_toggle}              //*[@data-test-id="networkSettings-switch-useNtp"]
22${xpath_add_static_ipv4_address_button}  //button[contains(text(),"Add static IPv4 address")]
23${xpath_add_dns_ip_address_button}       //button[contains(text(),"Add IP address")]
24${xpath_hostname}                        //*[@title="Edit hostname"]
25${xpath_hostname_input}                  //*[@id="hostname"]
26${xpath_input_ip_address}                //*[@id="ipAddress"]
27${xpath_input_gateway}                   //*[@id="gateway"]
28${xpath_input_subnetmask}                //*[@id="subnetMask"]
29${xpath_input_static_dns}                //*[@id="staticDns"]
30${xpath_cancel_button}                   //button[contains(text(),'Cancel')]
31${xpath_delete_dns_server}               //*[@title="Delete DNS address"]
32
33${dns_server}                            10.10.10.10
34${test_ipv4_addr}                        10.7.7.7
35${test_ipv4_addr_1}                      10.7.7.8
36${out_of_range_ip}                       10.7.7.256
37${string_ip}                             aa.bb.cc.dd
38${negative_ip}                           10.-7.-7.-7
39${less_octet_ip}                         10.3.36
40${hex_ip}                                0xa.0xb.0xc.0xd
41${spl_char_ip}                           @@@.%%.44.11
42${test_subnet_mask}                      255.255.0.0
43${alpha_netmask}                         ff.ff.ff.ff
44${out_of_range_netmask}                  255.256.255.0
45${more_byte_netmask}                     255.255.255.0.0
46${lowest_netmask}                        128.0.0.0
47${test_hostname}                         openbmc
48
49*** Test Cases ***
50
51Verify Navigation To Network Page
52    [Documentation]  Login to GUI and navigate to the settings sub-menu network page.
53    [Tags]  Verify_Navigation_To_Network_Page
54
55    Page Should Contain Element  ${xpath_network_heading}
56
57
58Verify Existence Of All Sections In Network Page
59    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
60    ...  and confirm the page contains sections that should be accessible.
61    [Tags]  Verify_Existence_Of_All_Sections_In_Network_Page
62
63    Wait Until Page Contains Element  ${xpath_network_settings}  timeout=1min
64    Page Should Contain Element  ${xpath_interface_settings}
65    Page Should Contain Element  ${xpath_static_ipv4}
66    Page Should Contain Element  ${xpath_static_dns}
67
68
69Verify Existence Of All Buttons In Network Page
70    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
71    ...  and confirm the page contains basic features button that should be accessible.
72    [Tags]  Verify_Existence_Of_All_Buttons_In_Network_Page
73
74    Page Should Contain Button  ${xpath_add_static_ipv4_address_button}
75    Page Should Contain Button  ${xpath_add_dns_ip_address_button}
76    Page Should Contain Button  ${xpath_domain_name_toggle}
77    Page Should Contain Button  ${xpath_dns_servers_toggle}
78    Page Should Contain Button  ${xpath_ntp_servers_toggle}
79
80
81Verify Existence Of All Fields In Hostname
82    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
83    ...  and confirm hostname contains all the fields.
84    [Tags]  Verify_Existence_Of_All_Fields_In_Hostname
85    [Teardown]  Run Keywords  Click Button  ${xpath_cancel_button}  AND
86    ...  Wait Until Keyword Succeeds  10 sec  5 sec
87    ...  Refresh GUI And Verify Element Value  ${xpath_network_heading}  Network
88
89    Click Element  ${xpath_hostname}
90    Wait Until Page Contains  Edit hostname  timeout=1min
91    Page Should Contain Textfield  ${xpath_hostname_input}
92    Page Should Contain Button  ${xpath_cancel_button}
93    Page Should Contain Button  ${xpath_add_button}
94
95
96Verify Existence Of All Fields In Static IP Address
97    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
98    ...  and confirm section static IPv4 contains all the fields.
99    [Tags]  Verify_Existence_Of_All_Fields_In_Static_IP_Address
100    [Teardown]  Run Keywords  Click Button  ${xpath_cancel_button}  AND
101    ...  Wait Until Keyword Succeeds  10 sec  5 sec
102    ...  Refresh GUI And Verify Element Value  ${xpath_network_heading}  Network
103
104    Wait Until Keyword Succeeds  30 sec  10 sec  Click Element  ${xpath_add_static_ipv4_address_button}
105    Wait Until Page Contains  Add static IPv4 address  timeout=15s
106    Page Should Contain Textfield  ${xpath_input_ip_address}
107    Page Should Contain Textfield  ${xpath_input_gateway}
108    Page Should Contain Textfield  ${xpath_input_subnetmask}
109    Page Should Contain Button  ${xpath_cancel_button}
110    Page Should Contain Button  ${xpath_add_button}
111
112
113Verify Existence Of All Fields In Static DNS
114    [Documentation]  Login to GUI and navigate to the settings sub-menu network page
115    ...  and confirm section static DNS contains all the fields.
116    [Tags]  Verify_Existence_Of_All_Fields_In_Static_DNS
117    [Teardown]  Run Keywords  Click Button  ${xpath_cancel_button}  AND
118    ...  Wait Until Keyword Succeeds  10 sec  5 sec
119    ...  Refresh GUI And Verify Element Value  ${xpath_network_heading}  Network
120
121    Wait Until Keyword Succeeds  30 sec  10 sec  Click Element  ${xpath_add_dns_ip_address_button}
122    Wait Until Page Contains  Add IP address  timeout=11s
123    Page Should Contain Textfield  ${xpath_input_static_dns}
124    Page Should Contain Button  ${xpath_cancel_button}
125    Page Should Contain Button  ${xpath_add_button}
126
127
128Configure And Verify DNS Server Via GUI
129    [Documentation]  Login to GUI Network page, add DNS server IP
130    ...  and verify that the page reflects server IP.
131    [Tags]  Configure_And_Verify_DNS_Server_Via_GUI
132    [Teardown]  Delete DNS Servers And Verify
133
134    Add DNS Servers And Verify  ${dns_server}
135
136
137Configure Static IPv4 Netmask Via GUI And Verify
138    [Documentation]  Login to GUI Network page, configure static IPv4 netmask and verify.
139    [Tags]  Configure_Static_IPv4_Netmask_Via_GUI_And_Verify
140    [Template]  Add Static IP Address And Verify
141
142    # ip_addresses      subnet_masks             gateway          expected_status
143    ${test_ipv4_addr}   ${lowest_netmask}        ${default_gateway}  Success
144    ${test_ipv4_addr}   ${more_byte_netmask}     ${default_gateway}  Invalid format
145    ${test_ipv4_addr}   ${alpha_netmask}         ${default_gateway}  Invalid format
146    ${test_ipv4_addr}   ${out_of_range_netmask}  ${default_gateway}  Invalid format
147    ${test_ipv4_addr}   ${test_subnet_mask}      ${default_gateway}  Success
148
149
150Configure Hostname Via GUI And Verify
151    [Documentation]  Login to GUI Network page, configure hostname and verify.
152    [Tags]  Configure_Hostname_Via_GUI_And_Verify
153    [Teardown]  Configure And Verify Network Settings Via GUI
154    ...  ${xpath_hostname}  ${xpath_hostname_input}  ${hostname}
155
156    ${hostname}=  Get BMC Hostname
157    Configure And Verify Network Settings Via GUI  ${xpath_hostname}
158    ...  ${xpath_hostname_input}  ${test_hostname}
159
160    ${bmc_hostname}=  Get BMC Hostname
161    Should Be Equal As Strings  ${bmc_hostname}  ${test_hostname}
162
163
164Configure And Verify Static IP Address
165    [Documentation]  Login to GUI Network page, configure static ip address and verify.
166    [Tags]  Configure_And_Verify_Static_IP_Address
167
168    Add Static IP Address And Verify  ${test_ipv4_addr}  ${test_subnet_mask}  ${default_gateway}  Success
169
170
171Configure And Verify Multiple Static IP Address
172    [Documentation]  Login to GUI Network page, configure multiple static IP address and verify.
173    [Tags]  Configure_And_Verify_Multiple_Static_IP_Address
174
175    Add Static IP Address And Verify  ${test_ipv4_addr}  ${test_subnet_mask}  ${default_gateway}  Success
176    Add Static IP Address And Verify  ${test_ipv4_addr_1}  ${test_subnet_mask}  ${default_gateway}  Success
177
178
179Configure And Verify Invalid Static IP Address
180    [Documentation]  Login to GUI Network page, configure invalid static IP address and verify.
181    [Tags]  Configure_And_Verify_Invalid_Static_IP_Address
182    [Template]  Add Static IP Address And Verify
183
184    # ip                 subnet_mask          gateway             status
185    ${out_of_range_ip}   ${test_subnet_mask}  ${default_gateway}  Invalid format
186    ${less_octet_ip}     ${test_subnet_mask}  ${default_gateway}  Invalid format
187    ${string_ip}         ${test_subnet_mask}  ${default_gateway}  Invalid format
188    ${negative_ip}       ${test_subnet_mask}  ${default_gateway}  Invalid format
189    ${hex_ip}            ${test_subnet_mask}  ${default_gateway}  Invalid format
190    ${spl_char_ip}       ${test_subnet_mask}  ${default_gateway}  Invalid format
191
192*** Keywords ***
193
194Suite Setup Execution
195    [Documentation]  Do suite setup tasks.
196
197    Launch Browser And Login GUI
198    Wait Until Keyword Succeeds  1 min  15 sec
199    ...  Click Element  ${xpath_settings_menu}
200    Click Element  ${xpath_network_sub_menu}
201    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  network
202    Wait Until Element Is Not Visible   ${xpath_page_loading_progress_bar}  timeout=30
203    ${default_gateway}=  Get BMC Default Gateway
204    Set Suite Variable  ${default_gateway}
205
206
207Add DNS Servers And Verify
208    [Documentation]  Login to GUI Network page,add DNS server on BMC
209    ...  and verify it via BMC CLI.
210    [Arguments]  ${dns_server}   ${expected_status}=Valid format
211
212    # Description of the argument(s):
213    # dns_server           A list of static name server IPs to be
214    #                      configured on the BMC.
215    # expected_status      Expected status while adding DNS server address
216    # ...                  (e.g. Invalid format / Field required).
217
218    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=15sec
219
220    Click Button  ${xpath_add_dns_ip_address_button}
221    Input Text  ${xpath_input_static_dns}  ${dns_server}
222    Click Button  ${xpath_add_button}
223    Run keyword if  '${expected_status}' != 'Valid format'
224    ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword
225
226    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=10sec
227    Wait Until Page Contains  ${dns_server}  timeout=40sec
228
229    # Check if newly added DNS server is configured on BMC.
230    ${cli_name_servers}=  CLI Get Nameservers
231    ${cmd_status}=  Run Keyword And Return Status
232    ...  List Should Contain Sub List  ${cli_name_servers}  ${dns_server}
233
234
235Delete DNS Servers And Verify
236    [Documentation]  Login to GUI Network page,delete static name servers
237    ...  and verify that page does not reflect static name servers.
238
239    Page Should Contain Element  ${xpath_delete_dns_server}
240    Wait Until Element Is Enabled  ${xpath_delete_dns_server}
241    Click Button  ${xpath_delete_dns_server}
242    Wait Until Page Contains Element  ${xpath_add_dns_ip_address_button}  timeout=15
243    # Check if all name servers deleted on BMC.
244    ${nameservers}=  CLI Get Nameservers
245    Should Be Empty  ${nameservers}
246
247
248Add Static IP Address And Verify
249    [Documentation]  Add static IP address, subnet mask and
250    ...  gateway via GUI and verify.
251    [Arguments]  ${ip_address}  ${subnet_mask}  ${gateway_address}  ${expected_status}=error
252
253    # Description of argument(s):
254    # ip_address          IP address to be added (e.g. 10.7.7.7).
255    # subnet_mask         Subnet mask for the IP to be added (e.g. 255.255.0.0).
256    # gateway_address     Gateway address for the IP to be added (e.g. 10.7.7.1).
257    # expected_status     Expected status while adding static ipv4 address
258    # ....                (e.g. Invalid format / Field required).
259
260    Wait Until Keyword Succeeds  30 sec  10 sec  Click Element  ${xpath_add_static_ipv4_address_button}
261
262    Input Text  ${xpath_input_ip_address}  ${ip_address}
263    Input Text  ${xpath_input_subnetmask}  ${subnet_mask}
264    Input Text  ${xpath_input_gateway}  ${gateway_address}
265
266    Click Element  ${xpath_add_button}
267    Run Keyword If  '${expected_status}' == 'Success'
268    ...  Run Keywords  Wait Until Page Contains  ${ip_address}  timeout=40sec
269    ...  AND  Validate Network Config On BMC
270
271    ...  ELSE IF  '${expected_status}' == 'Invalid format'
272    ...  Run Keywords  Page Should Contain  Invalid format  AND
273    ...  Click Button  ${xpath_cancel_button}
274
275
276Configure And Verify Network Settings Via GUI
277    [Documentation]  Configure and verify network settings via GUI.
278    [Arguments]  ${xpath_nw_settings}  ${xpath_nw_settings_input_field}  ${input_value}
279
280    # Description of argument(s):
281    # xpath_nw_settings               xpath of the network settings.
282    # xpath_nw_settings_input_field   xpath of the network setting's input field.
283    # input_value                     Input value for configuration. E.g. hostname, IP etc.
284
285    Wait Until Keyword Succeeds  30 sec  10 sec  Click Element  ${xpath_nw_settings}
286    Input Text  ${xpath_nw_settings_input_field}  ${input_value}
287    Click Button  ${xpath_add_button}
288    Wait Until Page Contains  ${input_value}  timeout=30sec
289