*** Settings ***
Documentation     Energy scale base tests.


# Test Parameters:
# OPENBMC_HOST        The BMC host name or IP address.


Resource          ../../lib/energy_scale_utils.robot
Resource          ../../lib/openbmc_ffdc.robot
Resource          ../../lib/utils.robot
Resource          ../../lib/logging_utils.robot
Library           ../../lib/logging_utils.py


Suite Setup      Suite Setup Execution
Test Teardown    Test Teardown Execution


*** Variables ****

${over_max_power}       4001
${max_power}            3050
${mid_power}            1950
${min_power}            600
${below_min_power}      499
${zero_power}           0
#  The power limits are documented in
#  open-power/witherspoon-xml/master/witherspoon.xml.


*** Test Cases ***


Escale Base Test Inactive Monitoring
    [Documentation]  Run base power tests with DCMI power monitoring off.
    [Tags]  Escale_Base_Test_Deactive_Monitoring

    Deactivate DCMI Power And Verify
    Verify Power Limits


Escale Base Test Active Monitoring
    [Documentation]  Run base power tests with DCMI power monitoring on.
    [Tags]  Escale_Base_Test_Active_Monitoring

    Activate DCMI Power And Verify
    Verify Power Limits


Escale Power Setting Via REST And Verify
    [Documentation]  Set power via REST and check using IPMI.
    [Tags]  Escale_Power_Setting_Via_REST_And_Verify

    # A convenient power level bewtwwn maximum and minimum.
    ${test_power}=  Set Variable  1700

    # Set the power limit via REST.
    Set DCMI Power Limit Via REST  ${test_power}

    # Read the power limit using IPMI.
    ${power_limit}=  Get DCMI Power Limit
    Should Be True  ${power_limit} == ${test_power}
    ...  msg=Reading Power limit with IPMI failed after setting it with REST.


Escale Power Setting Via IPMI And Verify
    [Documentation]  Set power via IPMI then check via REST.
    [Tags]  Escale_Power_Setting_Via_IPMI_And_Verify

    # A convenient power level bewtwwn maximum and minimum.
    ${test_power}=  Set Variable  2200

    # Set DCMI Power via IPMI.
    Set DCMI Power Limit And Verify  ${test_power}

    # Read the limit via REST.
    ${power_limit}=  Get DCMI Power Limit Via REST
    Should Be True  ${power_limit} == ${test_power}
    ...  msg=Reading power limit with REST failed after setting it with IPMI.


Escale Activation Test Via REST
    [Documentation]  Activate power monitoring via REST then check via IPMI.
    [Tags]  Escale_Activation_Test_Via_REST

    Activate DCMI Power Via REST
    # Confirm activation state using IPMI.
    Fail If DCMI Power Is Not Activated


Escale Dectivation Test Via REST
    [Documentation]  Deactivate power monitoring via REST and check via IPMI.
    [Tags]  Escale_Deactivation_Test_Via_REST

    Deactivate DCMI Power Via REST
    # Confirm activation state using IPMI.
    Fail If DCMI Power Is Not Deactivated


*** Keywords ***


Verify Power Limits
    [Documentation]  Set power levels and verify limits.

    Set DCMI Power Limit And Verify  ${mid_power}
    Test Power Limit  ${min_power}  ${below_min_power}
    Test Power Limit  ${min_power}  ${zero_power}
    Test Power Limit  ${max_power}  ${over_max_power}

    ${power_limit}=  Get DCMI Power Limit
    Should Be True  ${power_limit} == ${max_power}
    ...  msg=Power at ${power_limit}. Power should be at ${max_power}.


Test Power Limit
    [Documentation]  Set power and check limit.
    [Arguments]  ${good_power}  ${outside_bounds_power}

    # Description of argument(s):
    # good_power              A valid power setting, usually at a limit.
    # outside_bounds_power    A power level that is beyond the limit.

    Set DCMI Power Limit And Verify  ${good_power}

    # Attempt set power limit out of range.
    ${int_power_limit}=  Convert To Integer  ${outside_bounds_power}
    ${data}=  Create Dictionary  data=${int_power_limit}
    Write Attribute   ${CONTROL_HOST_URI}power_cap  PowerCap  data=${data}


Suite Setup Execution
    [Documentation]  Do test setup initialization.

    Redfish.Login

    # Save the deactivation/activation setting.
    ${cmd}=  Catenate  dcmi power get_limit | grep State
    ${resp}=  Run External IPMI Standard Command  ${cmd}
    # Response is either "Power Limit Active" or "No Active Power Limit".
    ${initial_deactivation}=  Get Count  ${resp}  No
    # If deactivated: initial_deactivation = 1, 0 otherwise.
    Set Suite Variable  ${initial_deactivation}  children=true

    # Save the power limit setting.
    ${initial_power_setting}=  Get DCMI Power Limit
    Set Suite Variable  ${initial_power_setting}  children=true

    Delete All Error Logs


Test Teardown Execution
    [Documentation]  Do the post test teardown.

    FFDC On Test Case Fail

    # Restore the system's initial power limit setting.
    Run Keyword If  '${initial_power_setting}' != '${0}'
    ...  Set DCMI Power Limit And Verify  ${initial_power_setting}

    # Restore the system's initial deactivation/activation setting.
    Run Keyword If  '${initial_deactivation}' == '${1}'
    ...  Deactivate DCMI Power And Verify  ELSE  Activate DCMI Power And Verify

    # Clean up any error logs before exiting.
    Delete All Error Logs

    Redfish.Logout
