Energy scale power capping tests.

Added:
   - Escale System On And PL Enabled
   - Escale System On And PL Disabled
   - Escale Check Settings System On Then Off
   - Escale Check Settings System Off Then On
   - Escale Change Limit At Runtime
   - Escale Disable And Enable At Runtime

Resolves  openbmc/openbmc-test-automation#912
Change-Id: I6d90137fbad4fe40b6a626cc3ac09cef338f28fe
Signed-off-by: Steven Sombar <ssombar@us.ibm.com>
diff --git a/systest/test_power_capping.robot b/systest/test_power_capping.robot
new file mode 100644
index 0000000..a1f9d25
--- /dev/null
+++ b/systest/test_power_capping.robot
@@ -0,0 +1,214 @@
+*** Settings ***
+Documentation     Energy scale power capping tests.
+
+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
+
+Suite Setup      Suite Setup Execution
+Test Teardown    Test Teardown Execution
+
+
+*** Test Cases ***
+
+
+Escale System On And PL Enabled
+    [Documentation]  With system power on, check values with occtoolp9.
+    [Tags]  Escale_System_On_And_PL_Enabled
+
+    # Implements:
+    # - Change Active Power Limit with System Power On and Power Limit Active.
+
+    REST Power On  stack_mode=skip
+
+    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
+
+    ${power}=  Get DCMI Power Limit
+    Should Be True  ${power} == ${0}
+    ...  msg=Initial dcmi power limit should be zero.
+
+    Activate DCMI Power And Verify
+
+    Set DCMI Power Limit And Verify  300
+
+
+Escale System On And PL Disabled
+    [Documentation]  With system power on, check values with occtoolp9.
+    [Tags]  Escale_System_On_And_PL_Disabled
+
+    # Implements:
+    # - Change Active Power Limit with System Power On and Deactivate Power
+    #   Limit Prior to Change.
+
+    ${power_setting}=  Set Variable  ${600}
+
+    REST Power On  stack_mode=skip
+
+    Activate DCMI Power And Verify
+
+    Set DCMI Power Limit And Verify  ${power_setting}
+
+    # Deactivate and check limit
+    Deactivate DCMI Power And Verify
+
+    ${cmd}=  Catenate  dcmi power set_limit limit 500
+    Run External IPMI Standard Command  ${cmd}
+    ${power}=  Get DCMI Power Limit
+
+    Should Be True  ${power} == ${power_setting}
+    ...  msg=Could set power limit when power limiting deactivated.
+
+
+Escale Check Settings System On Then Off
+    [Documentation]  Set power activitation and limit when system
+    ...  on, then check at power off.
+    [Tags]  Escale_Check_Settings_System_On_Then_Off
+
+    # Implements:
+    # - Set Power Limit and Activate Power Limit Before BMC State is Power On.
+
+    ${power_setting}=  Set Variable  ${800}
+
+    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.
+
+    Set DCMI Power Limit And Verify  0
+    Deactivate DCMI Power And Verify
+
+
+Escale Check Settings System Off Then On
+    [Documentation]  Set power activitation and limit when system
+    ...  off, then check at power on.
+    [Tags]  Escale_Check_Settings_System_Off_Then_On
+
+    # Implements:
+    # - Set and Activate Power Limit with System Power Off.
+
+    ${power_setting}=  Set Variable  ${500}
+
+    Smart Power Off
+
+    # Check that DCMI power limiting is deactivated and that the initial
+    # power limit setting = 0.
+    Fail If DCMI Power Is Not Deactivated
+    ${power}=  Get DCMI Power Limit
+    Should Be True  ${power} == ${0}
+    ...  msg=Initial dcmi power limit should be zero.
+
+    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 setting while at runtime.
+    [Tags]  Escale_Change_Limit_At_Runtime
+
+    # Implements:
+    # - Change Power Limit at Runtime.
+
+    ${power_setting}=  Set Variable  ${600}
+
+    Smart Power Off
+
+    Set DCMI Power Limit And Verify  ${power_setting}
+    Activate DCMI Power And Verify
+
+    REST Power On  stack_mode=skip
+
+    # 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  800
+
+
+Escale Disable And Enable At Runtime
+    [Documentation]  Disable and enable power at runtime.
+    [Tags]  Escale_Disable_And_Enable_At_Runtime
+
+    # Implements:
+    # - Disable/Enable Power Limit at Runtime.
+
+    ${power_setting}=  Set Variable  ${500}
+
+    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.
+    #  Deactivate power and set limit = 0.
+    Smart Power Off
+    Deactivate DCMI Power And Verify
+    Set DCMI Power Limit And Verify  0
+
+
+Test Teardown Execution
+    [Documentation]  Do the post test teardown.
+    # FFDC on test case fail.
+    # Power off the OS and wait for power off state.
+    # Set deactivated DCMI power enablement and power limit = 0.
+
+    FFDC On Test Case Fail
+    Smart Power Off
+    Deactivate DCMI Power And Verify
+    Set DCMI Power Limit And Verify  0