*** 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/pdu/pdu.robot
Resource        ../lib/utils.robot
Resource        ../lib/openbmc_ffdc.robot
Resource        ../lib/boot/boot_resource_master.robot


Library         SSHLibrary

Test Teardown   FFDC On Test Case Fail
Force Tags      chassisboot  bmcreboot

*** Variables ***
${HOST_SETTING}    ${OPENBMC_BASE_URI}settings/host0

*** Test Cases ***

Set the power restore policy
    #Policy                Expected System State     Next System State

    LEAVE_OFF              HOST_POWERED_OFF          HOST_POWERED_OFF
    LEAVE_OFF              HOST_BOOTED               HOST_POWERED_OFF
    ALWAYS_POWER_ON        HOST_POWERED_OFF          HOST_BOOTED
    ALWAYS_POWER_ON        HOST_BOOTED               HOST_BOOTED
    RESTORE_LAST_STATE     HOST_BOOTED               HOST_BOOTED
    RESTORE_LAST_STATE     HOST_POWERED_OFF          HOST_POWERED_OFF

    [Documentation]   Test to validate restore policy attribute functionality.
    ...               Policy:
    ...                     System policy to restore on power cycle
    ...               Expected System State:
    ...                     State where system should be before running the
    ...                     test case
    ...               Next System State:
    ...                     After power cycle, system should reach this
    ...                     specific state

    [Template]    Set Restore Policy

***keywords***

Set Restore Policy
    [arguments]    ${policy}   ${expectedState}   ${nextState}

    Set Policy Setting   ${policy}

    ${currentState}=
    ...   Read Attribute   ${HOST_SETTING}   system_state

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

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

    Log   "Doing power cycle"
    PDU Power Cycle
    Check If BMC is Up   5 min    10 sec
    Log   "BMC is Online now"

    Wait Until Keyword Succeeds
    ...   5 min   10 sec   System State  ${nextState}


Set Policy Setting
    [Documentation]   Set the given test policy
    [arguments]   ${policy}

    ${valueDict}=     create dictionary  data=${policy}
    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
    Should Be Equal    ${currentPolicy}   ${policy}


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

    Run Keyword If
    ...   '${expectedState}' == 'HOST_BOOTED'
    ...   BMC Power On

    Run Keyword If
    ...   '${expectedState}' == 'HOST_POWERED_OFF'
    ...   BMC Power Off


System State
    [arguments]     ${nextState}
    ${afterPduSystemState}=
    ...   Read Attribute    ${HOST_SETTING}    system_state
    Should be equal   ${afterPduSystemState}    ${nextState}

