| *** Settings *** |
| Documentation Network interface and functionalities test module on BMC. |
| |
| Resource ../lib/ipmi_client.robot |
| Resource ../lib/rest_client.robot |
| Resource ../lib/utils.robot |
| Resource ../lib/bmc_network_utils.robot |
| Resource ../lib/openbmc_ffdc.robot |
| |
| Force Tags Network_Test |
| |
| Library String |
| Library SSHLibrary |
| |
| Test Setup Test Setup Execution |
| Test Teardown Test Teardown Execution |
| |
| *** Variables *** |
| |
| ${alpha_ip} xx.xx.xx.xx |
| |
| # 10.x.x.x series is a private IP address range and does not exist in |
| # our network, so this is chosen to avoid IP conflict. |
| |
| ${valid_ip} 10.6.6.6 |
| ${valid_ip2} 10.6.6.7 |
| @{valid_ips} ${valid_ip} ${valid_ip2} |
| ${valid_gateway} 10.6.6.1 |
| ${valid_prefix_len} ${24} |
| ${broadcast_ip} 10.6.6.255 |
| ${loopback_ip} 127.0.0.1 |
| ${multicast_ip} 224.6.6.255 |
| ${out_of_range_ip} 10.6.6.256 |
| |
| # There will be 4 octets in IP address (e.g. xx.xx.xx.xx) |
| # but trying to configure xx.xx.xx |
| |
| ${less_octet_ip} 10.3.36 |
| |
| # For the address 10.6.6.6, the 10.6.6.0 portion describes the |
| # network ID and the 6 describe the host. |
| |
| ${network_id} 10.6.6.0 |
| ${hex_ip} 0xa.0xb.0xc.0xd |
| ${negative_ip} 10.-6.-6.6 |
| |
| *** Test Cases *** |
| |
| Get BMC IPv4 Address And Verify |
| [Documentation] Get BMC IPv4 address and verify. |
| [Tags] Get_BMC_IPv4_Address_And_Verify |
| |
| :FOR ${ipv4_uri} IN @{IPv4_URI_List} |
| \ ${ipv4_addr}= Read Attribute ${ipv4_uri} Address |
| \ Validate IP on BMC ${ipv4_addr} |
| |
| Verify IPv4 Prefix Length |
| [Documentation] Get prefix length and verify. |
| [Tags] Verify_IPv4_Prefix_Length |
| |
| :FOR ${ipv4_uri} IN @{IPv4_URI_List} |
| \ ${prefix_length}= Read Attribute ${ipv4_uri} PrefixLength |
| \ Validate Prefix Length On BMC ${prefix_length} |
| |
| Verify Gateway Address |
| [Documentation] Get gateway address and verify. |
| [Tags] Verify_Gateway_Address |
| |
| :FOR ${ipv4_uri} IN @{IPv4_URI_List} |
| \ ${gateway_ip}= Read Attribute ${ipv4_uri} Gateway |
| \ Validate Route On BMC ${gateway_ip} |
| |
| Verify MAC Address |
| [Documentation] Get MAC address and verify. |
| [Tags] Verify_MAC_Address |
| ${macaddr}= Read Attribute ${NETWORK_MANAGER}/eth0 MACAddress |
| Validate MAC On BMC ${macaddr} |
| |
| Add New Valid IP And Verify |
| [Documentation] Add new IP address and verify. |
| [Tags] Add_New_Valid_IP_And_Verify |
| |
| Configure Network Settings ${valid_ip} ${valid_prefix_len} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| Verify IP Address Via REST And Delete ${valid_ip} |
| |
| Configure Invalid IP String |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${alpha_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure invalid IP address which is a string. |
| [Tags] Configure_Invalid_IP_String |
| |
| [Template] Configure Network Settings |
| |
| Configure Out Of Range IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${out_of_range_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure out-of-range IP address. |
| [Tags] Configure_Out_Of_Range_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Broadcast IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${broadcast_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure broadcast IP address. |
| [Tags] Configure_Broadcast_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Multicast IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${multicast_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure multicast IP address. |
| [Tags] Configure_Multicast_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Loopback IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${loopback_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure loopback IP address. |
| [Tags] Configure_Loopback_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Network ID |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${network_id} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure network ID IP address. |
| [Tags] Configure_Network_ID |
| |
| [Template] Configure Network Settings |
| |
| Configure Less Octet IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${less_octet_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure less octet IP address. |
| [Tags] Configure_Less_Octet_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Empty IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${EMPTY} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure less octet IP address. |
| [Tags] Configure_Empty_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Special Char IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| @@@.%%.44.11 ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure invalid IP address containing special chars. |
| [Tags] Configure_Special_Char_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Hexadecimal IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${hex_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure invalid IP address containing hex value. |
| [Tags] Configure_Hexadecimal_IP |
| |
| [Template] Configure Network Settings |
| |
| Configure Negative Octet IP |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${negative_ip} ${valid_prefix_len} ${valid_gateway} error |
| |
| [Documentation] Configure invalid IP address containing negative octet. |
| [Tags] Configure_Negative_Octet_IP |
| |
| [Template] Configure Network Settings |
| |
| Add New Valid IP With Blank Gateway |
| [Documentation] Add new IP with blank gateway. |
| [Tags] Add_New_Valid_IP_With_Blank_Gateway |
| |
| Configure Network Settings ${valid_ip} ${valid_prefix_len} ${EMPTY} |
| ... valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| Verify IP Address Via REST And Delete ${valid_ip} |
| |
| Configure Invalid Gateway String |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${alpha_ip} error |
| |
| [Documentation] Configure invalid IP address to a gateway which is |
| ... an alpha string and expect an error. |
| [Tags] Configure_Invalid_Gateway_String |
| |
| [Template] Configure Network Settings |
| |
| Configure Out Of Range IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${out_of_range_ip} error |
| |
| [Documentation] Configure out-of-range IP for gateway and expect an error. |
| [Tags] Configure_Out_Of_Range_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Broadcast IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${broadcast_ip} error |
| |
| [Documentation] Configure broadcast IP for gateway and expect an error. |
| [Tags] Configure_Broadcast_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Loopback IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${loopback_ip} error |
| |
| [Documentation] Configure loopback IP for gateway and expect an error. |
| [Tags] Configure_Loopback_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Multicast IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${multicast_ip} error |
| |
| [Documentation] Configure multicast IP for gateway and expect an error. |
| [Tags] Configure_Multicast_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Network ID For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${network_id} error |
| |
| [Documentation] Configure network ID for gateway and expect an error. |
| [Tags] Configure_Network_ID_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Less Octet IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${less_octet_ip} error |
| |
| [Documentation] Configure less octet IP for gateway and expect an error. |
| [Tags] Configure_Less_Octet_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Special Char IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} @@@.%%.44.11 error |
| |
| [Documentation] Configure special char IP for gateway and expect an error. |
| [Tags] Configure_Special_Char_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Hexadecimal IP For Gateway |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} ${valid_prefix_len} ${hex_ip} error |
| |
| [Documentation] Configure hexadecimal IP for gateway and expect an error. |
| [Tags] Configure_Hexadecimal_IP_For_Gateway |
| |
| [Template] Configure Network Settings |
| |
| Configure Out Of Range Prefix Length |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} 33 ${valid_gateway} error |
| |
| [Documentation] Configure out-of-range prefix length and expect an error. |
| [Tags] Configure_Out_Of_Range_Prefix_Length |
| |
| [Template] Configure Network Settings |
| |
| Configure Negative Value For Prefix Length |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} -10 ${valid_gateway} error |
| |
| [Documentation] Configure negative prefix length and expect an error. |
| [Tags] Configure_Negative_Value_For_Prefix_Length |
| |
| [Template] Configure Network Settings |
| |
| Configure Non Numeric Value For Prefix Length |
| # IP Address Prefix_length Gateway_IP Expected_Result |
| ${valid_ip} xx ${valid_gateway} error |
| |
| [Documentation] Configure non numeric value prefix length and expect |
| ... an error. |
| [Tags] Configure_String_Value_For_Prefix_Length |
| |
| [Template] Configure Network Settings |
| |
| Add Fourth Octet Threshold IP And Verify |
| [Documentation] Add fourth octet threshold IP and verify. |
| [Tags] Add_Fourth_Octet_Threshold_IP_And_Verify |
| |
| Configure Network Settings 10.6.6.254 ${valid_prefix_len} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| |
| Verify IP Address Via REST And Delete 10.6.6.254 |
| |
| Add Third Octet Threshold IP And Verify |
| [Documentation] Add third octet threshold IP and verify. |
| [Tags] Add_Third_Octet_Threshold_IP_And_Verify |
| |
| Configure Network Settings 10.6.255.6 ${valid_prefix_len} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| |
| Verify IP Address Via REST And Delete 10.6.255.6 |
| |
| Add Second Octet Threshold IP And Verify |
| [Documentation] Add second octet threshold IP and verify. |
| [Tags] Add_Second_Octet_Threshold_IP_And_Verify |
| |
| Configure Network Settings 10.255.6.6 ${valid_prefix_len} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| |
| Verify IP Address Via REST And Delete 10.255.6.6 |
| |
| Add First Octet Threshold IP And Verify |
| [Documentation] Add first octet threshold IP and verify. |
| [Tags] Add_First_Octet_Threshold_IP_And_Verify |
| |
| Configure Network Settings 223.6.6.6 ${valid_prefix_len} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| |
| Verify IP Address Via REST And Delete 223.6.6.6 |
| |
| Configure Lowest Prefix Length |
| [Documentation] Configure lowest prefix length. |
| [Tags] Configure_Lowest_Prefix_Length |
| |
| Configure Network Settings ${valid_ip} ${1} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| Verify IP Address Via REST And Delete ${valid_ip} |
| |
| Configure Threshold Prefix Length |
| [Documentation] Configure threshold prefix length. |
| [Tags] Configure_Threshold_Prefix_Length |
| |
| Configure Network Settings ${valid_ip} ${32} |
| ... ${valid_gateway} valid |
| |
| # Verify whether new IP object is created for the given IP via REST. |
| # Delete IP address and IP object after verification. |
| Verify IP Address Via REST And Delete ${valid_ip} |
| |
| Verify Default Gateway |
| [Documentation] Verify default gateway. |
| [Tags] Verify that the default gateway has a valid route. |
| |
| ${default_gw}= Read Attribute ${NETWORK_MANAGER}/config |
| ... DefaultGateway |
| Validate Route On BMC ${default_gw} |
| |
| Verify Hostname |
| [Documentation] Verify that the hostname read via REST is the same as the |
| ... hostname configured on system. |
| [Tags] Verify_Hostname |
| |
| ${hostname}= Read Attribute ${NETWORK_MANAGER}/config HostName |
| Validate Hostname On BMC ${hostname} |
| |
| Run IPMI With Multiple IPs Configured |
| [Documentation] Test out-of-band IPMI command with multiple IPs configured. |
| [Tags] Run_IPMI_With_Multiple_IPs_Configured |
| [Teardown] Clear IP Address |
| |
| # Configure two IPs and verify. |
| |
| :FOR ${loc_valid_ip} IN @{valid_ips} |
| \ Configure Network Settings ${loc_valid_ip} ${valid_prefix_len} |
| \ ... ${valid_gateway} valid |
| |
| @{ip_uri_list}= Get IPv4 URI List |
| @{ip_list}= Get List Of IP Address Via REST @{ip_uri_list} |
| |
| List Should Contain Sub List ${ip_list} ${valid_ips} |
| ... msg=IP address is not configured. |
| |
| Run External IPMI Standard Command chassis bootparam get 5 |
| |
| *** Keywords *** |
| |
| Clear IP Address |
| [Documentation] Delete the IPs |
| @{ip_uri_list}= Get IPv4 URI List |
| :FOR ${loc_valid_ip} IN @{valid_ips} |
| \ Delete IP And Object ${loc_valid_ip} @{ip_uri_list} |
| |
| Test Setup Execution |
| [Documentation] Network setup. |
| Open Connection And Login |
| |
| @{IPv4_URI_List}= Get IPv4 URI List |
| Set Test Variable @{IPv4_URI_List} |
| |
| # Get BMC IP address and prefix length. |
| ${ip_data}= Get BMC IP Info |
| Set Test Variable ${ip_data} |
| |
| Get IPv4 URI List |
| [Documentation] Get all IPv4 URIs. |
| |
| # Sample output: |
| # "data": [ |
| # "/xyz/openbmc_project/network/eth0/ipv4/e9767624", |
| # "/xyz/openbmc_project/network/eth0/ipv4/31f4ce8b" |
| # ], |
| |
| @{ipv4_uri_list}= Read Properties ${NETWORK_MANAGER}/eth0/ipv4/ |
| Should Not Be Empty ${ipv4_uri_list} msg=IPv4 URI list is empty. |
| |
| [Return] @{ipv4_uri_list} |
| |
| Validate IP On BMC |
| [Documentation] Validate IP on BMC. |
| [Arguments] ${ip_address} ${ip_info}=${ip_data} |
| |
| # Description of argument(s): |
| # ip_address IP address of the system. |
| # ip_info List of IP address and prefix length values. |
| |
| Should Contain Match ${ip_info} ${ip_address}/* |
| ... msg=IP address does not exist. |
| |
| Verify IP Address Via REST And Delete |
| [Documentation] Verify IP address via REST and delete. |
| [Arguments] ${ip_addr} |
| |
| # Description of argument(s): |
| # ip_addr IP address to be verified. |
| |
| @{ip_uri_list}= Get IPv4 URI List |
| @{ip_list}= Get List Of IP Address Via REST @{ip_uri_list} |
| |
| List Should Contain Value ${ip_list} ${ip_addr} |
| ... msg=IP address is not configured. |
| |
| # If IP address is configured, delete it. |
| Delete IP And Object ${ip_addr} @{ip_uri_list} |
| |
| Validate Prefix Length On BMC |
| [Documentation] Validate prefix length on BMC. |
| [Arguments] ${prefix_length} |
| |
| # Description of argument(s): |
| # prefix_length It indicates netmask, netmask value 255.255.255.0 |
| # is equal to prefix length 24. |
| # ip_data Suite variable which has list of IP address and |
| # prefix length values. |
| |
| Should Contain Match ${ip_data} */${prefix_length} |
| ... msg=Prefix length does not exist. |
| |
| Validate Route On BMC |
| [Documentation] Validate route. |
| [Arguments] ${gateway_ip} |
| |
| # Description of argument(s): |
| # gateway_ip Gateway IP address. |
| |
| ${route_info}= Get BMC Route Info |
| |
| # If gateway IP is empty or 0.0.0.0 it will not have route entry. |
| |
| Run Keyword If '${gateway_ip}' == '0.0.0.0' |
| ... Pass Execution Gatway IP is "0.0.0.0". |
| ... ELSE |
| ... Should Contain ${route_info} ${gateway_ip} |
| ... msg=Gateway IP address not matching. |
| |
| |
| Configure Network Settings |
| [Documentation] Configure network settings. |
| [Arguments] ${ip_addr} ${prefix_len} ${gateway_ip} ${expected_result} |
| |
| # Description of argument(s): |
| # ip_addr IP address of BMC. |
| # prefix_len Prefix length. |
| # gateway_ip Gateway IP address. |
| # expected_result Expected status of network setting configuration. |
| |
| @{ip_parm_list}= Create List xyz.openbmc_project.Network.IP.Protocol.IPv4 |
| ... ${ip_addr} ${prefix_len} ${gateway_ip} |
| |
| ${data}= Create Dictionary data=@{ip_parm_list} |
| |
| Run Keyword And Ignore Error OpenBMC Post Request |
| ... ${NETWORK_MANAGER}/eth0/action/IP data=${data} |
| |
| # After any modification on network interface, BMC restarts network |
| # module, wait until it is reachable. |
| |
| Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_RETRY_TIME} |
| ... ${NETWORK_TIMEOUT} |
| |
| # Verify whether new IP address is populated on BMC system. |
| # It should not allow to configure invalid settings. |
| |
| ${ip_data}= Get BMC IP Info |
| ${status}= Run Keyword And Return Status |
| ... Validate IP On BMC ${ip_addr} ${ip_data} |
| |
| Run Keyword If '${expected_result}' == 'error' |
| ... Should Be Equal ${status} ${False} |
| ... msg=Allowing the configuration of an invalid IP. |
| ... ELSE |
| ... Should Be Equal ${status} ${True} |
| ... msg=Not allowing the configuration of a valid IP. |
| |
| Validate Hostname On BMC |
| [Documentation] Verify that the hostname read via REST is the same as the |
| ... hostname configured on system. |
| [Arguments] ${hostname} |
| |
| # Description of argument(s): |
| # hostname A hostname value which is to be compared to the hostname |
| # configured on system. |
| |
| ${sys_hostname}= Get BMC Hostname |
| |
| Should Contain ${sys_hostname} ${hostname} |
| ... ignore_case=True msg=Hostname does not exist. |
| |
| Test Teardown Execution |
| [Documentation] Do the post test teardown. |
| |
| FFDC On Test Case Fail |
| Close All Connections |