*** 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} REST 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} REST 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} REST 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 REST 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} REST 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 REST 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. REST 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