*** Settings ***
Documentation           Test setting VLAN and its configuration.


Resource                        ../lib/rest_client.robot
Resource                        ../lib/ipmi_client.robot
Resource                        ../lib/utils.robot
Resource                        ../lib/common_utils.robot
Resource                        ../lib/openbmc_ffdc.robot
Resource                        ../lib/ipmi_client.robot
Resource                        ../lib/bmc_network_utils.robot
Resource                        ../lib/state_manager.robot
Library                         ../lib/utilities.py
Library                         ../lib/ipmi_utils.py
Library                         ../lib/var_funcs.py
Library                         ../lib/func_args.py
Library                         Collections

Suite Teardown                  Suite Teardown Execution


*** Variables ***
${vlan_id}                      ${53}
@{vlan_ids}                     ${35}  ${55}
${invalid_vlan_id}              abc
${vlan_resource}                ${NETWORK_MANAGER}action/VLAN
${network_resource}             xyz.openbmc_project.Network.IP.Protocol.IPv4
${static_network_resource}      xyz.openbmc_project.Network.IP.AddressOrigin.Static
${ip}                           10.6.6.10
@{ip_addresses}                 10.5.5.10  10.4.5.7
${netmask}                      ${24}
${gateway}                      0.0.0.0
${initial_vlan_config}          @{EMPTY}


*** Test Cases ***

Add VLAN Via REST And Verify
    [Documentation]  Add VLAN via REST and verify it via REST and IPMI.
    [Tags]  Add_VLAN_Via_REST_And_Verify
    [Setup]  Test Setup Execution
    [Teardown]  Delete VLANs  [${vlan_id}]

    Create VLAN  ${vlan_id}
    Verify Existence Of VLAN  ${vlan_id}

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['802.1q VLAN ID']  ["${vlan_id}"]


Add Invalid VLAN Via REST And Verify
    [Documentation]  Add Invalid VLAN via REST and verify.
    [Tags]  Add_Invalid_VLAN_Via_REST_And_Verify

    Create VLAN  ${invalid_vlan_id}  expected_result=error


Delete VLAN Via REST
    [Documentation]  Delete VLAN via REST and verify it via REST and IPMI.
    [Tags]  Delete_VLAN_Via_REST
    [Setup]  Run Keywords  Test Setup Execution  AND  Create VLAN  ${vlan_id}

    Verify Existence Of VLAN  ${vlan_id}
    Delete VLANs  [${vlan_id}]
    Verify Existence Of VLAN  ${vlan_id}  expected_result=error

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['802.1q VLAN ID']  ["Disabled"]


Configure Network Settings On VLAN Via REST
    [Documentation]  Configure IP on VLAN and verify it via REST and IPMI.
    [Tags]  Configure_Network_Settings_On_VLAN_Via_REST
    [Setup]  Run Keywords  Test Setup Execution  AND  Create VLAN  ${vlan_id}
    [Teardown]  Delete VLANs  [${vlan_id}]

    Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
    Get VLAN URI For IP  ${vlan_id}  ${ip}

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['IP Address']  ["${ip}"]


Delete IP On VLAN Via REST
    [Documentation]  Delete IP on VLAN and verify it via REST and IPMI.
    [Tags]  Delete_IP_On_VLAN_Via_REST
    [Setup]  Run Keywords  Test Setup Execution  AND  Create VLAN  ${vlan_id}
    [Teardown]  Delete VLANs  [${vlan_id}]

    Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['IP Address']  ["${ip}"]

    ${vlan_ip_uri}=  Get VLAN URI For IP  ${vlan_id}  ${ip}
    Delete IP And Object  ${ip}  ${vlan_ip_uri}

    Get VLAN URI For IP  ${vlan_id}  ${ip}  expected_result=error

    ${lan_config}=  Get LAN Print Dict
    Should Not Match  ${lan_config['IP Address']}  ${ip}


