xref: /openbmc/openbmc-test-automation/openpower/ext_interfaces/test_vmi.robot (revision 28d794b8d8c3a824514f56b102a769ba1ab31554)
1*** Settings ***
2
3Documentation     VMI static/dynamic IP config tests.
4
5Resource          ../../lib/external_intf/vmi_utils.robot
6
7Suite Setup       Suite Setup Execution
8Test Teardown     FFDC On Test Case Fail
9Suite Teardown    Run Keyword And Ignore Error  Suite Teardown Execution
10
11Test Tags        Vmi
12
13*** Variables ***
14
15# users           User Name               password
16@{ADMIN}          admin_user              TestPwd123
17@{OPERATOR}       operator_user           TestPwd123
18@{ReadOnly}       readonly_user           TestPwd123
19&{USERS}          Administrator=${ADMIN}  ReadOnly=${ReadOnly}
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
31&{SLAAC_ENABLED}          IPv6AutoConfigEnabled=${True}
32&{SLAAC_DISABLED}         IPv6AutoConfigEnabled=${False}
33
34&{ENABLE_SLAAC}           StatelessAddressAutoConfig=&{SLAAC_ENABLED}
35&{DISABLE_SLAAC}          StatelessAddressAutoConfig=&{SLAAC_DISABLED}
36
37&{DHCPv6_ENABLED}         OperatingMode=Enabled
38&{DHCPv6_DISABLED}        OperatingMode=Disabled
39
40&{ENABLE_DHCPv6}          DHCPv6=&{DHCPv6_ENABLED}
41&{DISABLE_DHCPv6}         DHCPv6=&{DHCPv6_DISABLED}
42
43${default}                0.0.0.0
44${default_ipv6addr}       ::
45${prefix_length}          64
46
47
48*** Test Cases ***
49
50Verify All VMI EthernetInterfaces
51    [Documentation]  Verify all VMI ethernet interfaces.
52    [Tags]  Verify_All_VMI_EthernetInterfaces
53
54    Verify VMI EthernetInterfaces
55
56
57Verify Existing VMI Network Interface Details
58    [Documentation]  Verify existing VMI network interface details.
59    [Tags]  Verify_Existing_VMI_Network_Interface_Details
60
61    ${vmi_ip}=  Get VMI Network Interface Details
62    ${origin}=  Set Variable If  ${vmi_ip["DHCPv4"]} == ${False}  Static  DHCP
63    Should Not Be Equal  ${vmi_ip["DHCPv4"]}  ${vmi_ip["IPv4StaticAddresses"]}
64    Should Be Equal As Strings  ${vmi_ip["Id"]}  ${ethernet_interface}
65    Should Be Equal As Strings  ${vmi_ip["Description"]}
66    ...  Hypervisor's Virtual Management Ethernet Interface
67    Should Be Equal As Strings  ${vmi_ip["Name"]}  Hypervisor Ethernet Interface
68    Run Keyword If   ${vmi_ip["IPv4StaticAddresses"]} != @{empty}
69    ...  Verify VMI Network Interface Details  ${vmi_ip["IPv4_Address"]}
70    ...  ${origin}  ${vmi_ip["IPv4_Gateway"]}  ${vmi_ip["IPv4_SubnetMask"]}
71
72
73Delete Existing Static VMI IP Address
74    [Documentation]  Delete existing static VMI IP address.
75    [Tags]  Delete_Existing_Static_VMI_IP_Address
76
77    ${curr_origin}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
78    Run Keyword If  ${curr_origin} == ${True}  Set VMI IPv4 Origin  ${False}  ${HTTP_ACCEPTED}
79
80    Delete VMI IPv4 Address
81
82
83Verify User Cannot Delete ReadOnly Property IPv4Addresses
84    [Documentation]  Verify user cannot delete readonly property IPv4Addresses.
85    [Tags]  Verify_User_Cannot_Delete_ReadOnly_Property_IPv4Addresses
86
87    ${curr_origin}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
88    Run Keyword If  ${curr_origin} == ${True}  Set VMI IPv4 Origin  ${False}  ${HTTP_ACCEPTED}
89    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
90    Delete VMI IPv4 Address  IPv4Addresses  valid_status_code=${HTTP_FORBIDDEN}
91
92
93Assign Valid And Invalid Static IPv4 Address To VMI
94    [Documentation]  Assign static IPv4 address to VMI.
95    [Tags]  Assign_Valid_And_Invalid_Static_IPv4_Address_To_VMI
96    [Template]  Set Static IPv4 Address To VMI And Verify
97    [Teardown]   Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
98
99    # ip          gateway     netmask           valid_status_code
100    10.5.20.30    10.5.20.1     255.255.252.0    ${HTTP_ACCEPTED}
101    a.3.118.94    10.5.20.1     255.255.252.0    ${HTTP_BAD_REQUEST}
102    10.5.20       10.5.20.1     255.255.252.0    ${HTTP_BAD_REQUEST}
103    10.5.20.-5    10.5.20.1     255.255.252.0    ${HTTP_BAD_REQUEST}
104
105
106Add Multiple IP Addresses On VMI Interface And Verify
107    [Documentation]  Add multiple IP addresses on VMI interface and verify.
108    [Tags]  Add_Multiple_IP_Addresses_On_VMI_Interface_And_Verify
109    [Teardown]   Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
110
111    ${ip1}=  Create dictionary  Address=10.5.5.10  SubnetMask=255.255.252.0  Gateway=10.5.5.1
112    ${ip2}=  Create dictionary  Address=10.5.5.11  SubnetMask=255.255.252.0  Gateway=10.5.5.1
113    ${ip3}=  Create dictionary  Address=10.5.5.12  SubnetMask=255.255.252.0  Gateway=10.5.5.1
114    ${ips}=  Create List  ${ip1}  ${ip2}  ${ip3}
115
116    Redfish.Patch  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
117    ...  body={'IPv4StaticAddresses':${ips}}  valid_status_codes=[${HTTP_BAD_REQUEST}]
118
119
120Modify IP Addresses On VMI Interface And Verify
121    [Documentation]  Modify IP addresses on VMI interface and verify.
122    [Tags]  Modify_IP_Addresses_On_VMI_Interface_And_Verify
123    [Template]  Set Static IPv4 Address To VMI And Verify
124    [Teardown]   Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
125
126    # ip        gateway       netmask        valid_status_code
127    10.5.5.10   10.5.5.1     255.255.252.0    ${HTTP_ACCEPTED}
128    10.5.5.11   10.5.5.1     255.255.252.0    ${HTTP_ACCEPTED}
129
130
131Switch Between IP Origins On VMI And Verify Details
132    [Documentation]  Switch between IP origins on VMI and verify details.
133    [Tags]  Switch_Between_IP_Origins_On_VMI_And_Verify_Details
134
135    Switch VMI IPv4 Origin And Verify Details
136    Switch VMI IPv4 Origin And Verify Details
137
138
139Verify Persistency Of VMI IPv4 Details After Host Reboot
140    [Documentation]  Verify persistency of VMI IPv4 details after host reboot.
141    [Tags]  Verify_Persistency_Of_VMI_IPv4_Details_After_Host_Reboot
142
143    # Verifying persistency of dynamic address.
144    Set VMI IPv4 Origin  ${True}  ${HTTP_ACCEPTED}
145    Redfish Power Off  stack_mode=skip
146    Redfish Power On
147    Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
148
149    # Verifying persistency of static address.
150    Switch VMI IPv4 Origin And Verify Details
151    Redfish Power Off  stack_mode=skip
152    Redfish Power On
153    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
154
155
156Delete VMI Static IP Address And Verify
157    [Documentation]  Delete VMI static IP address and verify.
158    [Tags]  Delete_VMI_Static_IP_Address_And_Verify
159    [Teardown]  Test Teardown Execution
160
161    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
162    Delete VMI IPv4 Address
163
164
165Verify Successful VMI IP Static Configuration On HOST Boot After Session Delete
166    [Documentation]  Verify VMI IP static Configuration On HOST Boot After session deleted.
167    [Tags]  Verify_Successful_VMI_IP_Static_Configuration_On_HOST_Boot_After_Session_Delete
168    [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  Test Teardown Execution
169
170    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
171
172    ${session_info}=  Get Redfish Session Info
173    Redfish.Delete  ${session_info["location"]}
174
175    # Create a new Redfish session
176    Redfish.Login
177    Redfish Power Off
178    Redfish Power On
179
180    Verify VMI Network Interface Details  ${test_ipv4}  Static  ${test_gateway}  ${test_netmask}
181
182
183Verify Persistency Of VMI DHCP IP Configuration After Multiple HOST Reboots
184    [Documentation]  Verify Persistency Of VMI DHCP IP configuration After Multiple HOST Reboots
185    [Tags]  Verify_Persistency_Of_VMI_DHCP_IP_Configuration_After_Multiple_HOST_Reboots
186    [Teardown]  Test Teardown Execution
187
188    Set VMI IPv4 Origin  ${True}  ${HTTP_ACCEPTED}
189    ${vmi_ip_config}=  Get VMI Network Interface Details
190    # Verifying persistency of dynamic address after multiple reboots.
191    FOR  ${i}  IN RANGE  ${2}
192        Redfish Power Off
193        Redfish Power On
194        Verify VMI Network Interface Details  ${vmi_ip_config["IPv4_Address"]}
195        ...  DHCP  ${vmi_ip_config["IPv4_Gateway"]}  ${vmi_ip_config["IPv4_SubnetMask"]}
196    END
197
198
199Enable DHCP When Static IP Configured And Verify Static IP
200    [Documentation]  Enable DHCP when static ip configured and verify static ip
201    [Tags]  Enable_DHCP_When_Static_IP_Configured_And_Verify_Static_IP
202    [Setup]  Redfish Power On
203    [Teardown]  Test Teardown Execution
204
205    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
206    Set VMI IPv4 Origin  ${True}
207    ${vmi_network_conf}=  Get VMI Network Interface Details
208    Should Not Be Equal As Strings  ${test_ipv4}  ${vmi_network_conf["IPv4_Address"]}
209
210
211Verify VMI Static IP Configuration Persist On BMC Reset Before Host Boot
212    [Documentation]  Verify VMI static IP configuration persist on BMC reset.
213    [Tags]   Verify_VMI_Static_IP_Configuration_Persist_On_BMC_Reset_Before_Host_Boot
214    [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  FFDC On Test Case Fail
215
216    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
217    Redfish OBMC Reboot (off)  stack_mode=skip
218    Redfish Power On
219    # Verifying the VMI static configuration
220    Verify VMI Network Interface Details  ${test_ipv4}  Static   ${test_gateway}  ${test_netmask}
221
222
223Add Static IP When Host Poweroff And Verify On Poweron
224    [Documentation]  Add Static IP When Host Poweroff And Verify on power on
225    [Tags]   Add_Static_IP_When_Host_Poweroff_And_Verify_On_Poweron
226    [Setup]  Redfish Power Off
227    [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  FFDC On Test Case Fail
228
229    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
230    Redfish Power On
231    Verify VMI Network Interface Details  ${test_ipv4}  Static  ${test_gateway}  ${test_netmask}
232
233
234Add VMI Static IP When Host Poweroff And Verify Static IP On BMC Reset
235    [Documentation]  Add Static IP When Host Poweroff And Verify Static IP On BMC Reset.
236    [Tags]  Add_VMI_Static_IP_When_Host_Poweroff_And_Verify_Static_IP_On_BMC_Reset
237    [Setup]  Redfish Power Off
238    [Teardown]  Run keywords  Delete VMI IPv4 Address  AND  FFDC On Test Case Fail
239
240    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
241    Redfish OBMC Reboot (off)  stack_mode=skip
242    Redfish Power On
243    Verify VMI Network Interface Details  ${test_ipv4}  Static  ${test_gateway}  ${test_netmask}
244
245
246Enable DHCP When No Static IP Configured And Verify DHCP IP
247    [Documentation]  Enable DHCP when no static ip configured and verify dhcp ip
248    [Tags]  Enable_DHCP_When_No_Static_IP_Configured_And_Verify_DHCP_IP
249    [Setup]  Run Keyword And Ignore Error  Delete VMI IPv4 Address
250    [Teardown]  Test Teardown Execution
251
252    ${curr_origin}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
253    Run Keyword If  ${curr_origin} == ${False}  Set VMI IPv4 Origin  ${True}  ${HTTP_ACCEPTED}
254    ${vmi_ip_config}=  Get VMI Network Interface Details
255    Verify VMI Network Interface Details  ${vmi_ip_config["IPv4_Address"]}
256    ...  DHCP  ${vmi_ip_config["IPv4_Gateway"]}  ${vmi_ip_config["IPv4_SubnetMask"]}
257
258
259Verify User Cannot Delete VMI DHCP IP Address
260    [Documentation]  Verify user cannot delete VMI DHCP IP Address
261    [Tags]  Verify_User_Cannot_Delete_VMI_DHCP_IP_Address
262    [Setup]  Set VMI IPv4 Origin  ${True}
263    [Teardown]  Test Teardown Execution
264
265    Delete VMI IPv4 Address  IPv4Addresses  valid_status_code=${HTTP_FORBIDDEN}
266    ${resp}=  Redfish.Get
267    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
268    Should Not Be Empty  ${resp.dict["IPv4Addresses"]}
269
270
271Enable DHCP When Static IP Configured DHCP Server Unavailable And Verify IP
272    [Documentation]  Enable DHCP When Static IP Configured And DHCP Server Unavailable And Verify No IP.
273    [Tags]  Enable_DHCP_When_Static_IP_Configured_DHCP_Server_Unavailable_And_Verify_IP
274    [Teardown]  Test Teardown Execution
275
276    Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}  ${test_netmask}
277    Set VMI IPv4 Origin  ${True}
278    Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
279
280
281Verify To Configure VMI Static IP Address With Different User Roles
282    [Documentation]  Verify to configure vmi static ip address with different user roles.
283    [Tags]  Verify_To_Configure_VMI_Static_IP_Address_With_Different_User_Roles
284    [Setup]  Run Keywords  Delete BMC Users Using Redfish
285    ...  AND  Create Users With Different Roles  users=${USERS}  force=${True}
286    [Template]  Config VMI Static IP Address Using Different Users
287    [Teardown]  Delete BMC Users Using Redfish
288
289    # username     password    ip_address    gateway          nemask           valid_status_code
290    admin_user     TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_ACCEPTED}
291    readonly_user  TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_FORBIDDEN}
292
293
294Verify To Configure VMI Static IP Address With Operator User Role
295    [Documentation]  Verify to configure vmi static ip address with operator user role.
296    [Tags]  Verify_To_Configure_VMI_Static_IP_Address_With_Operator_User_Role
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          nemask           valid_status_code
302    operator_user  TestPwd123  ${test_ipv4}  ${test_gateway}  ${test_netmask}  ${HTTP_FORBIDDEN}
303
304
305Verify To Delete VMI Static IP Address With Different User Roles
306    [Documentation]  Verify to delete vmi static IP address with different user roles.
307    [Tags]  Verify_To_Delete_VMI_Static_IP_Address_With_Different_User_Roles
308    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
309    [Template]  Delete VMI Static IP Address Using Different Users
310    [Teardown]  Delete BMC Users Using Redfish
311
312    # username     password     valid_status_code
313    admin_user     TestPwd123   ${HTTP_ACCEPTED}
314    readonly_user  TestPwd123   ${HTTP_FORBIDDEN}
315
316
317Verify To Delete VMI Static IP Address With Operator User Role
318    [Documentation]  Verify to delete vmi static IP address with operator user role.
319    [Tags]  Verify_To_Delete_VMI_Static_IP_Address_With_Operator_User_Role
320    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
321    [Template]  Delete VMI Static IP Address Using Different Users
322    [Teardown]  Delete BMC Users Using Redfish
323
324    # username     password     valid_status_code
325    operator_user     TestPwd123   ${HTTP_FORBIDDEN}
326
327
328Verify To Update VMI Static IP Address With Different User Roles
329    [Documentation]  Verify to update vmi static IP address with different user roles.
330    [Tags]  Verify_To_Update_VMI_Static_IP_Address_With_Different_User_Roles
331    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
332    [Template]  Config VMI Static IP Address Using Different Users
333    [Teardown]  Delete BMC Users Using Redfish
334
335    # username     password     ip_address  gateway    netmask       valid_status_code
336    admin_user     TestPwd123   10.5.10.20  10.5.10.1  255.255.0.0  ${HTTP_ACCEPTED}
337    readonly_user  TestPwd123   10.5.20.40  10.5.20.1  255.255.0.0  ${HTTP_FORBIDDEN}
338
339
340Verify To Update VMI Static IP Address With Operator User Role
341    [Documentation]  Verify to update vmi static IP address with operator user role.
342    [Tags]  Verify_To_Update_VMI_Static_IP_Address_With_Operator_User_Role
343    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
344    [Template]  Config VMI Static IP Address Using Different Users
345    [Teardown]  Delete BMC Users Using Redfish
346
347    # username     password     ip_address  gateway    netmask       valid_status_code
348    operator_user  TestPwd123   10.5.10.30  10.5.10.1  255.255.0.0  ${HTTP_FORBIDDEN}
349
350
351Verify To Read VMI Network Configuration With Different User Roles
352    [Documentation]  Verify to read vmi network configuration with different user roles.
353    [Tags]  Verify_To_Read_VMI_Network_Configuration_With_Different_User_Roles
354    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
355    [Template]  Read VMI Static IP Address Using Different Users
356    [Teardown]  Delete BMC Users Using Redfish
357
358    # username     password     valid_status_code
359    admin_user     TestPwd123   ${HTTP_OK}
360    readonly_user  TestPwd123   ${HTTP_OK}
361
362
363Verify To Read VMI Network Configuration With Operator User Role
364    [Documentation]  Verify to read vmi network configuration with operator user role.
365    [Tags]  Verify_To_Read_VMI_Network_Configuration_With_Operator_User_Role
366    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
367    [Template]  Read VMI Static IP Address Using Different Users
368    [Teardown]  Delete BMC Users Using Redfish
369
370    # username     password     valid_status_code
371    operator_user  TestPwd123   ${HTTP_FORBIDDEN}
372
373
374Enable DHCP On VMI Network Via Different Users Roles And Verify
375    [Documentation]  Enable DHCP On VMI Network Via Different Users Roles And Verify.
376    [Tags]  Enable_DHCP_On_VMI_Network_Via_Different_Users_Roles_And_Verify
377    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
378    [Template]  Update User Role And Set VMI IPv4 Origin
379    [Teardown]  Delete BMC Users Using Redfish
380
381    # username     password     dhcp_enabled   valid_status_code
382    admin_user     TestPwd123   ${True}        ${HTTP_ACCEPTED}
383    readonly_user  TestPwd123   ${True}        ${HTTP_FORBIDDEN}
384
385
386Enable DHCP On VMI Network Via Operator User Role And Verify
387    [Documentation]  Enable DHCP On VMI Network Via Operator User Role And Verify.
388    [Tags]  Enable_DHCP_On_VMI_Network_Via_Operator_User_Role_And_Verify
389    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
390    [Template]  Update User Role And Set VMI IPv4 Origin
391    [Teardown]  Delete BMC Users Using Redfish
392
393    # username     password     dhcp_enabled   valid_status_code
394    operator_user  TestPwd123   ${True}        ${HTTP_FORBIDDEN}
395
396
397Disable DHCP On VMI Network Via Different Users Roles And Verify
398    [Documentation]  Disable DHCP On VMI Network Via Different Users Roles And Verify.
399    [Tags]  Disable_DHCP_On_VMI_Network_Via_Different_Users_Roles_And_Verify
400    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
401    [Template]  Update User Role And Set VMI IPv4 Origin
402    [Teardown]  Delete BMC Users Using Redfish
403
404    # username     password     dhcp_enabled    valid_status_code
405    admin_user     TestPwd123   ${False}        ${HTTP_ACCEPTED}
406    readonly_user  TestPwd123   ${False}        ${HTTP_FORBIDDEN}
407
408
409Disable DHCP On VMI Network Via Operator User Role And Verify
410    [Documentation]  Disable DHCP On VMI Network Via Operator User Role And Verify.
411    [Tags]  Disable_DHCP_On_VMI_Network_Via_Operator_User_Role_And_Verify
412    [Setup]  Create Users With Different Roles  users=${USERS}  force=${True}
413    [Template]  Update User Role And Set VMI IPv4 Origin
414    [Teardown]  Delete BMC Users Using Redfish
415
416    # username     password     dhcp_enabled    valid_status_code
417    operator_user  TestPwd123   ${False}        ${HTTP_FORBIDDEN}
418
419
420Enable And Disable DHCP And Verify
421    [Documentation]  verify enable DHCP and disable DHCP.
422    [Tags]  Enable_And_Disable_DHCP_And_Verify
423
424    Set VMI IPv4 Origin  ${True}
425    Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
426    Set VMI IPv4 Origin  ${False}
427    Verify VMI Network Interface Details  ${default}  Static  ${default}  ${default}
428
429
430Multiple Times Enable And Disable DHCP And Verify
431    [Documentation]  Enable and Disable DHCP in a loop and verify VMI gets an IP address from DHCP
432    ...  each time when DHCP is enabled
433    [Tags]  Multiple_Times_Enable_And_Disable_DHCP_And_Verify
434
435    FOR  ${i}  IN RANGE  ${2}
436      Set VMI IPv4 Origin  ${True}
437      Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
438      Set VMI IPv4 Origin  ${False}
439      Verify VMI Network Interface Details  ${default}  Static  ${default}  ${default}
440    END
441
442
443Assign Static IPv4 Address With Invalid Netmask To VMI
444    [Documentation]  Assign static IPv4 address with invalid netmask and expect error.
445    [Tags]  Assign_Static_IPv4_Address_With_Invalid_Netmask_To_VMI
446    [Template]  Set Static IPv4 Address To VMI And Verify
447
448    # ip          gateway          netmask         valid_status_code
449    ${test_ipv4}  ${test_gateway}  255.256.255.0   ${HTTP_BAD_REQUEST}
450    ${test_ipv4}  ${test_gateway}  ff.ff.ff.ff     ${HTTP_BAD_REQUEST}
451    ${test_ipv4}  ${test_gateway}  255.255.253.0   ${HTTP_BAD_REQUEST}
452
453
454Assign Static IPv4 Address With Invalid Gateway To VMI
455    [Documentation]  Add static IPv4 address with invalid gateway and expect error.
456    [Tags]  Assign_Static_IPv4_Address_With_Invalid_Gateway_To_VMI
457    [Template]  Set Static IPv4 Address To VMI And Verify
458
459    # ip          gateway          netmask           valid_status_code
460    ${test_ipv4}  @@@.%%.44.11     ${test_netmask}   ${HTTP_BAD_REQUEST}
461    ${test_ipv4}  0xa.0xb.0xc.0xd  ${test_netmask}   ${HTTP_BAD_REQUEST}
462    ${test_ipv4}  10.3.36          ${test_netmask}   ${HTTP_BAD_REQUEST}
463    ${test_ipv4}  10.3.36.-10      ${test_netmask}   ${HTTP_BAD_REQUEST}
464
465
466Enable DHCP When Host Is Off And Verify After Poweron
467    [Documentation]  Enable DHCP when host is off and
468    ...  check whether it is enabled after poweron.
469    [Tags]  Enable_DHCP_When_Host_Is_Off_And_Verify_After_Poweron
470    [Setup]  Redfish Power Off  stack_mode=skip
471
472    Set VMI IPv4 Origin  ${True}
473    Redfish Power On  stack_mode=skip
474    Verify VMI Network Interface Details  ${default}  DHCP  ${default}  ${default}
475
476
477Disable DHCP When Host Is Off And Verify New State Reflects After Power On
478    [Documentation]  Disable DHCP when host is off and
479    ...  get network info and verify that VMI origin is static.
480    [Tags]  Disable_DHCP_When_Host_Is_Off_And_Verify_New_State_Reflects_After_Power_On
481    [Setup]  Redfish Power Off  stack_mode=skip
482
483    Set VMI IPv4 Origin  ${False}
484    Redfish Power On  stack_mode=skip
485    Verify VMI Network Interface Details  ${default}  Static  ${default}  ${default}
486
487
488Enable VMI Stateless Address AutoConfig And Verify
489    [Documentation]  Enable VMI SLAACv6 and verify an origin.
490    [Tags]  Enable_VMI_Stateless_Address_AutoConfig_And_Verify
491
492    Set VMI SLAACv6 Origin    ${True}
493
494    # Check origin is set to slaac and address are getting displayed.
495    Verify VMI IPv6 Address  SLAAC
496
497
498Disable VMI Stateless Address AutoConfig And Verify
499    [Documentation]  Disable VMI SLAACv6 and verify an origin.
500    [Tags]  Disable_VMI_Stateless_Address_AutoConfig_And_Verify
501    [Setup]  Set VMI SLAACv6 Origin    ${True}
502
503    Set VMI SLAACv6 Origin    ${False}
504
505    # Check origin is set to static and slaacv6 address are getting erased.
506    Verify VMI IPv6 Address  Static
507
508
509Enable VMI SLAAC And Check Persistency On BMC Reboot
510    [Documentation]  Enable VMI SLAACv6 and verify its persistency
511    ...  on BMC reboot and this works on the setup where router
512    ...  advertise network prefix.
513    [Tags]  Enable_VMI_SLAAC_And_Check_Persistency_On_BMC_Reboot
514
515    Set VMI SLAACv6 Origin    ${True}
516
517    # Reboot BMC and verify persistency.
518    OBMC Reboot (off)
519    Redfish Power On
520    Wait For Host Boot Progress To Reach Required State
521
522    # Check origin is set to slaac and address are getting displayed.
523    ${vmi_ipv6addr}=  Verify VMI IPv6 Address  SLAAC
524    Should Not Be Equal  ${vmi_ipv6addr["Address"]}  ${default_ipv6addr}
525
526
527Disable VMI SLAAC And Check Persistency On BMC Reboot
528    [Documentation]  Disable VMI SLAACv6 and verify its persistency
529    ...  on BMC reboot.
530    [Tags]  Disable_VMI_SLAAC_And_Check_Persistency_On_BMC_Reboot
531
532    Set VMI SLAACv6 Origin    ${False}
533
534    # Reboot BMC and verify persistency.
535    OBMC Reboot (off)
536    Redfish Power On
537    Wait For Host Boot Progress To Reach Required State
538
539    # Check if origin is set to static and SLAAC address are getting erased.
540    ${vmi_ipv6addr}=  Verify VMI IPv6 Address  Static
541    Should Be Equal  ${vmi_ipv6addr["Address"]}  ${default_ipv6addr}
542
543
544Disable VMI DHCPv4 When SLAAC Is Enabled And Verify
545    [Documentation]  Disable VMI DHCPv4 parameter when SLAACv6 is enabled
546    ...  and check whether the IPv4 address origin is set to static and
547    ...  DHCPv4 address is getting erased.
548    [Tags]  Disable_VMI_DHCPv4_When_SLAAC_Is_Enabled_And_Verify
549    [Setup]  Set VMI IPv4 Origin  ${True}
550
551    # Set IPv6 origin to SLAAC.
552    Set VMI SLAACv6 Origin    ${True}
553    Verify VMI IPv6 Address  SLAAC
554
555    # Disable VMI DHCPv4 and check IPv4 address origin is set to static.
556    Set VMI IPv4 Origin  ${False}
557    Verify VMI Network Interface Details  ${default}  Static  ${default}  ${default}
558
559
560Enable VMI SLAAC When DHCPv6 Is Enabled And Verify
561    [Documentation]  Enable VMI SLAACv6 when VMI DHCPv6 is enabled and
562    ...  check IPv6 gets Slaac address and this works on the setup
563    ...  where router advertise network prefix.
564    [Tags]  Enable_VMI_SLAAC_When_DHCPv6_Is_Enabled_And_Verify
565
566    Set VMI DHCPv6 Property  Enabled
567
568    # Enable SLAAC and check whether IPv6 origin is set to SLAAC.
569    Set VMI SLAACv6 Origin    ${True}
570
571    # Check if origin is set to slaac and address are getting displayed.
572    ${vmi_ipv6addr}=  Verify VMI IPv6 Address  SLAAC
573    Should Not Be Equal  ${vmi_ipv6addr["Address"]}  ${default_ipv6addr}
574    Should Be Equal  ${vmi_ipv6addr["PrefixLength"]}  ${prefix_length}
575
576
577Disable VMI DHCPv6 Property And Verify
578    [Documentation]  Disable VMI DHCPv6 property and verify IPv6 address
579    ...              origin is set to static and DHCPv6 address is erased.
580    [Tags]  Disable_VMI_DHCPv6_Property_And_Verify
581    [Setup]  Set VMI DHCPv6 Property  Enabled
582
583    Set VMI DHCPv6 Property  Disabled
584
585    # Verify IPv6 address origin is set to static and DHCPv6 address is erased.
586    ${vmi_ipv6addr}=  Verify VMI IPv6 Address  Static
587    Should Be Equal  ${vmi_ipv6addr["Address"]}  ${default_ipv6addr}
588
589
590*** Keywords ***
591
592Suite Setup Execution
593    [Documentation]  Do test setup execution task.
594
595    Redfish.Login
596
597    Redfish Power Off
598    Set BIOS Attribute  pvm_hmc_managed  Enabled
599    Set BIOS Attribute  pvm_stop_at_standby  Disabled
600
601    Redfish Power On
602    Wait For Host Boot Progress To Reach Required State
603
604    ${active_channel_config}=  Get Active Channel Config
605    Set Suite Variable   ${active_channel_config}
606    Set Suite Variable  ${ethernet_interface}  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
607    ${resp}=  Redfish.Get
608    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
609    ${ip_resp}=  Evaluate  json.loads(r'''${resp.text}''')  json
610    ${length}=  Get Length  ${ip_resp["IPv4StaticAddresses"]}
611    ${vmi_network_conf}=  Run Keyword If  ${length} != ${0}  Get VMI Network Interface Details
612    Set Suite Variable  ${vmi_network_conf}
613
614
615Test Teardown Execution
616    [Documentation]  Do test teardown execution task.
617
618    FFDC On Test Case Fail
619    ${curr_mode}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
620    Run Keyword If  ${curr_mode} == ${True}  Set VMI IPv4 Origin  ${False}
621    Run Keyword If  '${vmi_network_conf["IPv4_Address"]}' != '${default}'
622    ...  Set Static IPv4 Address To VMI And Verify  ${vmi_network_conf["IPv4_Address"]}
623    ...  ${vmi_network_conf["IPv4_Gateway"]}  ${vmi_network_conf["IPv4_SubnetMask"]}
624
625
626Get Immediate Child Parameter From VMI Network Interface
627    [Documentation]  Get immediate child parameter from VMI network interface.
628    [Arguments]  ${parameter}  ${valid_status_code}=${HTTP_OK}
629
630    # Description of argument(s):
631    # parameter          parameter for which value is required. Ex: DHCPEnabled, MACAddress etc.
632    # valid_status_code  Expected valid status code from GET request.
633
634    ${resp}=  Redfish.Get
635    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
636    ...  valid_status_codes=[${valid_status_code}]
637
638    ${ip_resp}=  Evaluate  json.loads(r'''${resp.text}''')  json
639    ${value}=  Set Variable If  '${parameter}' != 'DHCPEnabled'   ${ip_resp["${parameter}"]}
640    ...  ${ip_resp["DHCPv4"]["${parameter}"]}
641
642    RETURN  ${value}
643
644
645Switch VMI IPv4 Origin And Verify Details
646    [Documentation]  Switch VMI IPv4 origin and verify details.
647
648    ${dhcp_mode_before}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
649    ${dhcp_enabled}=  Set Variable If  ${dhcp_mode_before} == ${False}  ${True}  ${False}
650
651    ${origin}=  Set Variable If  ${dhcp_mode_before} == ${False}  DHCP  Static
652    Set VMI IPv4 Origin  ${dhcp_enabled}  ${HTTP_ACCEPTED}
653
654    ${dhcp_mode_after}=  Get Immediate Child Parameter From VMI Network Interface  DHCPEnabled
655    Should Not Be Equal  ${dhcp_mode_before}  ${dhcp_mode_after}
656
657    Run Keyword If  ${dhcp_mode_after} == ${True}
658    ...  Verify VMI Network Interface Details  ${default}  ${origin}  ${default}  ${default}
659
660
661Delete VMI Static IP Address Using Different Users
662    [Documentation]  Update user role and delete vmi static IP address.
663    [Arguments]  ${username}  ${password}  ${valid_status_code}
664    [Teardown]  Run Keywords  Redfish.Login  AND
665    ...  Set Static IPv4 Address To VMI And Verify  ${test_ipv4}  ${test_gateway}
666    ...  ${test_netmask}  ${HTTP_ACCEPTED}  AND  Redfish.Logout
667
668    # Description of argument(s):
669    # username            The host username.
670    # password            The host password.
671    # valid_status_code   The expected valid status code.
672
673    # TODO: operator_user role is not yet supported.
674    Skip If  '${username}' == 'operator_user'
675    Redfish.Login  ${username}  ${password}
676    Delete VMI IPv4 Address  delete_param=IPv4StaticAddresses  valid_status_code=${valid_status_code}
677
678
679Config VMI Static IP Address Using Different Users
680   [Documentation]  Update user role and update vmi static ip address.
681   [Arguments]  ${username}  ${password}  ${ip}  ${gateway}  ${netmask}
682   ...  ${valid_status_code}
683
684    # Description of argument(s):
685    # username            The host username.
686    # password            The host password.
687    # ip                  IP address to be added (e.g. "10.7.7.7").
688    # subnet_mask         Subnet mask for the IP to be added
689    #                     (e.g. "255.255.0.0").
690    # gateway             Gateway for the IP to be added (e.g. "10.7.7.1").
691    # valid_status_code   The expected valid status code.
692
693    # TODO: operator_user role is not yet supported.
694    Skip If  '${username}' == 'operator_user'
695    Redfish.Login  ${username}  ${password}
696    Set Static IPv4 Address To VMI And Verify  ${ip}  ${gateway}  ${netmask}  ${valid_status_code}
697
698
699Read VMI Static IP Address Using Different Users
700   [Documentation]  Update user role and read vmi static ip address.
701   [Arguments]  ${username}  ${password}  ${valid_status_code}
702
703    # Description of argument(s):
704    # username            The host username.
705    # password            The host password.
706    # valid_status_code   The expected valid status code.
707
708    # TODO: operator_user role is not yet supported.
709    Skip If  '${username}' == 'operator_user'
710    Redfish.Login  ${username}  ${password}
711    Redfish.Get
712    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${ethernet_interface}
713    ...  valid_status_codes=[${valid_status_code}]
714
715
716Delete BMC Users Using Redfish
717   [Documentation]  Delete BMC users via redfish.
718
719   Redfish.Login
720   Delete BMC Users Via Redfish  users=${USERS}
721
722
723Update User Role And Set VMI IPv4 Origin
724    [Documentation]  Update User Role And Set VMI IPv4 Origin.
725    [Arguments]  ${username}  ${password}  ${dhcp_enabled}  ${valid_status_code}
726
727    # Description of argument(s):
728    # username            The host username.
729    # password            The host password.
730    # dhcp_enabled        Indicates whether dhcp should be enabled
731    #                     (${True}, ${False}).
732    # valid_status_code   The expected valid status code.
733
734    # TODO: operator_user role is not yet supported.
735    Skip If  '${username}' == 'operator_user'
736    Redfish.Login  ${username}  ${password}
737    Set VMI IPv4 Origin  ${dhcp_enabled}  ${valid_status_code}
738
739
740Suite Teardown Execution
741    [Documentation]  Do suite teardown execution task.
742
743    Run Keyword If  ${vmi_network_conf} != ${None}
744    ...  Set Static IPv4 Address To VMI And Verify  ${vmi_network_conf["IPv4_Address"]}
745    ...  ${vmi_network_conf["IPv4_Gateway"]}  ${vmi_network_conf["IPv4_SubnetMask"]}
746    Delete All Redfish Sessions
747    Redfish.Logout
748
749
750Set VMI SLAACv6 Origin
751    [Documentation]  Set VMI SLAACv6 origin.
752    [Arguments]  ${slaac_enabled}=${False}  ${valid_status_code}=${HTTP_ACCEPTED}
753    ...  ${interface}=${ethernet_interface}
754
755    # Description of argument(s):
756    # slaacv6_enabled    True if user wants to enable SLAACv6. Default is Static, hence value is set to False.
757    # valid_status_code  Expected valid status code from PATCH request. Default is HTTP_OK.
758    # interface          VMI interface (eg. eth0 or eth1).
759
760    ${data}=  Set Variable If  ${slaac_enabled} == ${False}  ${DISABLE_SLAAC}  ${ENABLE_SLAAC}
761    ${resp}=  Redfish.Patch
762    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
763    ...  body=${data}  valid_status_codes=[${valid_status_code}]
764
765    Sleep  ${wait_time}
766    Return From Keyword If  ${valid_status_code} != ${HTTP_ACCEPTED}
767    ${resp}=  Redfish.Get
768    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
769    Should Be Equal  ${resp.dict["StatelessAddressAutoConfig"]["IPv6AutoConfigEnabled"]}  ${slaac_enabled}
770
771
772Verify VMI IPv6 Address
773    [Documentation]  Verify VMI IPv6 address configurations.
774    [Arguments]  ${ipv6_origin}  ${interface}=${ethernet_interface}
775
776    # Description of argument(s):
777    # ipv6_origin     Origin of IPv6 address eg. Static or DHCPv6 or SLAAC.
778    # interface       VMI interface (eg. eth0 or eth1).
779
780    ${resp}=  Redfish.Get  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
781
782    @{vmi_ipv6_configurations}=  Get From Dictionary  ${resp.dict}  IPv6Addresses
783    ${vmi_ipv6_config}=  Get From List  ${vmi_ipv6_configurations}  0
784    Should Not Be Empty  ${vmi_ipv6_config["Address"]}
785    Should Be Equal As Strings   ${vmi_ipv6_config["AddressOrigin"]}  ${ipv6_origin}
786    RETURN  &{vmi_ipv6_config}
787
788
789Set VMI DHCPv6 Property
790    [Documentation]  Set VMI DHCPv6 attribute.
791    [Arguments]  ${dhcpv6_operatingmode}=${Disabled}  ${valid_status_code}=${HTTP_ACCEPTED}
792    ...  ${interface}=${ethernet_interface}
793
794    # Description of argument(s):
795    # dhcpv6_operatingmode    Enabled if user wants to enable DHCPv6.
796    # ...                     Default is Static, hence value is set to Disabled.
797    # valid_status_code       Expected valid status code from PATCH request. Default is HTTP_OK.
798    # interface               VMI interface (eg. eth0 or eth1).
799
800    ${data}=  Set Variable If  '${dhcpv6_operatingmode}' == 'Disabled'  ${DISABLE_DHCPv6}  ${ENABLE_DHCPv6}
801    ${resp}=  Redfish.Patch
802    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
803    ...  body=${data}  valid_status_codes=[${valid_status_code}]
804
805    Sleep  ${wait_time}
806    Return From Keyword If  ${valid_status_code} != ${HTTP_ACCEPTED}
807    ${resp}=  Redfish.Get
808    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
809    Should Be Equal  ${resp.dict["DHCPv6"]["OperatingMode"]}  ${dhcpv6_operatingmode}
810