*** 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 address is populated on BMC system.
    ${ip_info}=  Get BMC IP Info
    Validate IP On BMC  ${valid_ip}  ${ip_info}

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 address is populated on BMC system.
    ${ip_info}=  Get BMC IP Info
    Validate IP On BMC  ${valid_ip}  ${ip_info}

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 address is populated on BMC system.
    ${ip_info}=  Get BMC IP Info
    Validate IP On BMC  10.6.6.254  ${ip_info}

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 address is populated on BMC system.
    ${ip_info}=  Get BMC IP Info
    Validate IP On BMC  10.6.255.6  ${ip_info}

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 address is populated on BMC system.
    ${ip_info}=  Get BMC IP Info
    Validate IP On BMC  10.255.6.6  ${ip_info}

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 address is populated on BMC system.
    ${ip_info}=  Get BMC IP Info
    Validate IP On BMC  223.6.6.6  ${ip_info}

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.

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.

    ${len}=  Convert To Bytes  ${prefix_len}

    @{ip_parm_list}=  Create List  xyz.openbmc_project.Network.IP.Protocol.IPv4
    ...  ${ip_addr}  ${len}  ${gateway_ip}

    ${data}=  Create Dictionary  data=@{ip_parm_list}
    ${resp}=  OpenBMC Post Request
    ...  ${XYZ_NETWORK_MANAGER}/eth0/action/IP  data=${data}
    ${json}=  To JSON  ${resp.content}

    Run Keyword If  '${expected_result}' == 'error'  Run Keywords
    ...  Should Not Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
    ...  AND  Should Be Equal As Strings  ${json['status']}  ${expected_result}
    ...  ELSE
    ...  Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}

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.
