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