Delete VLAN When IP Is Configured Via REST
    [Documentation]  Delete IP on VLAN and verify using IPMI.
    [Tags]  Delete_VLAN_When_IP_Is_Configured_Via_REST
    [Setup]  Run Keywords  Test Setup Execution  AND  Create VLAN  ${vlan_id}
    [Teardown]  Delete VLANs  [${vlan_id}]

    Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['IP Address']  ["${ip}"]
    Delete VLANs  [${vlan_id}]

    Verify Existence Of VLAN  ${vlan_id}  expected_result=error

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['802.1q VLAN ID']  ["Disabled"]


Configure VLAN And Check Persistency On Reboot
    [Documentation]  Create VLAN ID & IP , reboot and verify.
    [Tags]  Configure_VLAN_And_Check_Persistency_On_Reboot
    [Setup]  Test Setup Execution
    [Teardown]  Delete VLANs  [${vlan_id}]

    Create VLAN  ${vlan_id}
    Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['IP Address']  ["${ip}"]
    Valid Value  lan_config['802.1q VLAN ID']  ["${vlan_id}"]

    Initiate BMC Reboot

    Verify Existence Of VLAN  ${vlan_id}
    Get VLAN URI For IP  ${vlan_id}  ${ip}

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['IP Address']  ["${ip}"]
    Valid Value  lan_config['802.1q VLAN ID']  ["${vlan_id}"]


Add Multiple VLANs Via REST And Verify
    [Documentation]  Add multiple VLANs via REST and verify them via CLI.
    [Tags]  Add_Multiple_VLANs_Via_REST_And_Verify
    [Setup]  Test Setup Execution
    [Teardown]  Delete VLANs  ${vlan_ids}

    FOR  ${vlan_id}  IN   @{vlan_ids}
        Create VLAN  ${vlan_id}
        Verify Existence Of VLAN  ${vlan_id}
    END

    ${lan_config}=  Get LAN Print Dict
    ${vlan_id_ipmi}=  Convert To Integer  ${lan_config["802.1q VLAN ID"]}
    Valid List  vlan_ids  required_values=[${vlan_id_ipmi}]

Delete Multiple IPs On VLAN And Verify
    [Documentation]  Delete multiple IPs on VLAN and verify each via REST and IPMI.
    [Tags]  Delete_Multiple_IP_On_VLAN_Via_REST
    [Setup]  Run Keywords  Test Setup Execution  AND  Create VLAN  ${vlan_id}
    [Teardown]  Delete VLANs  [${vlan_id}]

    FOR  ${ip}  IN  @{ip_addresses}
        Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
        ${vlan_ip_uri}=  Get VLAN URI For IP  ${vlan_id}  ${ip}
        Delete IP And Object  ${ip}  ${vlan_ip_uri}

        Get VLAN URI For IP  ${vlan_id}  ${ip}  expected_result=error

        ${lan_config}=  Get LAN Print Dict
        Should Not Match  ${lan_config['IP Address']}  ${ip}
    END

Delete Multiple VLANs Via REST
    [Documentation]  Delete multiple VLANs via REST and verify each via REST and IPMI.
    [Tags]  Delete_Multiple_VLANs_Via_REST
    [Setup]  Test Setup Execution

    FOR  ${vlan_id}  IN   @{vlan_ids}
        Create VLAN  ${vlan_id}
    END

    Delete VLANs  ${vlan_ids}

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['802.1q VLAN ID']  ["Disabled"]

Configure Multiple IPs On VLAN Via REST
    [Documentation]  Configure Multiple IPs on VLAN and verify each via REST.
    [Tags]  Configure_Multiple_IPs_On_VLAN_Via_REST
    [Setup]  Run Keywords  Test Setup Execution  AND  Create VLAN  ${vlan_id}
    [Teardown]  Delete VLANs  [${vlan_id}]

    FOR  ${ip}  IN  @{ip_addresses}
        Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
    END

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['IP Address']  ["${ip_addresses[0]}"]


