*** Settings ***
Documentation          DHCP Network to test suite functionality.

Resource               ../lib/openbmc_ffdc.robot
Resource               ../lib/bmc_network_utils.robot
Library                ../lib/ipmi_utils.py
Library                ../lib/bmc_network_utils.py

Suite Setup            Suite Setup Execution
Suite Teardown         Redfish.Logout

*** Test Cases ***

Enable DHCP Via Redfish And Verify
    [Documentation]  Enable DHCP via Redfish and verify.
    [Tags]  Enable_DHCP_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    DHCPEnabled           ${True}


Disable DHCP Via Redfish And Verify
    [Documentation]  Disable DHCP via Redfish and verify.
    [Tags]  Disable_DHCP_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    DHCPEnabled           ${False}


Enable UseDNSServers Via Redfish And Verify
    [Documentation]  Enable UseDNSServers via Redfish and verify.
    [Tags]  Enable_UseDNSServers_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    UseDNSServers         ${True}


Disable UseDNSServers Via Redfish And Verify
    [Documentation]  Disable UseDNSServers via Redfish and verify.
    [Tags]  Disable_UseDNSServers_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    UseDNSServers         ${False}


Enable UseDomainName Via Redfish And Verify
    [Documentation]  Enable UseDomainName via Redfish and verify.
    [Tags]  Enable_UseDomainName_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    UseDomainName         ${True}



Disable UseDomainName Via Redfish And Verify
    [Documentation]  Disable UseDomainName via Redfish and verify.
    [Tags]  Disable_UseDomainName_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    UseDomainName         ${False}


Enable UseNTPServers Via Redfish And Verify
    [Documentation]  Enable UseNTPServers via Redfish and verify.
    [Tags]  Enable_UseNTPServers_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    UseNTPServers         ${True}


Disable UseNTPServers Via Redfish And Verify
    [Documentation]  Disable UseNTPServers via Redfish and verify.
    [Tags]  Disable_UseNTPServers_Via_Redfish_And_Verify
    [Teardown]  Run Keywords  Restore Configuration
    ...  AND  FFDC On Test Case Fail
    [Template]  Apply Ethernet Config

    # property            Value
    UseNTPServers         ${False}


*** Keywords ***

Suite Setup Execution
    [Documentation]  Suite Setup Execution.

    Redfish.Login

    # This keyword should login to host OS.
    Run Inband IPMI Standard Command
    ...  lan set ${CHANNEL_NUMBER} ipsrc static  login_host=${1}

    ${host_name}  ${ip_address}=  Get Host Name IP  host=${OPENBMC_HOST}

    Set Suite Variable  ${ip_address}

    @{network_configurations}=  Get Network Configuration
    FOR  ${network_configuration}  IN  @{network_configurations}
      Run Keyword If  '${network_configuration['Address']}' == '${ip_address}'
      ...  Set Suite Variable  ${subnet_mask}  ${network_configuration['SubnetMask']}
    END

    ${initial_lan_config}=  Get LAN Print Dict  ${CHANNEL_NUMBER}  ipmi_cmd_type=inband
    Set Suite Variable  ${initial_lan_config}


Set IPMI Inband Network Configuration
    [Documentation]  Run sequence of standard in-band IPMI command and set
    ...              the IP configuration.
    [Arguments]  ${ip}  ${netmask}  ${gateway}

    # Description of argument(s):
    # ip       The IP address to be set using ipmitool-inband.
    # netmask  The Netmask to be set using ipmitool-inband.
    # gateway  The Gateway address to be set using ipmitool-inband.
    # login    Indicates that this keyword should login to host OS.

    Run Inband IPMI Standard Command
    ...  lan set ${CHANNEL_NUMBER} ipaddr ${ip}  login_host=${0}
    Run Inband IPMI Standard Command
    ...  lan set ${CHANNEL_NUMBER} netmask ${netmask}  login_host=${0}
    Run Inband IPMI Standard Command
    ...  lan set ${CHANNEL_NUMBER} defgw ipaddr ${gateway}  login_host=${0}


Restore Configuration
    [Documentation]  Restore the configuration to its pre-test state.

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

    Set IPMI Inband Network Configuration  ${ip_address}  ${subnet_mask}
    ...  ${initial_lan_config['Default Gateway IP']}


Apply Ethernet Config
   [Documentation]  Set the given Ethernet config property.
   [Arguments]  ${property}   ${value}

   # Description of argument(s):
   # property   Ethernet property to be set..
   # value      Value to be set. E.g. True or False.

   ${active_channel_config}=  Get Active Channel Config
   Redfish.Patch
   ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
   ...  body={"DHCPv4":{"${property}":${value}}}

   ${resp}=  Redfish.Get
   ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
   Should Be Equal As Strings  ${resp.dict["DHCPv4"]["${property}"]}  ${value}

