diff --git a/tests/energy_scale/test_power_capping.robot b/tests/energy_scale/test_power_capping.robot
deleted file mode 100644
index 38a0e5c..0000000
--- a/tests/energy_scale/test_power_capping.robot
+++ /dev/null
@@ -1,251 +0,0 @@
-*** 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
