*** 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_Inactive_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 Deactivation 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
