xref: /openbmc/openbmc-test-automation/openpower/ext_interfaces/test_vmi.robot (revision bade11a2432921a471bf39131693dcc197a96084)
1 *** Settings ***
2 
3 Documentation    VMI static/dynamic IP config tests.
4 
5 Resource         ../../lib/external_intf/vmi_utils.robot
6 
7 Suite Setup       Suite Setup Execution
8 Test Teardown     FFDC On Test Case Fail
9 Suite Teardown    Suite Teardown Execution
10 
11 *** Variables ***
12 
13 # users           User Name               password
14 @{ADMIN}          admin_user              TestPwd123
15 @{OPERATOR}       operator_user           TestPwd123
16 @{ReadOnly}       readonly_user           TestPwd123
17 @{NoAccess}       noaccess_user           TestPwd123
18 &{USERS}          Administrator=${ADMIN}  Operator=${OPERATOR}  ReadOnly=${ReadOnly}
19 ...               NoAccess=${NoAccess}
20 
21 ${test_ipv4}              10.6.6.6
22 ${test_gateway}           10.6.6.1
23 ${test_netmask}           255.255.252.0
24 
25 &{DHCP_ENABLED}           DHCPEnabled=${${True}}
26 &{DHCP_DISABLED}          DHCPEnabled=${${False}}
27 
28 &{ENABLE_DHCP}            DHCPv4=&{DHCP_ENABLED}
29 &{DISABLE_DHCP}           DHCPv4=&{DHCP_DISABLED}
30 ${wait_time}              10s
31 
32 
33 *** Test Cases ***
34 
35 Verify All VMI EthernetInterfaces
36     [Documentation]  Verify all VMI ethernet interfaces.
37     [Tags]  Verify_All_VMI_EthernetInterfaces
38 
39     Verify VMI EthernetInterfaces
40 
41 
42 Verify Existing VMI Network Interface Details
43     [Documentation]  Verify existing VMI network interface details.
44     [Tags]  Verify_Existing_VMI_Network_Interface_Details
45 
46     ${vmi_ip}=  Get VMI Network Interface Details
47     ${origin}=  Set Variable If  ${vmi_ip["DHCPv4"]} == ${False}  Static  DHCP
48     Should Not Be Equal  ${vmi_ip["DHCPv4"]}  ${vmi_ip["IPv4StaticAddresses"]}
49     Should Be Equal As Strings  ${vmi_ip["Id"]}  ${ethernet_interface}
50     Should Be Equal As Strings  ${vmi_ip["Description"]}
51     ...  Hypervisor's Virtual Management Ethernet Interface
52     Should Be Equal As Strings  ${vmi_ip["Name"]}  Hypervisor Ethernet Interface
53     Should Be True  ${vmi_ip["InterfaceEnabled"]}
54     Run Keyword If   ${vmi_ip["IPv4StaticAddresses"]} != @{empty}
55     ...  Verify VMI Network Interface Details  ${vmi_ip["IPv4_Address"]}
56     ...  ${origin}  ${vmi_ip["IPv4_Gateway"]}  ${vmi_ip["IPv4_SubnetMask"]}
57 
58 
59 Delete Existing Static VMI IP Address
60     [Documentation]  Delete existing static VMI IP address.
61     [Tags]  Delete_Existing_Static_VMI_IP_Address
62 
63     ${curr_origin}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
64     Run Keyword If  ${curr_origin} == ${True}  Set VMI IPv4 Origin  ${False}  ${HTTP_ACCEPTED}
65 
66     Delete VMI IPv4 Address
67 
68 
69 Verify User Cannot Delete ReadOnly Property IPv4Addresses
70     [Documentation]  Verify user cannot delete readonly property IPv4Addresses.
71     [Tags]  Verify_User_Cannot_Delete_ReadOnly_Property_IPv4Addresses
72 
73     ${curr_origin}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
74     Run Keyword If  ${curr_origin} == ${True}  Set VMI IPv4 Origin  ${False}  ${HTTP_ACCEPTED}
75     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
76     Delete VMI IPv4 Address  IPv4Addresses  valid_status_code=${HTTP_FORBIDDEN}
77 
78 
79 Assign Valid And Invalid Static IPv4 Address To VMI
80     [Documentation]  Assign static IPv4 address to VMI.
81     [Tags]  Assign_Valid_And_Invalid_Static_IPv4_Address_To_VMI
82     [Template]  Set Static IPv4 Address To VMI And Verify
83     [Teardown]   Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
84 
85     # ip          gateway     netmask           valid_status_code
86     10.5.20.30    10.5.20.1     255.255.252.0    ${HTTP_ACCEPTED}
87     a.3.118.94    10.5.20.1     255.255.252.0    ${HTTP_BAD_REQUEST}
88     10.5.20       10.5.20.1     255.255.252.0    ${HTTP_BAD_REQUEST}
89     10.5.20.-5    10.5.20.1     255.255.252.0    ${HTTP_BAD_REQUEST}
90 
91 
92 Add Multiple IP Addresses On VMI Interface And Verify
93     [Documentation]  Add multiple IP addresses on VMI interface and verify.
94     [Tags]  Add_Multiple_IP_Addresses_On_VMI_Interface_And_Verify
95     [Teardown]   Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
96 
97     ${ip1}=  Create dictionary  Address=10.5.5.10  SubnetMask=255.255.252.0  Gateway=10.5.5.1
98     ${ip2}=  Create dictionary  Address=10.5.5.11  SubnetMask=255.255.252.0  Gateway=10.5.5.1
99     ${ip3}=  Create dictionary  Address=10.5.5.12  SubnetMask=255.255.252.0  Gateway=10.5.5.1
100     ${ips}=  Create List  ${ip1}  ${ip2}  ${ip3}
101 
102     Redfish.Patch  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
103     ...  body={'IPv4StaticAddresses':${ips}}  valid_status_codes=[${HTTP_BAD_REQUEST}]
104 
105 
106 Modify IP Addresses On VMI Interface And Verify
107     [Documentation]  Modify IP addresses on VMI interface and verify.
108     [Tags]  Modify_IP_Addresses_On_VMI_Interface_And_Verify
109     [Template]  Set Static IPv4 Address To VMI And Verify
110     [Teardown]   Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
111 
112     # ip        gateway       netmask        valid_status_code
113     10.5.5.10   10.5.5.1     255.255.252.0    ${HTTP_ACCEPTED}
114     10.5.5.11   10.5.5.1     255.255.252.0    ${HTTP_ACCEPTED}
115 
116 Switch Between IP Origins On VMI And Verify Details
117     [Documentation]  Switch between IP origins on VMI and verify details.
118     [Tags]  Switch_Between_IP_Origins_On_VMI_And_Verify_Details
119 
120     Switch VMI IPv4 Origin And Verify Details
121     Switch VMI IPv4 Origin And Verify Details
122 
123 
124 Verify Persistency Of VMI IPv4 Details After Host Reboot
125     [Documentation]  Verify persistency of VMI IPv4 details after host reboot.
126     [Tags]  Verify_Persistency_Of_VMI_IPv4_Details_After_Host_Reboot
127 
128     # Verifying persistency of dynamic address.
129     Set VMI IPv4 Origin  ${True}  ${HTTP_ACCEPTED}
130     Redfish Power Off  stack_mode=skip
131     Redfish Power On
132     ${default}=  Set Variable  0.0.0.0
133     Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
134 
135     # Verifying persistency of static address.
136     Switch VMI IPv4 Origin And Verify Details
137     Redfish Power Off  stack_mode=skip
138     Redfish Power On
139     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
140 
141 
142 Delete VMI Static IP Address And Verify
143     [Documentation]  Delete VMI static IP address and verify.
144     [Tags]  Delete_VMI_Static_IP_Address_And_Verify
145     [Teardown]  Test Teardown Execution
146 
147     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
148     Delete VMI IPv4 Address
149     ${resp}=  Redfish.Get
150     ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
151     Should Be Empty  ${resp.dict["IPv4Addresses"]}
152 
153 
154 Verify Successful VMI IP Static Configuration On HOST Boot After Session Delete
155     [Documentation]  Verify VMI IP static Configuration On HOST Boot After session deleted.
156     [Tags]  Verify_Successful_VMI_IP_Static_Configuration_On_HOST_Boot_After_Session_Delete
157     [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
158 
159     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
160 
161     ${session_info}=  Get Redfish Session Info
162     Redfish.Delete  ${session_info["location"]}
163 
164     # Create a new Redfish session
165     Redfish.Login
166     Redfish Power Off
167     Redfish Power On
168 
169     Verify VMI Network Interface Details  ${test_ipv4}  Static  ${test_gateway}  ${test_netmask}
170 
171 
172 Verify Persistency Of VMI DHCP IP Configuration After Multiple HOST Reboots
173     [Documentation]  Verify Persistency Of VMI DHCP IP configuration After Multiple HOST Reboots
174     [Tags]  Verify_Persistency_Of_VMI_DHCP_IP_Configuration_After_Multiple_HOST_Reboots
175     [Teardown]  Test Teardown Execution
176 
177     Set VMI IPv4 Origin  ${True}  ${HTTP_ACCEPTED}
178     ${vmi_ip_config}=  Get VMI Network Interface Details
179     # Verifying persistency of dynamic address after multiple reboots.
180     FOR  ${i}  IN RANGE  ${2}
181         Redfish Power Off
182         Redfish Power On
183         Verify VMI Network Interface Details  ${vmi_ip_config["IPv4_Address"]}  DHCP  ${vmi_ip_config["IPv4_Gateway"]}
184     ...  ${vmi_ip_config["IPv4_SubnetMask"]}
185     END
186 
187 
188 Enable DHCP When Static IP Configured And Verify Static IP
189     [Documentation]  Enable DHCP when static ip configured and verify static ip
190     [Tags]  Enable_DHCP_When_Static_IP_Configured_And_Verify_Static_IP
191     [Setup]  Redfish Power On
192     [Teardown]  Test Teardown Execution
193 
194     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
195     Set VMI IPv4 Origin  ${True}
196     ${vmi_network_conf}=  Get VMI Network Interface Details
197     Should Not Be Equal As Strings  ${test_ipv4}  ${vmi_network_conf["IPv4_Address"]}
198 
199 
200 Verify VMI Static IP Configuration Persist On BMC Reset Before Host Boot
201     [Documentation]  Verify VMI static IP configuration persist on BMC reset.
202     [Tags]   Verify_VMI_Static_IP_Configuration_Persist_On_BMC_Reset_Before_Host_Boot
203     [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  FFDC On Test Case Fail
204 
205     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
206     OBMC Reboot (off)
207     Redfish Power On
208     # Verifying the VMI static configuration
209     Verify VMI Network Interface Details  ${test_ipv4}  Static   ${test_gateway}  ${test_netmask}
210 
211 Add Static IP When Host Poweroff And Verify On Poweron
212     [Documentation]  Add Static IP When Host Poweroff And Verify on power on
213     [Tags]   Add_Static_IP_When_Host_Poweroff_And_Verify_On_Poweron
214     [Setup]  Redfish Power Off
215     [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  FFDC On Test Case Fail
216 
217     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
218     Redfish Power On
219     Verify VMI Network Interface Details  ${test_ipv4}  Static  ${test_gateway}  ${test_netmask}
220 
221 Add VMI Static IP When Host Poweroff And Verify Static IP On BMC Reset
222     [Documentation]  Add Static IP When Host Poweroff And Verify Static IP On BMC Reset.
223     [Tags]  Add_VMI_Static_IP_When_Host_Poweroff_And_Verify_Static_IP_On_BMC_Reset
224     [Setup]  Redfish Power Off
225     [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  FFDC On Test Case Fail
226 
227     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
228     OBMC Reboot (off)
229     Redfish Power On
230     Verify VMI Network Interface Details  ${test_ipv4}  Static  ${test_gateway}  ${test_netmask}
231 
232 Enable DHCP When No Static IP Configured And Verify DHCP IP
233     [Documentation]  Enable DHCP when no static ip configured and verify dhcp ip
234     [Tags]  Enable_DHCP_When_No_Static_IP_Configured_And_Verify_DHCP_IP
235     [Setup]  Run Keyword And Ignore Error  Delete VMI IPv4 Address
236     [Teardown]  Test Teardown Execution
237 
238     ${curr_origin}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
239     Run Keyword If  ${curr_origin} == ${False}  Set VMI IPv4 Origin  ${True}  ${HTTP_ACCEPTED}
240     ${vmi_ip_config}=  Get VMI Network Interface Details
241     Verify VMI Network Interface Details  ${vmi_ip_config["IPv4_Address"]}  DHCP  ${vmi_ip_config["IPv4_Gateway"]}
242     ...  ${vmi_ip_config["IPv4_SubnetMask"]}
243 
244 Verify User Cannot Delete VMI DHCP IP Address
245     [Documentation]  Verify user cannot delete VMI DHCP IP Address
246     [Tags]  Verify_User_Cannot_Delete_VMI_DHCP_IP_Address
247     [Setup]  Set VMI IPv4 Origin  ${True}
248     [Teardown]  Test Teardown Execution
249 
250     Delete VMI IPv4 Address  IPv4Addresses  valid_status_code=${HTTP_FORBIDDEN}
251     ${resp}=  Redfish.Get
252     ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
253     Should Not Be Empty  ${resp.dict["IPv4Addresses"]}
254 
255 Enable DHCP When Static IP Configured DHCP Server Unavailable And Verify IP
256     [Documentation]  Enable DHCP When Static IP Configured And DHCP Server Unavailable And Verify No IP.
257     [Tags]  Enable_DHCP_When_Static_IP_Configured_DHCP_Server_Unavailable_And_Verify_IP
258     [Teardown]  Test Teardown Execution
259 
260     Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
261     Set VMI IPv4 Origin  ${True}
262     ${default}=  Set Variable  0.0.0.0
263     Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
264 
265 
266 Verify To Configure VMI Static IP Address With Different User Roles
267     [Documentation]  Verify to configure vmi static ip address with different user roles.
268     [Tags]  Verify_To_Configure_VMI_Static_IP_Address_With_Different_User_Roles
269     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
270     [Template]  Config VMI Static IP Address Using Different Users
271     [Teardown]  Delete BMC Users Using Redfish
272 
273     # username     password    ip_address    gateway          nemask           valid_status_code
274     admin_user     TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_ACCEPTED}
275     operator_user  TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_FORBIDDEN}
276     readonly_user  TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_FORBIDDEN}
277     noaccess_user  TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_FORBIDDEN}
278 
279 
280 Verify To Delete VMI Static IP Address With Different User Roles
281     [Documentation]  Verify to delete vmi static IP address with different user roles.
282     [Tags]  Verify_To_Delete_VMI_Static_IP_Address_With_Different_User_Roles
283     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
284     [Template]  Delete VMI Static IP Address Using Different Users
285     [Teardown]  Delete BMC Users Using Redfish
286 
287     # username     password     valid_status_code
288     admin_user     TestPwd123   ${HTTP_ACCEPTED}
289     operator_user  TestPwd123   ${HTTP_FORBIDDEN}
290     readonly_user  TestPwd123   ${HTTP_FORBIDDEN}
291     noaccess_user  TestPwd123   ${HTTP_FORBIDDEN}
292 
293 
294 Verify To Update VMI Static IP Address With Different User Roles
295     [Documentation]  Verify to update vmi static IP address with different user roles.
296     [Tags]  Verify_To_Update_VMI_Static_IP_Address_With_Different_User_Roles
297     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
298     [Template]  Config VMI Static IP Address Using Different Users
299     [Teardown]  Delete BMC Users Using Redfish
300 
301     # username     password     ip_address  gateway    netmask       valid_status_code
302     admin_user     TestPwd123   10.5.10.20  10.5.10.1  255.255.0.0  ${HTTP_ACCEPTED}
303     operator_user  TestPwd123   10.5.10.30  10.5.10.1  255.255.0.0  ${HTTP_FORBIDDEN}
304     readonly_user  TestPwd123   10.5.20.40  10.5.20.1  255.255.0.0  ${HTTP_FORBIDDEN}
305     noaccess_user  TestPwd123   10.5.30.50  10.5.30.1  255.255.0.0  ${HTTP_FORBIDDEN}
306 
307 
308 Verify To Read VMI Network Configuration With Different User Roles
309     [Documentation]  Verify to read vmi network configuration with different user roles.
310     [Tags]  Verify_To_Read_VMI_Network_Configuration_With_Different_User_Roles
311     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
312     [Template]  Read VMI Static IP Address Using Different Users
313     [Teardown]  Delete BMC Users Using Redfish
314 
315     # username     password     valid_status_code
316     admin_user     TestPwd123   ${HTTP_OK}
317     operator_user  TestPwd123   ${HTTP_OK}
318     readonly_user  TestPwd123   ${HTTP_OK}
319     noaccess_user  TestPwd123   ${HTTP_FORBIDDEN}
320 
321 Enable DHCP On VMI Network Via Different Users Roles And Verify
322     [Documentation]  Enable DHCP On VMI Network Via Different Users Roles And Verify.
323     [Tags]  Enable_DHCP_On_VMI_Network_Via_Different_Users_Roles_And_Verify
324     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
325     [Template]  Update User Role And Set VMI IPv4 Origin
326     [Teardown]  Delete BMC Users Using Redfish
327 
328     # username     password     dhcp_enabled   valid_status_code
329     admin_user     TestPwd123   ${True}        ${HTTP_ACCEPTED}
330     operator_user  TestPwd123   ${True}        ${HTTP_FORBIDDEN}
331     readonly_user  TestPwd123   ${True}        ${HTTP_FORBIDDEN}
332     noaccess_user  TestPwd123   ${True}        ${HTTP_FORBIDDEN}
333 
334 Disable DHCP On VMI Network Via Different Users Roles And Verify
335     [Documentation]  Disable DHCP On VMI Network Via Different Users Roles And Verify.
336     [Tags]  Disable_DHCP_On_VMI_Network_Via_Different_Users_Roles_And_Verify
337     [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
338     [Template]  Update User Role And Set VMI IPv4 Origin
339     [Teardown]  Delete BMC Users Using Redfish
340 
341     # username     password     dhcp_enabled    valid_status_code
342     admin_user     TestPwd123   ${False}        ${HTTP_ACCEPTED}
343     operator_user  TestPwd123   ${False}        ${HTTP_FORBIDDEN}
344     readonly_user  TestPwd123   ${False}        ${HTTP_FORBIDDEN}
345     noaccess_user  TestPwd123   ${False}        ${HTTP_FORBIDDEN}
346 
347 
348 Enable And Disable DHCP And Verify
349     [Documentation]  verify enable DHCP and disable DHCP.
350     [Tags]  Enable_And_Disable_DHCP_And_Verify
351 
352     Set VMI IPv4 Origin  ${True}
353     ${default}=  Set Variable  0.0.0.0
354     Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
355     Set VMI IPv4 Origin  ${False}
356     ${vmi_ip}=  Get VMI Network Interface Details
357     Should Be Empty  ${vmi_ip["IPv4_Address"]}
358 
359 
360 Multiple Times Enable And Disable DHCP And Verify
361     [Documentation]  Enable and Disable DHCP in a loop and verify VMI gets an IP address from DHCP
362     ...  each time when DHCP is enabled
363     [Tags]  Multiple_Times_Enable_And_Disable_DHCP_And_Verify
364 
365     ${default}=  Set Variable  0.0.0.0
366     FOR  ${i}  IN RANGE  ${2}
367       Set VMI IPv4 Origin  ${True}
368       Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
369       Set VMI IPv4 Origin  ${False}
370       ${vmi_ip}=  Get VMI Network Interface Details
371       Should Be Empty  ${vmi_ip["IPv4_Address"]}
372     END
373 
374 
375 Assign Static IPv4 Address With Invalid Netmask To VMI
376     [Documentation]  Assign static IPv4 address with invalid netmask and expect error.
377     [Tags]  Assign_Static_IPv4_Address_With_Invalid_Netmask_To_VMI
378     [Template]  Set Static IPv4 Address To VMI And Verify
379 
380     # ip          gateway          netmask         valid_status_code
381     ${test_ipv4}  ${test_gateway}  255.256.255.0   ${HTTP_BAD_REQUEST}
382     ${test_ipv4}  ${test_gateway}  ff.ff.ff.ff     ${HTTP_BAD_REQUEST}
383     ${test_ipv4}  ${test_gateway}  255.255.253.0   ${HTTP_BAD_REQUEST}
384 
385 
386 Assign Static IPv4 Address With Invalid Gateway To VMI
387     [Documentation]  Add static IPv4 address with invalid gateway and expect error.
388     [Tags]  Assign_Static_IPv4_Address_With_Invalid_Gateway_To_VMI
389     [Template]  Set Static IPv4 Address To VMI And Verify
390 
391     # ip          gateway          netmask           valid_status_code
392     ${test_ipv4}  @@@.%%.44.11     ${test_netmask}   ${HTTP_BAD_REQUEST}
393     ${test_ipv4}  0xa.0xb.0xc.0xd  ${test_netmask}   ${HTTP_BAD_REQUEST}
394     ${test_ipv4}  10.3.36          ${test_netmask}   ${HTTP_BAD_REQUEST}
395     ${test_ipv4}  10.3.36.-10      ${test_netmask}   ${HTTP_BAD_REQUEST}
396 
397 
398 *** Keywords ***
399 
400 Suite Setup Execution
401     [Documentation]  Do test setup execution task.
402 
403     Redfish.Login
404     Redfish Power On
405     ${active_channel_config}=  Get Active Channel Config
406     Set Suite Variable   ${active_channel_config}
407     Set Suite Variable  ${ethernet_interface}  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
408     ${resp}=  Redfish.Get
409     ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
410     ${ip_resp}=  Evaluate  json.loads(r'''${resp.text}''')  json
411     ${length}=  Get Length  ${ip_resp["IPv4StaticAddresses"]}
412     ${vmi_network_conf}=  Run Keyword If  ${length} != ${0}  Get VMI Network Interface Details
413     Set Suite Variable  ${vmi_network_conf}
414 
415 
416 Test Teardown Execution
417     [Documentation]  Do test teardown execution task.
418 
419     FFDC On Test Case Fail
420     ${curr_mode}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
421     Run Keyword If  ${curr_mode} == ${True}  Set VMI IPv4 Origin  ${False}
422     Run Keyword If  ${vmi_network_conf} != ${None}
423     ...  Set Static IPv4 Address To VMI And Verify  ${vmi_network_conf["IPv4_Address"]}
424     ...  ${vmi_network_conf["IPv4_Gateway"]}  ${vmi_network_conf["IPv4_SubnetMask"]}
425 
426 
427 Get Immediate Child Parameter From VMI Network Interface
428     [Documentation]  Get immediate child parameter from VMI network interface.
429     [Arguments]  ${parameter}  ${valid_status_code}=${HTTP_OK}
430 
431     # Description of argument(s):
432     # parameter          parameter for which value is required. Ex: DHCPEnabled, MACAddress etc.
433     # valid_status_code  Expected valid status code from GET request.
434 
435     ${resp}=  Redfish.Get
436     ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
437     ...  valid_status_codes=[${valid_status_code}]
438 
439     ${ip_resp}=  Evaluate  json.loads(r'''${resp.text}''')  json
440     ${value}=  Set Variable If  '${parameter}' != 'DHCPEnabled'   ${ip_resp["${parameter}"]}
441     ...  ${ip_resp["DHCPv4"]["${parameter}"]}
442 
443     [Return]  ${value}
444 
445 
446 Switch VMI IPv4 Origin And Verify Details
447     [Documentation]  Switch VMI IPv4 origin and verify details.
448 
449     ${dhcp_mode_before}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
450     ${dhcp_enabled}=  Set Variable If  ${dhcp_mode_before} == ${False}  ${True}  ${False}
451 
452     ${default}=  Set Variable  0.0.0.0
453     ${origin}=  Set Variable If  ${dhcp_mode_before} == ${False}  DHCP  Static
454     Set VMI IPv4 Origin  ${dhcp_enabled}  ${HTTP_ACCEPTED}
455 
456     ${dhcp_mode_after}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
457     Should Not Be Equal  ${dhcp_mode_before}  ${dhcp_mode_after}
458 
459     Run Keyword If  ${dhcp_mode_after} == ${True}
460     ...  Verify VMI Network Interface Details  ${default}  ${origin}  ${default}  ${default}
461 
462 
463 Delete VMI Static IP Address Using Different Users
464     [Documentation]  Update user role and delete vmi static IP address.
465     [Arguments]  ${username}  ${password}  ${valid_status_code}
466     [Teardown]  Run Keywords  Redfish.Login  AND
467     ...  Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}
468     ...  ${test_netmask}  ${HTTP_ACCEPTED}  AND  Redfish.Logout
469 
470     # Description of argument(s):
471     # username            The host username.
472     # password            The host password.
473     # valid_status_code   The expected valid status code.
474 
475     Redfish.Login  ${username}  ${password}
476     Delete VMI IPv4 Address  delete_param=IPv4StaticAddresses  valid_status_code=${valid_status_code}
477 
478 
479 Config VMI Static IP Address Using Different Users
480    [Documentation]  Update user role and update vmi static ip address.
481    [Arguments]  ${username}  ${password}  ${ip}  ${gateway}  ${netmask}
482    ...  ${valid_status_code}
483 
484     # Description of argument(s):
485     # username            The host username.
486     # password            The host password.
487     # ip                  IP address to be added (e.g. "10.7.7.7").
488     # subnet_mask         Subnet mask for the IP to be added
489     #                     (e.g. "255.255.0.0").
490     # gateway             Gateway for the IP to be added (e.g. "10.7.7.1").
491     # valid_status_code   The expected valid status code.
492 
493     Redfish.Login  ${username}  ${password}
494     Set Static IPv4 Address To VMI And Verify  ${ip}  ${gateway}  ${netmask}  ${valid_status_code}
495 
496 
497 Read VMI Static IP Address Using Different Users
498    [Documentation]  Update user role and read vmi static ip address.
499    [Arguments]  ${username}  ${password}  ${valid_status_code}
500 
501     # Description of argument(s):
502     # username            The host username.
503     # password            The host password.
504     # valid_status_code   The expected valid status code.
505 
506     Redfish.Login  ${username}  ${password}
507     Redfish.Get
508     ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
509     ...  valid_status_codes=[${valid_status_code}]
510 
511 
512 Delete BMC Users Using Redfish
513    [Documentation]  Delete BMC users via redfish.
514 
515    Redfish.Login
516    Delete BMC Users Via Redfish  users=${USERS}
517 
518 
519 Update User Role And Set VMI IPv4 Origin
520     [Documentation]  Update User Role And Set VMI IPv4 Origin.
521     [Arguments]  ${username}  ${password}  ${dhcp_enabled}  ${valid_status_code}
522 
523     # Description of argument(s):
524     # username            The host username.
525     # password            The host password.
526     # dhcp_enabled        Indicates whether dhcp should be enabled
527     #                     (${True}, ${False}).
528     # valid_status_code   The expected valid status code.
529 
530     Redfish.Login  ${username}  ${password}
531     Set VMI IPv4 Origin  ${dhcp_enabled}  ${valid_status_code}
532 
533 
534 Suite Teardown Execution
535     [Documentation]  Do suite teardown execution task.
536 
537     Run Keyword If  ${vmi_network_conf} != ${None}
538     ...  Set Static IPv4 Address To VMI And Verify  ${vmi_network_conf["IPv4_Address"]}
539     ...  ${vmi_network_conf["IPv4_Gateway"]}  ${vmi_network_conf["IPv4_SubnetMask"]}
540     Delete All Redfish Sessions
541     Redfish.Logout
542