XYZ network: Verify & delete IP address via REST
This change includes:
1. Threshold prefix length.
2. Lowest prefix length.
3. Get list of all IP addresses via REST.
4. Delete IP address and its object.
5. Handles network loss after modifying IP.
This resolves openbmc/openbmc-test-automation#850
Change-Id: Ic426fc661466cd429c348280d08bdda8dac472d3
Signed-off-by: Prashanth Katti <prkatti1@in.ibm.com>
diff --git a/extended/test_network.robot b/extended/test_network.robot
new file mode 100644
index 0000000..3e66bef
--- /dev/null
+++ b/extended/test_network.robot
@@ -0,0 +1,530 @@
+*** Settings ***
+Documentation Network interface and functionalities test module on BMC.
+
+Resource ../lib/rest_client.robot
+Resource ../lib/utils.robot
+Resource ../lib/bmc_network_utils.robot
+
+Force Tags Network_Test
+
+Library String
+Library SSHLibrary
+
+Test Setup Test Init Setup
+
+*** 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_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 ${XYZ_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 contaning 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 contaning 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 ${hex_ip} 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 ${hex_ip} 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 ${hex_ip} 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} ${0}
+ ... ${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 ${XYZ_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 ${XYZ_NETWORK_MANAGER}/config HostName
+ Validate Hostname On BMC ${hostname}
+
+*** Keywords ***
+
+Test Init Setup
+ [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 ${XYZ_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
+ Should Contain ${route_info} ${gateway_ip}
+ ... msg=Gateway IP address not matching.
+
+Validate MAC on BMC
+ [Documentation] Validate MAC on BMC.
+ [Arguments] ${macaddr}
+
+ # Description of argument(s):
+ # macaddr MAC address of the BMC.
+
+ ${system_mac}= Get BMC MAC Address
+
+ Should Contain ${system_mac} ${macaddr}
+ ... ignore_case=True msg=MAC address does not exist.
+
+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
+ ... ${XYZ_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} 0.3 1
+
+ # 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.