1*** Settings *** 2Documentation Test BMC multiple network interface functionalities. 3 4# User input BMC IP for the eth1. 5# Use can input as -v OPENBMC_HOST_1:xx.xxx.xx from command line. 6Library ../../lib/bmc_redfish.py https://${OPENBMC_HOST_1}:${HTTPS_PORT} 7... ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} WITH NAME Redfish1 8 9Resource ../../lib/resource.robot 10Resource ../../lib/common_utils.robot 11Resource ../../lib/connection_client.robot 12Resource ../../lib/bmc_network_utils.robot 13Resource ../../lib/openbmc_ffdc.robot 14Resource ../../lib/bmc_ldap_utils.robot 15Resource ../../lib/snmp/resource.robot 16Resource ../../lib/snmp/redfish_snmp_utils.robot 17Resource ../../lib/certificate_utils.robot 18Library ../../lib/jobs_processing.py 19Library OperatingSystem 20 21Suite Setup Suite Setup Execution 22Test Teardown FFDC On Test Case Fail 23Suite Teardown Run Keywords Redfish1.Logout AND Redfish.Logout 24 25*** Variables *** 26 27${cmd_prefix} ipmitool -I lanplus -C 17 -p 623 -U ${OPENBMC_USERNAME} -P ${OPENBMC_PASSWORD} 28${test_ipv4_addr} 10.7.7.7 29${test_ipv4_addr2} 10.7.7.8 30${test_subnet_mask} 255.255.255.0 31 32*** Test Cases *** 33 34Verify Both Interfaces BMC IP Addresses Accessible Via SSH 35 [Documentation] Verify both interfaces (eth0, eth1) BMC IP addresses accessible via SSH. 36 [Tags] Verify_Both_Interfaces_BMC_IP_Addresses_Accessible_Via_SSH 37 38 Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} host=${OPENBMC_HOST} 39 Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} host=${OPENBMC_HOST_1} 40 Close All Connections 41 42 43Verify Redfish Works On Both Interfaces 44 [Documentation] Verify access BMC with both interfaces (eth0, eth1) IP addresses via Redfish. 45 [Tags] Verify_Redfish_Works_On_Both_Interfaces 46 [Teardown] Run Keywords 47 ... Configure Hostname ${hostname} AND Validate Hostname On BMC ${hostname} 48 49 Redfish1.Login 50 Redfish.Login 51 52 ${hostname}= Redfish.Get Attribute ${REDFISH_NW_PROTOCOL_URI} HostName 53 ${data}= Create Dictionary HostName=openbmc 54 Redfish1.patch ${REDFISH_NW_ETH_IFACE}eth1 body=&{data} 55 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] 56 57 Validate Hostname On BMC openbmc 58 59 ${resp1}= Redfish.Get ${REDFISH_NW_ETH_IFACE}eth0 60 ${resp2}= Redfish1.Get ${REDFISH_NW_ETH_IFACE}eth1 61 Should Be Equal ${resp1.dict['HostName']} ${resp2.dict['HostName']} 62 63 64Verify LDAP Login Works When Eth1 IP Is Not Configured 65 [Documentation] Verify LDAP login works when eth1 IP is erased. 66 [Tags] Verify_LDAP_Login_Works_When_Eth1_IP_Is_Not_Configured 67 [Setup] Run Keywords Set Test Variable ${CHANNEL_NUMBER} ${SECONDARY_CHANNEL_NUMBER} 68 ... AND Delete IP Address ${OPENBMC_HOST_1} 69 ... AND Redfish.Login 70 [Teardown] Run Keywords Redfish.Logout AND 71 ... Add IP Address ${OPENBMC_HOST_1} ${eth1_subnet_mask} ${eth1_gateway} 72 73 Create LDAP Configuration 74 Redfish.Logout 75 Redfish.Login ${LDAP_USER} ${LDAP_USER_PASSWORD} 76 77 78Verify LDAP Login Works When Both Interfaces Are Configured 79 [Documentation] Verify LDAP login works when both interfaces are configured. 80 [Tags] Verify_LDAP_Login_Works_When_Both_Interfaces_Are_Configured 81 [Setup] Redfish.Login 82 [Teardown] Redfish.Logout 83 84 Create LDAP Configuration 85 Redfish.Logout 86 Redfish.Login ${LDAP_USER} ${LDAP_USER_PASSWORD} 87 88 89Verify Secure LDAP Login Works When Both Interfaces Are Configured 90 [Documentation] Verify Secure LDAP login works when both the interfaces are configured. 91 [Tags] Verify_Secure_LDAP_Login_Works_When_Both_Interfaces_Are_Configured 92 [Setup] Redfish.Login 93 [Teardown] Redfish.Logout 94 95 Create LDAP Configuration ${LDAP_TYPE} ${LDAP_SERVER_URI_1} ${LDAP_BIND_DN} 96 ... ${LDAP_BIND_DN_PASSWORD} ${LDAP_BASE_DN} 97 Redfish.Logout 98 Redfish.Login ${LDAP_USER} ${LDAP_USER_PASSWORD} 99 100 101Verify SNMP Works When Eth1 IP Is Not Configured 102 [Documentation] Verify SNMP works when eth1 IP is not configured. 103 [Tags] Verify_SNMP_Works_When_Eth1_IP_Is_Not_Configured 104 [Setup] Run Keywords Set Test Variable ${CHANNEL_NUMBER} ${SECONDARY_CHANNEL_NUMBER} 105 ... AND Delete IP Address ${OPENBMC_HOST_1} 106 [Teardown] Run Keywords Redfish.Login AND 107 ... Add IP Address ${OPENBMC_HOST_1} ${eth1_subnet_mask} ${eth1_gateway} 108 109 Create Error On BMC And Verify Trap 110 111 112Disable And Enable Eth0 Interface 113 [Documentation] Disable and Enable eth0 ethernet interface via redfish. 114 [Tags] Disable_And_Enable_Eth0_Interface 115 [Template] Set BMC Ethernet Interfaces State 116 117 # interface_ip interface enabled 118 ${OPENBMC_HOST} eth0 ${False} 119 ${OPENBMC_HOST} eth0 ${True} 120 121 122Verify Both Interfaces Access Concurrently Via Redfish 123 [Documentation] Verify both interfaces access conurrently via redfish. 124 [Tags] Verify_Both_Interfaces_Access_Concurrently_Via_Redfish 125 126 Redfish.Login 127 Redfish1.Login 128 129 ${dict}= Execute Process Multi Keyword ${2} 130 ... Redfish.Patch ${REDFISH_NW_ETH_IFACE}eth0 body={'DHCPv4':{'UseDNSServers':${True}}} 131 ... Redfish1.Patch ${REDFISH_NW_ETH_IFACE}eth1 body={'DHCPv4':{'UseDNSServers':${True}}} 132 133 Dictionary Should Not Contain Value ${dict} False 134 ... msg=One or more operations has failed. 135 136 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}eth0 137 ${resp1}= Redfish1.Get ${REDFISH_NW_ETH_IFACE}eth1 138 139 Should Be Equal ${resp.dict["DHCPv4"]['UseDNSServers']} ${True} 140 Should Be Equal ${resp1.dict["DHCPv4"]['UseDNSServers']} ${True} 141 142Able To Access Serial Console Via Both Network Interfaces 143 [Documentation] Able to access serial console via both network interfaces. 144 [Tags] Able_To_Access_Serial_Console_Via_Both_Network_Interfaces 145 146 Open Connection And Log In host=${OPENBMC_HOST} port=2200 147 Open Connection And Log In host=${OPENBMC_HOST_1} port=2200 148 Close All Connections 149 150Verify IPMI Works On Both Network Interfaces 151 [Documentation] Verify IPMI works on both network interfaces. 152 [Tags] Verify_IPMI_Works_On_Both_Network_Interfaces 153 154 Run IPMI ${OPENBMC_HOST_1} power on 155 ${status1}= Run IPMI ${OPENBMC_HOST} power status 156 ${status2}= Run IPMI ${OPENBMC_HOST_1} power status 157 Should Be Equal ${status1} ${status2} 158 159Verify Modifying IP Address Multiple Times On Interface 160 [Documentation] Verify modifying IP address multiple times on interface. 161 [Tags] Verify_Modifying_IP_Address_Multiple_Times_On_Interface 162 [Teardown] Run Keywords 163 ... Delete IP Address ${test_ipv4_addr} AND Test Teardown 164 165 ${test_gateway}= Get BMC Default Gateway 166 Add IP Address ${test_ipv4_addr} ${test_subnet_mask} ${test_gateway} 167 Update IP Address ${test_ipv4_addr} ${test_ipv4_addr2} ${test_subnet_mask} ${test_gateway} 168 Update IP Address ${test_ipv4_addr2} ${test_ipv4_addr} ${test_subnet_mask} ${test_gateway} 169 Run Keyword Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 170 Run Keyword Wait For Host To Ping ${OPENBMC_HOST_1} ${NETWORK_TIMEOUT} 171 172Verify Able To Load Certificates Via Eth1 IP Address 173 [Documentation] Verify able to load certificates via eth1 IP address. 174 [Setup] Create Directory certificate_dir 175 [Tags] Verify_Able_To_Load_Certificates_Via_Eth1_IP_Address 176 [Teardown] Run Keywords Remove Directory certificate_dir recursive=True 177 ... AND FFDC On Test Case Fail 178 [Template] Install Certificate Via Redfish And Verify 179 180 # cert_type cert_format expected_status 181 CA Valid Certificate ok 182 Client Valid Certificate Valid Privatekey ok 183 184*** Keywords *** 185 186Get Network Configuration Using Channel Number 187 [Documentation] Get ethernet interface. 188 [Arguments] ${channel_number} 189 190 # Description of argument(s): 191 # channel_number Ethernet channel number, 1 is for eth0 and 2 is for eth1 (e.g. "1"). 192 193 ${active_channel_config}= Get Active Channel Config 194 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']} 195 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 196 197 @{network_configurations}= Get From Dictionary ${resp.dict} IPv4StaticAddresses 198 [Return] @{network_configurations} 199 200 201Suite Setup Execution 202 [Documentation] Do suite setup task. 203 204 Valid Value OPENBMC_HOST_1 205 206 # Check both interfaces are configured and reachable. 207 Ping Host ${OPENBMC_HOST} 208 Ping Host ${OPENBMC_HOST_1} 209 210 ${network_configurations}= Get Network Configuration Using Channel Number ${SECONDARY_CHANNEL_NUMBER} 211 FOR ${network_configuration} IN @{network_configurations} 212 213 Run Keyword If '${network_configuration['Address']}' == '${OPENBMC_HOST_1}' 214 ... Run Keywords Set Suite Variable ${eth1_subnet_mask} ${network_configuration['SubnetMask']} 215 ... AND Set Suite Variable ${eth1_gateway} ${network_configuration['Gateway']} 216 ... AND Exit For Loop 217 218 END 219 220 221Set BMC Ethernet Interfaces State 222 [Documentation] Set BMC ethernet interface state. 223 [Arguments] ${interface_ip} ${interface} ${enabled} 224 [Teardown] Redfish1.Logout 225 226 # Description of argument(s): 227 # interface_ip IP address of ethernet interface. 228 # interface The ethernet interface name (eg. eth0 or eth1). 229 # enabled Indicates interface should be enabled (eg. True or False). 230 231 Redfish1.Login 232 233 ${data}= Create Dictionary InterfaceEnabled=${enabled} 234 235 Redfish1.patch ${REDFISH_NW_ETH_IFACE}${interface} body=&{data} 236 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] 237 238 Sleep ${NETWORK_TIMEOUT}s 239 ${interface_status}= Redfish1.Get Attribute ${REDFISH_NW_ETH_IFACE}${interface} InterfaceEnabled 240 Should Be Equal ${interface_status} ${enabled} 241 242 ${status}= Run Keyword And Return Status Ping Host ${interface_ip} 243 244 Run Keyword If ${enabled} == ${True} Should Be Equal ${status} ${True} 245 ... ELSE Should Be Equal ${status} ${False} 246 247 248Run IPMI 249 [Documentation] Run IPMI command. 250 [Arguments] ${host} ${sub_cmd} 251 252 # Description of argument(s): 253 # host BMC host name or IP address. 254 # sub_cmd The IPMI command string to be executed. 255 256 ${rc} ${output}= Run And Return Rc And Output ${cmd_prefix} -H ${host} ${sub_cmd} 257 Should Be Equal As Strings ${rc} 0 258 [Return] ${output} 259 260 261Install Certificate Via Redfish And Verify 262 [Documentation] Install and verify certificate using Redfish. 263 [Arguments] ${cert_type} ${cert_format} ${expected_status} ${delete_cert}=${True} 264 265 # Description of argument(s): 266 # cert_type Certificate type (e.g. "Client" or "CA"). 267 # cert_format Certificate file format 268 # (e.g. "Valid_Certificate_Valid_Privatekey"). 269 # expected_status Expected status of certificate replace Redfish 270 # request (i.e. "ok" or "error"). 271 # delete_cert Certificate will be deleted before installing if this True. 272 273 # AUTH_URI is a global variable defined in lib/resource.robot 274 Set Test Variable ${AUTH_URI} https://${OPENBMC_HOST_1} 275 Run Keyword If '${cert_type}' == 'CA' and '${delete_cert}' == '${True}' 276 ... Delete All CA Certificate Via Redfish 277 ... ELSE IF '${cert_type}' == 'Client' and '${delete_cert}' == '${True}' 278 ... Delete Certificate Via BMC CLI ${cert_type} 279 280 ${cert_file_path}= Generate Certificate File Via Openssl ${cert_format} 281 ${bytes}= OperatingSystem.Get Binary File ${cert_file_path} 282 ${file_data}= Decode Bytes To String ${bytes} UTF-8 283 284 ${certificate_uri}= Set Variable If 285 ... '${cert_type}' == 'Client' ${REDFISH_LDAP_CERTIFICATE_URI} 286 ... '${cert_type}' == 'CA' ${REDFISH_CA_CERTIFICATE_URI} 287 288 ${cert_id}= Install Certificate File On BMC ${certificate_uri} ${expected_status} data=${file_data} 289 Logging Installed certificate id: ${cert_id} 290 291 Sleep 30s 292 ${cert_file_content}= OperatingSystem.Get File ${cert_file_path} 293 ${bmc_cert_content}= Run Keyword If '${expected_status}' == 'ok' redfish_utils.Get Attribute 294 ... ${certificate_uri}/${cert_id} CertificateString 295 Run Keyword If '${expected_status}' == 'ok' Should Contain ${cert_file_content} ${bmc_cert_content} 296 [Return] ${cert_id} 297