*** Settings ***
Documentation   This suite verifies the power restore policy supported by
...             REST Interfaces.
...             Refer here for documentation on the REST interfaces
...             https://github.com/openbmc/docs/blob/master/rest-api.md

Resource        ../lib/rest_client.robot
Resource        ../lib/utils.robot
Resource        ../lib/openbmc_ffdc.robot
Resource        ../lib/state_manager.robot


Library         SSHLibrary

Test Teardown   Post Test Case Execution
Suite Teardown  Post Test Suite Execution

Force Tags      power_restore

*** Variables ***

*** Test Cases ***

Test Restore Policy ALWAYS_POWER_OFF With Host Off
    # Policy                Initial Host State     Expected Host State

    ${ALWAYS_POWER_OFF}     Off                    Off

    [Documentation]  Validate ALWAYS_POWER_OFF restore policy functionality.
    ...              Policy:
    ...                    System policy set to ALWAYS_POWER_OFF.
    ...              Initial Host State:
    ...                    State where system should be before running the
    ...                    test case.
    ...              Expected Host State:
    ...                    After BMC reset, system should reach this
    ...                    specific state.

    [Template]  Verify Restore Policy
    [Tags]  Test_Restore_Policy_ALWAYS_POWER_OFF_With_Host_Off


Test Restore Policy ALWAYS_POWER_OFF With Host Running
    # Policy                Initial Host State     Expected Host State

    ${ALWAYS_POWER_OFF}     Running                Off

    [Template]  Verify Restore Policy
    [Tags]  Test_Restore_Policy_ALWAYS_POWER_OFF_With_Host_Running


Test Restore Policy ALWAYS_POWER_ON With Host Off
    # Policy                Initial Host State     Expected Host State

    ${ALWAYS_POWER_ON}      Off                    Running

    [Documentation]  Validate ALWAYS_POWER_ON restore policy functionality.
    ...              Policy:
    ...                    System policy set to ALWAYS_POWER_OFF.
    ...              Initial Host State:
    ...                    State where system should be before running the
    ...                    test case.
    ...              Expected Host State:
    ...                    After BMC reset, system should reach this
    ...                    specific state.

    [Template]  Verify Restore Policy
    [Tags]  Test_Restore_Policy_ALWAYS_POWER_ON_With_Host_Off


Test Restore Policy ALWAYS_POWER_ON With Host Running
    # Policy                Initial Host State     Expected Host State

    ${ALWAYS_POWER_ON}      Running                Running

    [Template]  Verify Restore Policy
    [Tags]  Test_Restore_Policy_ALWAYS_POWER_ON_With_Host_Running


Test Restore Policy Restore Last State With Host Running
    # Policy                Initial Host State     Expected Host State

    ${RESTORE_LAST_STATE}   Running                Running

    [Documentation]  Validate RESTORE_LAST_STATE restore policy functionality.
    ...              Policy:
    ...                    System policy set to RESTORE_LAST_STATE.
    ...              Initial Host State:
    ...                    State where system should be before running the
    ...                    test case.
    ...              Expected Host State:
    ...                    After BMC reset, system should reach this
    ...                    specific state.

    [Template]  Verify Restore Policy
    [Tags]  Test_Restore_Policy_Restore_Last_State_With_Host_Running


Test Restore Policy Restore Last State With Host Off
    # Policy                Initial Host State     Expected Host State

    ${RESTORE_LAST_STATE}   Off                    Off


    [Template]  Verify Restore Policy
    [Tags]  Test_Restore_Policy_Restore_Last_State_With_Host_Off


*** Keywords ***

Verify Restore Policy
    [Documentation]  Set given policy, reset BMC and expect specified end
    ...              state.
    [Arguments]  ${policy}  ${expectedState}  ${nextState}

    # Description of argument(s):
    # policy           System policy state string.
    # expectedState    Test initial host state.
    # nextState        Test end host state.

    Set BMC Power Policy  ${policy}

    ${currentState}=  Get Host State

    Log  Current System State= ${currentState}
    Log  Initial Host State= ${expectedState}
    Log  Expected Host State= ${nextState}

    Run Keyword If
    ...  '${currentState}' != '${expectedState}'
    ...  Set Initial Test State  ${expectedState}

    Initiate BMC Reboot

    Wait Until Keyword Succeeds
    ...  10 min  10 sec  Verify Host State  ${nextState}


Set Initial Test State
    [Documentation]  Poweron if ON expected, Poweroff if OFF expected
    ...              to initial state of the test.

    [Arguments]  ${expectedState}
    # Description of argument(s):
    # expectedState    Test initial host state.

    Run Keyword If  '${expectedState}' == 'Running'
    ...  Initiate Host Boot

    Run Keyword If  '${expectedState}' == 'Off'
    ...  Initiate Host PowerOff


    ${currentState}=  Get Host State


Verify Host State
    [Documentation]  Verify expected host state.
    [Arguments]  ${expectedState}

    # Description of argument(s):
    # expectedState   Expected host state.
    ${currentState}=  Get Host State
    Should Be Equal  ${currentState}  ${expectedState}


Post Test Case Execution
    [Documentation]  Do the post test teardown.
    # 1. Capture FFDC on test failure.
    # 2. Close all open SSH connections.

    FFDC On Test Case Fail
    Close All Connections


Post Test Suite Execution
    [Documentation]  Do the post suite teardown.
    # 1. Set policy to default.

    Run Keyword And Ignore Error  Set BMC Power Policy  ${RESTORE_LAST_STATE}

