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 104*** Keywords *** 105 106Get VMI Network Interface Details 107 [Documentation] Get VMI network interface details. 108 [Arguments] ${valid_status_code}=${HTTP_OK} 109 110 # Description of argument(s): 111 # valid_status_code Expected valid status code from GET request. 112 113 # Note: It returns a dictionary of VMI eth0 parameters. 114 115 ${active_channel_config}= Get Active Channel Config 116 ${resp}= Redfish.Get 117 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']} 118 ... valid_status_codes=[${valid_status_code}] 119 120 ${ip_resp}= Evaluate json.loads('''${resp.text}''') json 121 122 ${static_exists}= Run Keyword And Ignore Error 123 ... Set Variable ${ip_resp["IPv4StaticAddresses"][0]["Address"]} 124 ${static_exists}= Set Variable If '${static_exists[0]}' == 'PASS' ${True} ${False} 125 126 ${vmi_ip}= Create Dictionary DHCPv4=${${ip_resp["DHCPv4"]["DHCPEnabled"]}} Id=${ip_resp["Id"]} 127 ... Description=${ip_resp["Description"]} IPv4_Address=${ip_resp["IPv4Addresses"][0]["Address"]} 128 ... IPv4_AddressOrigin=${ip_resp["IPv4Addresses"][0]["AddressOrigin"]} Name=${ip_resp["Name"]} 129 ... IPv4_Gateway=${ip_resp["IPv4Addresses"][0]["Gateway"]} 130 ... InterfaceEnabled=${${ip_resp["InterfaceEnabled"]}} 131 ... IPv4_SubnetMask=${ip_resp["IPv4Addresses"][0]["SubnetMask"]} MACAddress=${ip_resp["MACAddress"]} 132 ... IPv4StaticAddresses=${${static_exists}} 133 134 [Return] &{vmi_ip} 135 136 137Get Immediate Child Parameter From VMI Network Interface 138 [Documentation] Get immediate child parameter from VMI network interface. 139 [Arguments] ${parameter} ${valid_status_code}=${HTTP_OK} 140 141 # Description of argument(s): 142 # parameter parameter for which value is required. Ex: DHCPEnabled, MACAddress etc. 143 # valid_status_code Expected valid status code from GET request. 144 145 ${active_channel_config}= Get Active Channel Config 146 ${resp}= Redfish.Get 147 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']} 148 ... valid_status_codes=[${valid_status_code}] 149 150 ${ip_resp}= Evaluate json.loads('''${resp.text}''') json 151 ${value}= Set Variable If '${parameter}' != 'DHCPEnabled' ${ip_resp["${parameter}"]} 152 ... ${ip_resp["DHCPv4"]["${parameter}"]} 153 154 [Return] ${value} 155 156 157Verify VMI EthernetInterfaces 158 [Documentation] Verify VMI ethernet interfaces. 159 [Arguments] ${valid_status_code}=${HTTP_OK} 160 161 # Description of argument(s): 162 # valid_status_code Expected valid status code from GET request. 163 164 ${resp}= Redfish.Get /redfish/v1/Systems/hypervisor/EthernetInterfaces 165 ... valid_status_codes=[${valid_status_code}] 166 167 ${resp}= Evaluate json.loads('''${resp.text}''') json 168 ${interfaces}= Set Variable ${resp["Members"]} 169 170 Should Be Equal As Strings ${interfaces[0]}[@odata.id] 171 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 172 Should Be Equal As Strings ${interfaces[1]}[@odata.id] 173 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth1 174 175 Should Be Equal ${resp["Members@odata.count"]} ${2} 176 177 178Verify VMI Network Interface Details 179 [Documentation] Verify VMI network interface details. 180 [Arguments] ${ip} ${origin} ${gateway} ${netmask} 181 ... ${host_reboot}=${False} ${valid_status_code}=${HTTP_OK} 182 183 # Description of argument(s): 184 # ip VMI IPv4 address. 185 # origin Origin of IPv4 address eg. Static or DHCP. 186 # gateway Gateway for VMI IP. 187 # netmask Subnetmask for VMI IP. 188 # valid_status_code Expected valid status code from GET request. Default is HTTP_OK. 189 # host_reboot Reboot HOST if True. 190 191 Run Keyword If ${host_reboot} == ${True} Run Keywords 192 ... Redfish Power Off AND Redfish Power On AND Redfish.Login 193 194 ${vmi_ip}= Get VMI Network Interface Details ${valid_status_code} 195 Should Be Equal As Strings ${origin} ${vmi_ip["IPv4_AddressOrigin"]} 196 Should Be Equal As Strings ${gateway} ${vmi_ip["IPv4_Gateway"]} 197 Should Be Equal As Strings ${netmask} ${vmi_ip["IPv4_SubnetMask"]} 198 Should Be Equal As Strings ${ip} ${vmi_ip["IPv4_Address"]} 199 200 201Set Static IPv4 Address To VMI 202 [Documentation] Set static IPv4 address to VMI. 203 [Arguments] ${ip} ${gateway} ${netmask} ${valid_status_code}=${HTTP_ACCEPTED} 204 205 # Description of argument(s): 206 # ip VMI IPv4 address. 207 # gateway Gateway for VMI IP. 208 # netmask Subnetmask for VMI IP. 209 # valid_status_code Expected valid status code from GET request. Default is HTTP_ACCEPTED. 210 211 ${data}= Set Variable 212 ... {"IPv4StaticAddresses": [{"Address": "${ip}","SubnetMask": "${netmask}","Gateway": "${gateway}"}]} 213 214 ${active_channel_config}= Get Active Channel Config 215 ${resp}= Redfish.Patch 216 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']} 217 ... body=${data} valid_status_codes=[${valid_status_code}] 218 Redfish Power On stack_mode=skip 219 Log To Console ${resp.text} 220 221 222Verify Assigning Static IPv4 Address To VMI 223 [Documentation] Verify assigning static IPv4 address to VMI. 224 [Arguments] ${ip} ${gateway} ${netmask} ${del_curr_ip}=${True} ${host_reboot}=${True} 225 ... ${valid_status_code}=${HTTP_ACCEPTED} 226 227 # Description of argument(s): 228 # ip VMI IPv4 address. 229 # gateway Gateway for VMI IP. 230 # netmask Subnetmask for VMI IP. 231 # del_curr_ip Delete current VMI static IP if True. 232 # host_reboot True when HOST reboot is required. 233 # valid_status_code Expected valid status code from GET request. Default is HTTP_ACCEPTED. 234 235 # Delete current static IP based on user input. 236 ${curr_origin}= Get Immediate Child Parameter From VMI Network Interface DHCPEnabled 237 Run Keyword If ${curr_origin} == ${False} and ${del_curr_ip} == ${True} Delete VMI IPv4 Address 238 239 Set Static IPv4 Address To VMI ${ip} ${gateway} ${netmask} valid_status_code=${valid_status_code} 240 Return From Keyword If ${valid_status_code} != ${HTTP_ACCEPTED} 241 242 Verify VMI Network Interface Details ${ip} Static ${gateway} ${netmask} host_reboot=${host_reboot} 243 244 245Delete VMI IPv4 Address 246 [Documentation] Delete VMI IPv4 address. 247 [Arguments] ${delete_param}=IPv4StaticAddresses ${valid_status_code}=${HTTP_ACCEPTED} 248 249 # Description of argument(s): 250 # delete_param Parameter to be deleted eg. IPv4StaticAddresses or IPv4Addresses. 251 # Default is IPv4StaticAddresses. 252 # valid_status_code Expected valid status code from PATCH request. Default is HTTP_OK. 253 254 ${data}= Set Variable {"${delete_param}": [${Null}]} 255 ${active_channel_config}= Get Active Channel Config 256 ${resp}= Redfish.Patch 257 ... /redfish/v1/Systems/hypervisor/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']} 258 ... body=${data} valid_status_codes=[${valid_status_code}] 259 260 261Set VMI IPv4 Origin 262 [Documentation] Set VMI IPv4 origin. 263 [Arguments] ${dhcp_enabled}=${False} ${valid_status_code}=${HTTP_ACCEPTED} 264 265 # Description of argument(s): 266 # dhcp_enabled True if user wants to enable DHCP. Default is Static, hence value is set to False. 267 # valid_status_code Expected valid status code from PATCH request. Default is HTTP_OK. 268 269 ${data}= Set Variable If ${dhcp_enabled} == ${False} ${DISABLE_DHCP} ${ENABLE_DHCP} 270 ${resp}= Redfish.Patch /redfish/v1/Systems/hypervisor/EthernetInterfaces/eth0 body=${data} 271 ... valid_status_codes=[${valid_status_code}] 272 273 274Switch VMI IPv4 Origin And Verify Details 275 [Documentation] Switch VMI IPv4 origin and verify details. 276 [Arguments] ${host_reboot}=${False} 277 278 # Description of argument(s): 279 # host_reboot Reboot HOST if True. 280 281 ${curr_mode}= Get Immediate Child Parameter From VMI Network Interface DHCPEnabled 282 ${dhcp_enabled}= Set Variable If ${curr_mode} == ${False} ${True} ${False} 283 284 ${default}= Set Variable 0.0.0.0 285 ${origin}= Set Variable If ${curr_mode} == ${False} DHCP Static 286 Set VMI IPv4 Origin ${dhcp_enabled} ${HTTP_ACCEPTED} 287 Verify VMI Network Interface Details ${default} ${origin} ${default} ${default} ${host_reboot} 288 289 [Return] ${origin} 290