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