Create And Delete VLAN And IP On It Multiple Times With BMC Reboot
    [Documentation]  Create and delete VLAN and IP on it multiple times with BMC reboot.
    [Tags]  Create_And_Delete_VLAN_And_IP_On_It_Multiple_Times_With_BMC_Reboot
    [Setup]  Test Setup Execution

    FOR  ${i}  IN RANGE   ${5}
      Create VLAN  ${vlan_id}
      Verify Existence Of VLAN  ${vlan_id}
      Configure Network Settings On VLAN  ${vlan_id}  ${ip}  ${netmask}
      ${vlan_ip_uri}=  Get VLAN URI For IP  ${vlan_id}  ${ip}
      Delete IP And Object  ${ip}  ${vlan_ip_uri}
      Get VLAN URI For IP  ${vlan_id}  ${ip}  expected_result=error
      Delete VLANs  [${vlan_id}]
      Verify Existence Of VLAN  ${vlan_id}  expected_result=error
      Initiate BMC Reboot
      Sleep  ${NETWORK_TIMEOUT}s
      Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
      Verify Existence Of VLAN  ${vlan_id}  expected_result=error
    END

    ${lan_config}=  Get LAN Print Dict
    Valid Value  lan_config['802.1q VLAN ID']  ["Disabled"]


*** Keywords ***


Test Setup Execution
    [Documentation]  Check and delete all previously created VLAN if any.

    Printn
    ${lan_config}=  Get LAN Print Dict
    Return From Keyword If  '${lan_config['802.1q VLAN ID']}' == 'Disabled'

    # Get all VLAN ID on interface eth0.
    ${vlan_ids}=  Get VLAN IDs

    ${initial_vlan_config}=  Create List
    Set Suite Variable  ${initial_vlan_config}

    FOR  ${vlan_id}  IN  @{vlan_ids}
        ${vlan_records}=  Read Properties
        ...  ${NETWORK_MANAGER}eth0_${vlan_id}${/}enumerate  quiet=1
        ${vlan_record}=  Filter Struct
        ...  ${vlan_records}  [('Origin', '${static_network_resource}')]

        ${id}=  Convert To Integer  ${vlan_id}
        Set Initial VLAN Config  ${vlan_record}  ${id}
    END
    Rprint Vars  initial_vlan_config

    Delete VLANs  ${vlan_ids}


Set Initial VLAN Config
    [Documentation]  Set suite level list of Initial VLAN Config.
    [Arguments]  ${vlan_record}  ${id}

    # Description of argument(s):
    # vlan_record  Dictionary of IP configuration information of a VLAN.
    # Example:
    #  /xyz/openbmc_project/network/eth0_55/ipv4/5fb2cfe6": {
    #  "Address": "x.x.x.x",
    #  "Gateway": "",
    #  "Origin": "xyz.openbmc_project.Network.IP.AddressOrigin.Static",
    #  "PrefixLength": 16,
    #  "Type": "xyz.openbmc_project.Network.IP.Protocol.IPv4"}
    #
    # id  The VLAN ID corresponding to the IP Configuration records contained
    #     in the variable "vlan_record".

    ${uris}=  Get Dictionary Keys  ${vlan_record}

    FOR  ${uri}  IN  @{uris}
        Append To List  ${initial_vlan_config}  ${id}  ${vlan_record['${uri}']['Address']}
        ...  ${vlan_record['${uri}']['PrefixLength']}
    END

    Run Keyword If  @{uris} == @{EMPTY}
    ...  Append To List  ${initial_vlan_config}  ${id}  ${EMPTY}  ${EMPTY}


Suite Teardown Execution
    [Documentation]  Restore VLAN configuration.

    ${length}=  Get Length  ${initial_vlan_config}
    Return From Keyword If  ${length} == ${0}

    ${previous_id}=  Set Variable  ${EMPTY}
    FOR  ${index}  IN RANGE  0  ${length}  3

        Run Keyword If  '${initial_vlan_config[${index+1}]}' == '${EMPTY}'
        ...  Create VLAN  ${initial_vlan_config[${index}]}
        ...  ELSE IF  '${previous_id}' == '${initial_vlan_config[${index}]}'
        ...  Configure Network Settings On VLAN  ${initial_vlan_config[${index}]}
        ...  ${initial_vlan_config[${index+1}]}  ${initial_vlan_config[${index+2}]}
        ...  ELSE  Run Keywords  Create VLAN  ${initial_vlan_config[${index}]}  AND
        ...  Configure Network Settings On VLAN  ${initial_vlan_config[${index}]}
        ...  ${initial_vlan_config[${index+1}]}  ${initial_vlan_config[${index+2}]}

        ${previous_id}=  Set Variable  ${initial_vlan_config[${index}]}
    END


