*** Settings ***
Documentation  Verify the port recovery by simulating its disconnection.

# Test Parameters:

# OS_HOST             The OS host name or IP Address.
# OS_USERNAME         The OS login userid (usually root).
# OS_PASSWORD         The OS login password.
# DEVICE_HOST         The network device hostname or IP where the ports will
#                     be shutdown.
# DEVICE_USERNAME     The network device username.
# DEVICE_PASSWORD     The network device password.
# PORT_NUMBER         The switch port where the server is connected (e.g.
#                     "1", "2", etc).
# NET_INTERFACE       The network interface name that will be tested (e.g.
#                     "enP5s1f0", "eth0").

Library         ../lib/bmc_ssh_utils.py
Resource        ../lib/resource.robot
Resource        ../syslib/utils_os.robot

Suite Setup     Test Setup Execution

*** Variables ***

${PORT_NUMBER}  ${EMPTY}

*** Test Cases ***

Verify Network Interface Recovery
    [Documentation]  Test the recovery of the network interface that has been
    ...  shutdown from the switch port.
    [Tags]  Verify_Network_Interface_Recovery

    Printn
    Set Switch Port State  DOWN
    Set Switch Port State  UP

*** Keywords ***

Set Switch Port State
    [Documentation]  Disable the port connected to the server.
    [Arguments]  ${port_number}=${PORT_NUMBER}  ${state}=${EMPTY}

    # Description of argument(s):
    # port_number     The switch port where the server is connected (e.g.
    #                 "1", "2", etc).
    # state           The state to be set in the network interface ("UP" or
    #                 "DOWN").

    Device Write  enable
    Device Write  configure terminal
    Device Write  interface port ${PORT_NUMBER}
    Run Keyword If  '${state}' == 'DOWN'
    ...    Device Write  shutdown
    ...  ELSE
    ...    Device Write  no shutdown
    Wait Until Keyword Succeeds  30 sec  5 sec
    ...  Check Network Interface State  ${state}

Check Network Interface State
    [Documentation]  Check the status of the network interface.
    [Arguments]  ${NET_INTERFACE}=${NET_INTERFACE}  ${state}=${EMPTY}

    # Description of argument(s):
    # NET_INTERFACE   The network interface name that will be tested (e.g.
    #                 "enP5s1f0", "eth0").
    # state           The network interface expected state ("UP" or "DOWN").

    ${stdout}  ${stderr}  ${rc}=  OS Execute Command
    ...  ip link | grep "${NET_INTERFACE}" | cut -d " " -f9
    Should Contain  ${stdout}  ${state}  msg=State not found as expected.

Test Setup Execution
    [Documentation]  Do suite setup tasks.

    Should Not Be Empty  ${PORT_NUMBER}
    Should Not Be Empty  ${NET_INTERFACE}
