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