Delete VLANs
    [Documentation]  Delete one or more VLANs.
    [Arguments]  ${ids}  ${interface}=eth0

    # Description of argument(s):
    # ids                           A list of VLAN IDs (e.g. ['53'] or ['53', '35', '12']). Note that the
    #                               caller may simply pass a list variable or he/she may specify a
    #                               python-like list specification (see examples below).
    # interface                     The physical interface for the VLAN (e.g. 'eth0').

    # Example calls:
    # Delete VLANs  ${vlan_ids}
    # Delete Vlans  [53, 35]

    # Allow for python-like list specifications (e.g. ids=['53']).
    ${vlan_ids}=  Source To Object  ${ids}

    FOR  ${id}  IN  @{vlan_ids}
        OpenBMC Delete Request  ${NETWORK_MANAGER}${interface}_${id}
    END
    Run Key U  Sleep \ ${NETWORK_TIMEOUT}s


Get VLAN IDs
    [Documentation]  Return all VLAN IDs.

    ${vlan_ids}  ${stderr}  ${rc}=  BMC Execute Command
    ...  /sbin/ip addr | grep @eth0 | cut -f1 -d@ | cut -f2 -d.
    ${vlan_ids}=  Split String  ${vlan_ids}

    [Return]  @{vlan_ids}


Get VLAN URI For IP
    [Documentation]  Get and return the URI for a VLAN IP.
    [Arguments]  ${vlan_id}  ${vlan_ip}  ${expected_result}=valid

    # Description of argument(s):
    # vlan_id  The VLAN ID (e.g. '53').
    # vlan_ip  The VLAN IP (e.g. 'x.x.x.x').

    ${vlan_records}=  Read Properties
    ...  ${NETWORK_MANAGER}eth0_${vlan_id}${/}enumerate  quiet=1
    ${vlan_record}=  Filter Struct  ${vlan_records}  [('Address', '${vlan_ip}')]
    ${num_vlan_records}=  Get Length  ${vlan_record}
    ${status}=  Run Keyword And Return Status  Should Be True  ${num_vlan_records} > 0
    ...  msg=Could not find a uri for vlan "${vlan_id}" with IP "${vlan_ip}".

    Run Keyword If  '${expected_result}' == 'valid'
    ...      Should Be Equal  ${status}  ${True}
    ...      msg=VLAN IP URI doesn't exist!.
    ...  ELSE
    ...      Should Be Equal  ${status}  ${False}
    ...      msg=VLAN IP URI exists!.
    ${uris}=  Get Dictionary Keys  ${vlan_record}
    Return From Keyword If  @{uris} == @{EMPTY}

    [Return]  ${uris[${0}]}


Verify Existence Of VLAN
    [Documentation]  Verify VLAN ID exists.
    [Arguments]  ${id}  ${interface}=eth0  ${expected_result}=valid

    # Description of argument(s):
    # id  The VLAN ID (e.g. id:'53').
    # interface        Physical Interface on which the VLAN is defined.
    # expected_result  Expected status to check existence or non-existence of VLAN.

    ${vlan_ids}=  Get VLAN IDs
    ${cli_status}=  Run Keyword And Return Status
    ...  Valid List  vlan_ids  required_values=['${id}']

    ${network_records}=  Read Properties  ${NETWORK_MANAGER}
    ${rest_status}=  Run Keyword And Return Status  Valid List  network_records
    ...  required_values=['${NETWORK_MANAGER}${interface}_${id}']

    Should Be Equal  ${rest_status}  ${cli_status}
    ...  msg=REST and CLI Output are not the same.
    Run Keyword If  '${expected_result}' == 'valid'
    ...      Should Be Equal  ${rest_status}  ${True}
    ...      msg=VLAN ID doesn't exist!.
    ...  ELSE
    ...      Should Be Equal  ${rest_status}  ${False}
    ...      msg=VLAN ID exists!.
