| *** Settings *** | 
 | Documentation     Energy scale power capping tests. | 
 |  | 
 |  | 
 | # Acronyms | 
 | #  PL     Power Limit | 
 | #  OCC    On Chip Controller | 
 |  | 
 |  | 
 | Resource          ../../lib/energy_scale_utils.robot | 
 | Resource          ../../lib/rest_client.robot | 
 | Resource          ../../lib/openbmc_ffdc.robot | 
 | Resource          ../../lib/boot_utils.robot | 
 | Resource          ../../lib/ipmi_client.robot | 
 | Resource          ../../syslib/utils_os.robot | 
 |  | 
 |  | 
 | Suite Setup      Suite Setup Execution | 
 | Test Teardown    Test Teardown Execution | 
 |  | 
 |  | 
 |  | 
 | *** Variables **** | 
 |  | 
 | ${max_power}            3050 | 
 | ${near_max_power_50}    3000 | 
 | ${near_max_power_100}   2950 | 
 |  | 
 |  | 
 |  | 
 | *** Test Cases *** | 
 |  | 
 |  | 
 | Escale System On And PL Enabled | 
 |     [Documentation]  Change active power limit with system power on and | 
 |     ...  Power limit active. | 
 |     [Tags]  Escale_System_On_And_PL_Enabled | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${max_power} | 
 |  | 
 |     Redfish Power On  stack_mode=skip | 
 |  | 
 |     Tool Exist  opal-prd | 
 |     OCC Tool Upload Setup | 
 |  | 
 |     # Get OCC data from OS. | 
 |     ${cmd}=  Set Variable  /tmp/occtoolp9 -p | grep -e State: -e Sensor: | 
 |     ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd} | 
 |  | 
 |     # Check for expected responses. | 
 |     Should Contain  ${output}  ACTIVE | 
 |     Should Contain  ${output}  Sensor: TEMP | 
 |     Should Contain  ${output}  Sensor: FREQ | 
 |     Should Contain  ${output}  Sensor: POWR | 
 |  | 
 |     # Disable OCC. | 
 |     ${output}  ${stderr}  ${rc}=  OS Execute Command  opal-prd occ disable | 
 |     # With OCC disabled we should have OBSERVATION in output. | 
 |     ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd} | 
 |     Should Contain  ${output}  OBSERVATION | 
 |  | 
 |     # Re-enable OCC for remaining tests. | 
 |     ${output}  ${stderr}  ${rc}=  OS Execute Command  opal-prd occ enable | 
 |     ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd} | 
 |     Should Contain  ${output}  ACTIVE | 
 |  | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${max_power} | 
 |     ...  msg=DCMI power limit should be ${max_power}. | 
 |  | 
 |     Activate DCMI Power And Verify | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${near_max_power_50} | 
 |  | 
 |  | 
 | Escale System On And PL Disabled | 
 |     [Documentation]  Change active power limit with system power on and | 
 |     ...  deactivate power limit prior to change. | 
 |     [Tags]  Escale_System_On_And_PL_Disabled | 
 |  | 
 |     ${power_setting}=  Set Variable  ${near_max_power_100} | 
 |  | 
 |     Redfish Power On  stack_mode=skip | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${power_setting} | 
 |  | 
 |     # Deactivate and check limit | 
 |     Deactivate DCMI Power And Verify | 
 |  | 
 |     ${cmd}=  Catenate  dcmi power set_limit limit ${near_max_power_50} | 
 |     Run External IPMI Standard Command  ${cmd} | 
 |     ${power}=  Get DCMI Power Limit | 
 |  | 
 |     Should Be True  ${power} == ${near_max_power_50} | 
 |     ...  msg=Could not set power limit when power limiting deactivated. | 
 |  | 
 |  | 
 | Escale Check Settings System On Then Off | 
 |     [Documentation]  Set power limit and activate power limit before | 
 |     ...  BMC state is power on. | 
 |     [Tags]  Escale_Check_Settings_System_On_Then_Off | 
 |  | 
 |     ${power_setting}=  Set Variable  ${near_max_power_100} | 
 |  | 
 |     Redfish Power On  stack_mode=skip | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${power_setting} | 
 |     Deactivate DCMI Power And Verify | 
 |  | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=dcmi power limit not set to ${power_setting} as expected. | 
 |  | 
 |     Smart Power Off | 
 |  | 
 |     Activate DCMI Power And Verify | 
 |  | 
 |     Redfish Power On | 
 |  | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=Power limit setting of watts not retained at Runtime. | 
 |  | 
 |     Deactivate DCMI Power And Verify | 
 |  | 
 |  | 
 | Escale Check Settings System Off Then On | 
 |     [Documentation]  Set and activate power limit with system power off. | 
 |     [Tags]  Escale_Check_Settings_System_Off_Then_On | 
 |  | 
 |     ${power_setting}=  Set Variable  ${near_max_power_50} | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${power_setting} | 
 |     Deactivate DCMI Power and Verify | 
 |  | 
 |     Smart Power Off | 
 |  | 
 |     # Check deactivated and the power limit. | 
 |     Fail If DCMI Power Is Not Deactivated | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=DCMI power not set at ${power_setting} as expected | 
 |  | 
 |     Activate DCMI Power And Verify | 
 |     Set DCMI Power Limit And Verify  ${power_setting} | 
 |  | 
 |     Redfish Power On | 
 |  | 
 |     Fail If DCMI Power Is Not Activated | 
 |  | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=Power limit setting not retained at Runtime. | 
 |  | 
 |  | 
 | Escale Change Limit At Runtime | 
 |     [Documentation]  Change power limit at runtime. | 
 |     [Tags]  Escale_Change_Limit_At_Runtime | 
 |  | 
 |     ${power_setting}=  Set Variable  ${near_max_power_100} | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${near_max_power_50} | 
 |  | 
 |     Smart Power Off | 
 |  | 
 |     Redfish Power On  stack_mode=skip | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${power_setting} | 
 |  | 
 |     # Check that DCMI power limit setting = ${power_setting}. | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=DCMI power limit not set to ${power_setting} watts as expected. | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${max_power} | 
 |  | 
 |  | 
 | Escale Disable And Enable At Runtime | 
 |     [Documentation]  Disable/enable power limit at runtime. | 
 |     [Tags]  Escale_Disable_And_Enable_At_Runtime | 
 |  | 
 |     ${power_setting}=  Set Variable  ${near_max_power_50} | 
 |  | 
 |     Smart Power Off | 
 |  | 
 |     Set DCMI Power Limit And Verify  ${power_setting} | 
 |     Activate DCMI Power And Verify | 
 |  | 
 |     # Power on the system. | 
 |     Redfish Power On | 
 |  | 
 |     # Check that DCMI power limit setting = ${power_setting}. | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=DCMI power limit not set to ${power_setting} watts as expected. | 
 |  | 
 |     Deactivate DCMI Power And Verify | 
 |  | 
 |     Activate DCMI Power And Verify | 
 |  | 
 |     ${power}=  Get DCMI Power Limit | 
 |     Should Be True  ${power} == ${power_setting} | 
 |     ...  msg=DCMI power limit not set to ${power_setting} watts as expected. | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 |  | 
 | Suite Setup Execution | 
 |     [Documentation]  Do test setup initialization. | 
 |     #  Power Off if system if not already off. | 
 |     #  Save initial settings. | 
 |     #  Deactivate power and set limit. | 
 |  | 
 |     Smart Power Off | 
 |  | 
 |     # 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 | 
 |  | 
 |     # Set power limiting deactivated. | 
 |     Deactivate DCMI Power And Verify | 
 |  | 
 |     # Set initial power setting value. | 
 |     Set DCMI Power Limit And Verify  ${max_power} | 
 |  | 
 |  | 
 | Test Teardown Execution | 
 |     [Documentation]  Do the post test teardown. | 
 |     # FFDC on test case fail. | 
 |     # Power off the OS and wait for power off state. | 
 |     # Return the system's initial deactivation/activation setting. | 
 |     # Return the system's initial power limit setting. | 
 |  | 
 |     FFDC On Test Case Fail | 
 |  | 
 |     Smart Power Off | 
 |  | 
 |     Run Keyword If  '${initial_power_setting}' != '${0}' | 
 |     ...  Set DCMI Power Limit And Verify  ${initial_power_setting} | 
 |  | 
 |     Run Keyword If  '${initial_deactivation}' == '${1}' | 
 |     ...  Deactivate DCMI Power And Verify  ELSE  Activate DCMI Power And Verify |