1*** Settings *** 2 3Documentation VMI static/dynamic IP config and certificate exchange tests. 4 5Resource ../../lib/resource.robot 6Resource ../../lib/bmc_redfish_resource.robot 7Resource ../../lib/openbmc_ffdc.robot 8 9Suite Setup Redfish.Login 10Test Teardown FFDC On Test Case Fail 11Suite Teardown Redfish.Logout 12 13*** Variables *** 14 15&{DHCP_ENABLED} DHCPEnabled=${${True}} 16&{DHCP_DISABLED} DHCPEnabled=${${False}} 17 18&{ENABLE_DHCP} DHCPv4=&{DHCP_ENABLED} 19&{DISABLE_DHCP} DHCPv4=&{DHCP_DISABLED} 20 21 22*** Test Cases *** 23 24Verify All VMI EthernetInterfaces 25 [Documentation] Verify all VMI ethernet interfaces. 26 [Tags] Verify_All_VMI_EthernetINterfaces 27 28 Verify VMI EthernetInterfaces 29 30 31Verify Existing VMI Network Interface Details 32 [Documentation] Verify existing VMI network interface details. 33 [Tags] Verify_VMI_Network_Interface_Details 34 35 ${vmi_ip}= Get VMI Network Interface Details 36 ${origin}= Set Variable If ${vmi_ip["DHCPv4"]} == ${False} Static DHCP 37 38 Should Not Be Equal ${vmi_ip["DHCPv4"]} ${vmi_ip["IPv4StaticAddresses"]} 39 Should Be Equal As Strings ${origin} ${vmi_ip["IPv4_AddressOrigin"]} 40 Should Be Equal As Strings ${vmi_ip["Id"]} intf0 41 Should Be Equal As Strings ${vmi_ip["Description"]} 42 ... Ethernet Interface for Virtual Management Interface 43 Should Be Equal As Strings ${vmi_ip["Name"]} Virtual Management Interface 44 Should Be True ${vmi_ip["InterfaceEnabled"]} 45 46 47Delete Existing Static VMI IP Address 48 [Documentation] Delete existing static VMI IP address. 49 [Tags] Delete_Existing_Static_VMI_IP_Address 50 51 ${curr_origin}= Get Immediate Child Parameter From VMI Network Interface DHCPEnabled 52 Run Keyword If ${curr_origin} == ${True} Set VMI IPv4 Origin ${False} ${HTTP_ACCEPTED} 53 54 Delete VMI IPv4 Address IPv4StaticAddresses valid_status_code=${HTTP_ACCEPTED} 55 ${default}= Set Variable 0.0.0.0 56 Verify VMI Network Interface Details ${default} Static ${default} ${default} ${True} 57 58 59Verify User Cannot Delete ReadOnly Property IPv4Addresses 60 [Documentation] Verify user cannot delete readonly property IPv4Addresses. 61 [Tags] Verify_User_Cannot_Delete_ReadOnly_Property_IPv4Addresses 62 63 ${curr_origin}= Get Immediate Child Parameter From VMI Network Interface DHCPEnabled 64 Run Keyword If ${curr_origin} == ${False} Set VMI IPv4 Origin ${True} ${HTTP_ACCEPTED} 65 Delete VMI IPv4 Address IPv4Addresses valid_status_code=${HTTP_BAD_REQUEST} 66 67 68Assign Static IPv4 Address To VMI 69 [Documentation] Assign static IPv4 address to VMI. 70 [Tags] Assign_Static_IPv4_Address_To_VMI 71 [Template] Verify Assigning Static IPv4 Address To VMI 72 73 # ip gateway netmask del_curr_ip host_reboot valid_status_code 74 ${VMI_IP} ${VMI_GATEWAY} ${VMI_NETMASK} ${False} ${True} ${HTTP_ACCEPTED} 75 a.3.118.94 ${VMI_GATEWAY} ${VMI_NETMASK} ${False} ${False} ${HTTP_BAD_REQUEST} 76 10.118.94 10.118.3.Z ${VMI_NETMASK} ${False} ${False} ${HTTP_BAD_REQUEST} 77 78 79Switch Between IP Origins On VMI And Verify Details 80 [Documentation] Switch between IP origins on VMI and verify details. 81 [Tags] Switch_Between_IP_Origins_On_VMI_And_Verify_Details 82 83 Switch VMI IPv4 Origin And Verify Details 84 Switch VMI IPv4 Origin And Verify Details 85 86 87Verify Persistency Of VMI IPv4 Details After Host Reboot 88 [Documentation] Verify persistency of VMI IPv4 details after host reboot. 89 [Tags] Verify_Persistency_Of_VMI_IPv4_Details_After_Host_Reboot 90 91 # Verifying persistency of dynamic address. 92 Set VMI IPv4 Origin ${True} ${HTTP_ACCEPTED} 93 ${default}= Set Variable 0.0.0.0 94 Verify VMI Network Interface Details ${default} DHCP ${default} ${default} ${True} 95 Verify VMI Network Interface Details ${default} DHCP ${default} ${default} ${True} 96 97 # Verifying persistency of static address. 98 Switch VMI IPv4 Origin And Verify Details ${True} 99 Verify Assigning Static IPv4 Address To VMI ${VMI_IP} ${VMI_GATEWAY} ${VMI_NETMASK} ${False} 100 Verify VMI Network Interface Details ${VMI_IP} Static ${VMI_GATEWAY} ${VMI_NETMASK} ${True} 101 102 103*** Keywords *** 104 105Get VMI Network Interface Details 106 [Documentation] Get VMI network interface details. 107 [Arguments] ${valid_status_code}=${HTTP_OK} 108 109 # Description of argument(s): 110 # valid_status_code Expected valid status code from GET request. 111 112 # Note: It returns a dictionary of VMI eth0 parameters. 113 114 ${resp}= Redfish.Get /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 115 ... valid_status_codes=[${valid_status_code}] 116 117 ${ip_resp}= Evaluate json.loads('''${resp.text}''') json 118 119 ${static_exists}= Run Keyword And Ignore Error 120 ... Set Variable ${ip_resp["IPv4StaticAddresses"][0]["Address"]} 121 ${static_exists}= Set Variable If '${static_exists[0]}' == 'PASS' ${True} ${False} 122 123 ${vmi_ip}= Create Dictionary DHCPv4=${${ip_resp["DHCPv4"]["DHCPEnabled"]}} Id=${ip_resp["Id"]} 124 ... Description=${ip_resp["Description"]} IPv4_Address=${ip_resp["IPv4Addresses"][0]["Address"]} 125 ... IPv4_AddressOrigin=${ip_resp["IPv4Addresses"][0]["AddressOrigin"]} Name=${ip_resp["Name"]} 126 ... IPv4_Gateway=${ip_resp["IPv4Addresses"][0]["Gateway"]} 127 ... InterfaceEnabled=${${ip_resp["InterfaceEnabled"]}} 128 ... IPv4_SubnetMask=${ip_resp["IPv4Addresses"][0]["SubnetMask"]} MACAddress=${ip_resp["MACAddress"]} 129 ... IPv4StaticAddresses=${${static_exists}} 130 131 [Return] &{vmi_ip} 132 133 134Get Immediate Child Parameter From VMI Network Interface 135 [Documentation] Get immediate child parameter from VMI network interface. 136 [Arguments] ${parameter} ${valid_status_code}=${HTTP_OK} 137 138 # Description of argument(s): 139 # parameter parameter for which value is required. Ex: DHCPEnabled, MACAddress etc. 140 # valid_status_code Expected valid status code from GET request. 141 142 ${resp}= Redfish.Get /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 143 ... valid_status_codes=[${valid_status_code}] 144 145 ${ip_resp}= Evaluate json.loads('''${resp.text}''') json 146 ${value}= Set Variable If '${parameter}' != 'DHCPEnabled' ${ip_resp["${parameter}"]} 147 ... ${ip_resp["DHCPv4"]["${parameter}"]} 148 149 [Return] ${value} 150 151 152Verify VMI EthernetInterfaces 153 [Documentation] Verify VMI ethernet interfaces. 154 [Arguments] ${valid_status_code}=${HTTP_OK} 155 156 # Description of argument(s): 157 # valid_status_code Expected valid status code from GET request. 158 159 ${resp}= Redfish.Get /redfish/v1/Systems/hypervisor/EthernetInterfaces 160 ... valid_status_codes=[${valid_status_code}] 161 162 ${resp}= Evaluate json.loads('''${resp.text}''') json 163 ${interfaces}= Set Variable ${resp["Members"]} 164 165 Should Be Equal As Strings ${interfaces[0]}[@odata.id] 166 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 167 Should Be Equal As Strings ${interfaces[1]}[@odata.id] 168 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth1 169 170 Should Be Equal ${resp["Members@odata.count"]} ${2} 171 172 173Verify VMI Network Interface Details 174 [Documentation] Verify VMI network interface details. 175 [Arguments] ${ip} ${origin} ${gateway} ${netmask} 176 ... ${host_reboot}=${False} ${valid_status_code}=${HTTP_OK} 177 178 # Description of argument(s): 179 # ip VMI IPv4 address. 180 # origin Origin of IPv4 address eg. Static or DHCP. 181 # gateway Gateway for VMI IP. 182 # netmask Subnetmask for VMI IP. 183 # valid_status_code Expected valid status code from GET request. Default is HTTP_OK. 184 # host_reboot Reboot HOST if True. 185 186 Run Keyword If ${host_reboot} == ${True} Run Keywords 187 ... Redfish Power Off AND Redfish Power On AND Redfish.Login 188 189 ${vmi_ip}= Get VMI Network Interface Details ${valid_status_code} 190 Should Be Equal As Strings ${origin} ${vmi_ip["IPv4_AddressOrigin"]} 191 Should Be Equal As Strings ${gateway} ${vmi_ip["IPv4_Gateway"]} 192 Should Be Equal As Strings ${netmask} ${vmi_ip["IPv4_SubnetMask"]} 193 194 Return From Keyword If '${origin}' == 'DHCP' 195 Should Be Equal As Strings ${ip} ${vmi_ip["IPv4_Address"]} 196 197 198Set Static IPv4 Address To VMI 199 [Documentation] Set static IPv4 address to VMI. 200 [Arguments] ${ip} ${gateway} ${netmask} ${valid_status_code}=${HTTP_ACCEPTED} 201 202 # Description of argument(s): 203 # ip VMI IPv4 address. 204 # gateway Gateway for VMI IP. 205 # netmask Subnetmask for VMI IP. 206 # valid_status_code Expected valid status code from GET request. Default is HTTP_ACCEPTED. 207 208 ${data}= Set Variable 209 ... {"IPv4StaticAddresses": [{"Address": "${ip}","SubnetMask": "${netmask}","Gateway": "${gateway}"}]} 210 211 ${resp}= Redfish.Patch /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 body=${data} 212 ... valid_status_codes=[${valid_status_code}] 213 Redfish Power On stack_mode=skip 214 Log To Console ${resp.text} 215 216 217Verify Assigning Static IPv4 Address To VMI 218 [Documentation] Verify assigning static IPv4 address to VMI. 219 [Arguments] ${ip} ${gateway} ${netmask} ${del_curr_ip}=${True} ${host_reboot}=${True} 220 ... ${valid_status_code}=${HTTP_ACCEPTED} 221 222 # Description of argument(s): 223 # ip VMI IPv4 address. 224 # gateway Gateway for VMI IP. 225 # netmask Subnetmask for VMI IP. 226 # del_curr_ip Delete current VMI static IP if True. 227 # host_reboot True when HOST reboot is required. 228 # valid_status_code Expected valid status code from GET request. Default is HTTP_ACCEPTED. 229 230 # Delete current static IP based on user input. 231 ${curr_origin}= Get Immediate Child Parameter From VMI Network Interface DHCPEnabled 232 Run Keyword If ${curr_origin} == ${False} and ${del_curr_ip} == ${True} Delete VMI IPv4 Address 233 234 Set Static IPv4 Address To VMI ${ip} ${gateway} ${netmask} valid_status_code=${valid_status_code} 235 Return From Keyword If ${valid_status_code} != ${HTTP_ACCEPTED} 236 237 Verify VMI Network Interface Details ${ip} Static ${gateway} ${netmask} host_reboot=${host_reboot} 238 239 240Delete VMI IPv4 Address 241 [Documentation] Delete VMI IPv4 address. 242 [Arguments] ${delete_param}=IPv4StaticAddresses ${valid_status_code}=${HTTP_ACCEPTED} 243 244 # Description of argument(s): 245 # delete_param Parameter to be deleted eg. IPv4StaticAddresses or IPv4Addresses. 246 # Default is IPv4StaticAddresses. 247 # valid_status_code Expected valid status code from PATCH request. Default is HTTP_OK. 248 249 ${data}= Set Variable {"${delete_param}": [${Null}]} 250 ${resp}= Redfish.Patch /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 body=${data} 251 ... valid_status_codes=[${valid_status_code}] 252 253 254Set VMI IPv4 Origin 255 [Documentation] Set VMI IPv4 origin. 256 [Arguments] ${dhcp_enabled}=${False} ${valid_status_code}=${HTTP_ACCEPTED} 257 258 # Description of argument(s): 259 # dhcp_enabled True if user wants to enable DHCP. Default is Static, hence value is set to False. 260 # valid_status_code Expected valid status code from PATCH request. Default is HTTP_OK. 261 262 ${data}= Set Variable If ${dhcp_enabled} == ${False} ${DISABLE_DHCP} ${ENABLE_DHCP} 263 ${resp}= Redfish.Patch /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 body=${data} 264 ... valid_status_codes=[${valid_status_code}] 265 266 267Switch VMI IPv4 Origin And Verify Details 268 [Documentation] Switch VMI IPv4 origin and verify details. 269 [Arguments] ${host_reboot}=${False} 270 271 # Description of argument(s): 272 # host_reboot Reboot HOST if True. 273 274 ${curr_mode}= Get Immediate Child Parameter From VMI Network Interface DHCPEnabled 275 ${dhcp_enabled}= Set Variable If ${curr_mode} == ${False} ${True} ${False} 276 277 ${default}= Set Variable 0.0.0.0 278 ${origin}= Set Variable If ${curr_mode} == ${False} DHCP Static 279 Set VMI IPv4 Origin ${dhcp_enabled} ${HTTP_ACCEPTED} 280 Verify VMI Network Interface Details ${default} ${origin} ${default} ${default} ${host_reboot} 281 282 [Return] ${origin} 283