*** 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

Force Tags  Network_Test

Library  String
Library  SSHLibrary

Test Setup     Test Setup Execution
Test Teardown  Close All Connections

*** 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 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             ${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.
