*** 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}    /org/openbmc/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}

