xref: /openbmc/openbmc-test-automation/redfish/extended/test_power_capping.robot (revision f7ac0237e43b257bfc08caa907e25d66f78c77e0)
1*f7ac0237SMarissa Garza*** Settings ***
2*f7ac0237SMarissa GarzaDocumentation     Energy scale power capping tests.
3*f7ac0237SMarissa Garza
4*f7ac0237SMarissa Garza
5*f7ac0237SMarissa Garza# Acronyms
6*f7ac0237SMarissa Garza#  PL     Power Limit
7*f7ac0237SMarissa Garza#  OCC    On Chip Controller
8*f7ac0237SMarissa Garza
9*f7ac0237SMarissa Garza
10*f7ac0237SMarissa GarzaResource          ../../lib/energy_scale_utils.robot
11*f7ac0237SMarissa GarzaResource          ../../lib/rest_client.robot
12*f7ac0237SMarissa GarzaResource          ../../lib/openbmc_ffdc.robot
13*f7ac0237SMarissa GarzaResource          ../../lib/boot_utils.robot
14*f7ac0237SMarissa GarzaResource          ../../lib/ipmi_client.robot
15*f7ac0237SMarissa GarzaResource          ../../syslib/utils_os.robot
16*f7ac0237SMarissa Garza
17*f7ac0237SMarissa Garza
18*f7ac0237SMarissa GarzaSuite Setup      Suite Setup Execution
19*f7ac0237SMarissa GarzaTest Teardown    Test Teardown Execution
20*f7ac0237SMarissa Garza
21*f7ac0237SMarissa Garza
22*f7ac0237SMarissa Garza
23*f7ac0237SMarissa Garza*** Variables ****
24*f7ac0237SMarissa Garza
25*f7ac0237SMarissa Garza${max_power}            3050
26*f7ac0237SMarissa Garza${near_max_power_50}    3000
27*f7ac0237SMarissa Garza${near_max_power_100}   2950
28*f7ac0237SMarissa Garza
29*f7ac0237SMarissa Garza
30*f7ac0237SMarissa Garza
31*f7ac0237SMarissa Garza*** Test Cases ***
32*f7ac0237SMarissa Garza
33*f7ac0237SMarissa Garza
34*f7ac0237SMarissa GarzaEscale System On And PL Enabled
35*f7ac0237SMarissa Garza    [Documentation]  Change active power limit with system power on and
36*f7ac0237SMarissa Garza    ...  Power limit active.
37*f7ac0237SMarissa Garza    [Tags]  Escale_System_On_And_PL_Enabled
38*f7ac0237SMarissa Garza
39*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${max_power}
40*f7ac0237SMarissa Garza
41*f7ac0237SMarissa Garza    REST Power On  stack_mode=skip
42*f7ac0237SMarissa Garza
43*f7ac0237SMarissa Garza    Tool Exist  opal-prd
44*f7ac0237SMarissa Garza    OCC Tool Upload Setup
45*f7ac0237SMarissa Garza
46*f7ac0237SMarissa Garza    # Get OCC data from OS.
47*f7ac0237SMarissa Garza    ${cmd}=  Set Variable  /tmp/occtoolp9 -p | grep -e State: -e Sensor:
48*f7ac0237SMarissa Garza    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
49*f7ac0237SMarissa Garza
50*f7ac0237SMarissa Garza    # Check for expected responses.
51*f7ac0237SMarissa Garza    Should Contain  ${output}  ACTIVE
52*f7ac0237SMarissa Garza    Should Contain  ${output}  Sensor: TEMP
53*f7ac0237SMarissa Garza    Should Contain  ${output}  Sensor: FREQ
54*f7ac0237SMarissa Garza    Should Contain  ${output}  Sensor: POWR
55*f7ac0237SMarissa Garza
56*f7ac0237SMarissa Garza    # Disable OCC.
57*f7ac0237SMarissa Garza    ${output}  ${stderr}  ${rc}=  OS Execute Command  opal-prd occ disable
58*f7ac0237SMarissa Garza    # With OCC disabled we should have OBSERVATION in output.
59*f7ac0237SMarissa Garza    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
60*f7ac0237SMarissa Garza    Should Contain  ${output}  OBSERVATION
61*f7ac0237SMarissa Garza
62*f7ac0237SMarissa Garza    # Re-enable OCC for remaining tests.
63*f7ac0237SMarissa Garza    ${output}  ${stderr}  ${rc}=  OS Execute Command  opal-prd occ enable
64*f7ac0237SMarissa Garza    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
65*f7ac0237SMarissa Garza    Should Contain  ${output}  ACTIVE
66*f7ac0237SMarissa Garza
67*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
68*f7ac0237SMarissa Garza    Should Be True  ${power} == ${max_power}
69*f7ac0237SMarissa Garza    ...  msg=DCMI power limit should be ${max_power}.
70*f7ac0237SMarissa Garza
71*f7ac0237SMarissa Garza    Activate DCMI Power And Verify
72*f7ac0237SMarissa Garza
73*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${near_max_power_50}
74*f7ac0237SMarissa Garza
75*f7ac0237SMarissa Garza
76*f7ac0237SMarissa GarzaEscale System On And PL Disabled
77*f7ac0237SMarissa Garza    [Documentation]  Change active power limit with system power on and
78*f7ac0237SMarissa Garza    ...  deactivate power limit prior to change.
79*f7ac0237SMarissa Garza    [Tags]  Escale_System_On_And_PL_Disabled
80*f7ac0237SMarissa Garza
81*f7ac0237SMarissa Garza    ${power_setting}=  Set Variable  ${near_max_power_100}
82*f7ac0237SMarissa Garza
83*f7ac0237SMarissa Garza    REST Power On  stack_mode=skip
84*f7ac0237SMarissa Garza
85*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${power_setting}
86*f7ac0237SMarissa Garza
87*f7ac0237SMarissa Garza    # Deactivate and check limit
88*f7ac0237SMarissa Garza    Deactivate DCMI Power And Verify
89*f7ac0237SMarissa Garza
90*f7ac0237SMarissa Garza    ${cmd}=  Catenate  dcmi power set_limit limit ${near_max_power_50}
91*f7ac0237SMarissa Garza    Run External IPMI Standard Command  ${cmd}
92*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
93*f7ac0237SMarissa Garza
94*f7ac0237SMarissa Garza    Should Be True  ${power} == ${near_max_power_50}
95*f7ac0237SMarissa Garza    ...  msg=Could not set power limit when power limiting deactivated.
96*f7ac0237SMarissa Garza
97*f7ac0237SMarissa Garza
98*f7ac0237SMarissa GarzaEscale Check Settings System On Then Off
99*f7ac0237SMarissa Garza    [Documentation]  Set power limit and activate power limit before
100*f7ac0237SMarissa Garza    ...  BMC state is power on.
101*f7ac0237SMarissa Garza    [Tags]  Escale_Check_Settings_System_On_Then_Off
102*f7ac0237SMarissa Garza
103*f7ac0237SMarissa Garza    ${power_setting}=  Set Variable  ${near_max_power_100}
104*f7ac0237SMarissa Garza
105*f7ac0237SMarissa Garza    REST Power On  stack_mode=skip
106*f7ac0237SMarissa Garza
107*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${power_setting}
108*f7ac0237SMarissa Garza    Deactivate DCMI Power And Verify
109*f7ac0237SMarissa Garza
110*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
111*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
112*f7ac0237SMarissa Garza    ...  msg=dcmi power limit not set to ${power_setting} as expected.
113*f7ac0237SMarissa Garza
114*f7ac0237SMarissa Garza    Smart Power Off
115*f7ac0237SMarissa Garza
116*f7ac0237SMarissa Garza    Activate DCMI Power And Verify
117*f7ac0237SMarissa Garza
118*f7ac0237SMarissa Garza    REST Power On
119*f7ac0237SMarissa Garza
120*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
121*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
122*f7ac0237SMarissa Garza    ...  msg=Power limit setting of watts not retained at Runtime.
123*f7ac0237SMarissa Garza
124*f7ac0237SMarissa Garza    Deactivate DCMI Power And Verify
125*f7ac0237SMarissa Garza
126*f7ac0237SMarissa Garza
127*f7ac0237SMarissa GarzaEscale Check Settings System Off Then On
128*f7ac0237SMarissa Garza    [Documentation]  Set and activate power limit with system power off.
129*f7ac0237SMarissa Garza    [Tags]  Escale_Check_Settings_System_Off_Then_On
130*f7ac0237SMarissa Garza
131*f7ac0237SMarissa Garza    ${power_setting}=  Set Variable  ${near_max_power_50}
132*f7ac0237SMarissa Garza
133*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${power_setting}
134*f7ac0237SMarissa Garza    Deactivate DCMI Power and Verify
135*f7ac0237SMarissa Garza
136*f7ac0237SMarissa Garza    Smart Power Off
137*f7ac0237SMarissa Garza
138*f7ac0237SMarissa Garza    # Check deactivated and the power limit.
139*f7ac0237SMarissa Garza    Fail If DCMI Power Is Not Deactivated
140*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
141*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
142*f7ac0237SMarissa Garza    ...  msg=DCMI power not set at ${power_setting} as expected
143*f7ac0237SMarissa Garza
144*f7ac0237SMarissa Garza    Activate DCMI Power And Verify
145*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${power_setting}
146*f7ac0237SMarissa Garza
147*f7ac0237SMarissa Garza    REST Power On
148*f7ac0237SMarissa Garza
149*f7ac0237SMarissa Garza    Fail If DCMI Power Is Not Activated
150*f7ac0237SMarissa Garza
151*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
152*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
153*f7ac0237SMarissa Garza    ...  msg=Power limit setting not retained at Runtime.
154*f7ac0237SMarissa Garza
155*f7ac0237SMarissa Garza
156*f7ac0237SMarissa GarzaEscale Change Limit At Runtime
157*f7ac0237SMarissa Garza    [Documentation]  Change power limit at runtime.
158*f7ac0237SMarissa Garza    [Tags]  Escale_Change_Limit_At_Runtime
159*f7ac0237SMarissa Garza
160*f7ac0237SMarissa Garza    ${power_setting}=  Set Variable  ${near_max_power_100}
161*f7ac0237SMarissa Garza
162*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${near_max_power_50}
163*f7ac0237SMarissa Garza
164*f7ac0237SMarissa Garza    Smart Power Off
165*f7ac0237SMarissa Garza
166*f7ac0237SMarissa Garza    REST Power On  stack_mode=skip
167*f7ac0237SMarissa Garza
168*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${power_setting}
169*f7ac0237SMarissa Garza
170*f7ac0237SMarissa Garza    # Check that DCMI power limit setting = ${power_setting}.
171*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
172*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
173*f7ac0237SMarissa Garza    ...  msg=DCMI power limit not set to ${power_setting} watts as expected.
174*f7ac0237SMarissa Garza
175*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${max_power}
176*f7ac0237SMarissa Garza
177*f7ac0237SMarissa Garza
178*f7ac0237SMarissa GarzaEscale Disable And Enable At Runtime
179*f7ac0237SMarissa Garza    [Documentation]  Disable/enable power limit at runtime.
180*f7ac0237SMarissa Garza    [Tags]  Escale_Disable_And_Enable_At_Runtime
181*f7ac0237SMarissa Garza
182*f7ac0237SMarissa Garza    ${power_setting}=  Set Variable  ${near_max_power_50}
183*f7ac0237SMarissa Garza
184*f7ac0237SMarissa Garza    Smart Power Off
185*f7ac0237SMarissa Garza
186*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${power_setting}
187*f7ac0237SMarissa Garza    Activate DCMI Power And Verify
188*f7ac0237SMarissa Garza
189*f7ac0237SMarissa Garza    # Power on the system.
190*f7ac0237SMarissa Garza    REST Power On
191*f7ac0237SMarissa Garza
192*f7ac0237SMarissa Garza    # Check that DCMI power limit setting = ${power_setting}.
193*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
194*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
195*f7ac0237SMarissa Garza    ...  msg=DCMI power limit not set to ${power_setting} watts as expected.
196*f7ac0237SMarissa Garza
197*f7ac0237SMarissa Garza    Deactivate DCMI Power And Verify
198*f7ac0237SMarissa Garza
199*f7ac0237SMarissa Garza    Activate DCMI Power And Verify
200*f7ac0237SMarissa Garza
201*f7ac0237SMarissa Garza    ${power}=  Get DCMI Power Limit
202*f7ac0237SMarissa Garza    Should Be True  ${power} == ${power_setting}
203*f7ac0237SMarissa Garza    ...  msg=DCMI power limit not set to ${power_setting} watts as expected.
204*f7ac0237SMarissa Garza
205*f7ac0237SMarissa Garza
206*f7ac0237SMarissa Garza*** Keywords ***
207*f7ac0237SMarissa Garza
208*f7ac0237SMarissa Garza
209*f7ac0237SMarissa GarzaSuite Setup Execution
210*f7ac0237SMarissa Garza    [Documentation]  Do test setup initialization.
211*f7ac0237SMarissa Garza    #  Power Off if system if not already off.
212*f7ac0237SMarissa Garza    #  Save initial settings.
213*f7ac0237SMarissa Garza    #  Deactivate power and set limit.
214*f7ac0237SMarissa Garza
215*f7ac0237SMarissa Garza    Smart Power Off
216*f7ac0237SMarissa Garza
217*f7ac0237SMarissa Garza    # Save the deactivation/activation setting.
218*f7ac0237SMarissa Garza    ${cmd}=  Catenate  dcmi power get_limit | grep State
219*f7ac0237SMarissa Garza    ${resp}=  Run External IPMI Standard Command  ${cmd}
220*f7ac0237SMarissa Garza    # Response is either "Power Limit Active" or "No Active Power Limit".
221*f7ac0237SMarissa Garza    ${initial_deactivation}=  Get Count  ${resp}  No
222*f7ac0237SMarissa Garza    # If deactivated: initial_deactivation = 1, 0 otherwise.
223*f7ac0237SMarissa Garza    Set Suite Variable  ${initial_deactivation}  children=true
224*f7ac0237SMarissa Garza
225*f7ac0237SMarissa Garza    # Save the power limit setting.
226*f7ac0237SMarissa Garza    ${initial_power_setting}=  Get DCMI Power Limit
227*f7ac0237SMarissa Garza    Set Suite Variable  ${initial_power_setting}  children=true
228*f7ac0237SMarissa Garza
229*f7ac0237SMarissa Garza    # Set power limiting deactivated.
230*f7ac0237SMarissa Garza    Deactivate DCMI Power And Verify
231*f7ac0237SMarissa Garza
232*f7ac0237SMarissa Garza    # Set initial power setting value.
233*f7ac0237SMarissa Garza    Set DCMI Power Limit And Verify  ${max_power}
234*f7ac0237SMarissa Garza
235*f7ac0237SMarissa Garza
236*f7ac0237SMarissa GarzaTest Teardown Execution
237*f7ac0237SMarissa Garza    [Documentation]  Do the post test teardown.
238*f7ac0237SMarissa Garza    # FFDC on test case fail.
239*f7ac0237SMarissa Garza    # Power off the OS and wait for power off state.
240*f7ac0237SMarissa Garza    # Return the system's initial deactivation/activation setting.
241*f7ac0237SMarissa Garza    # Return the system's initial power limit setting.
242*f7ac0237SMarissa Garza
243*f7ac0237SMarissa Garza    FFDC On Test Case Fail
244*f7ac0237SMarissa Garza
245*f7ac0237SMarissa Garza    Smart Power Off
246*f7ac0237SMarissa Garza
247*f7ac0237SMarissa Garza    Run Keyword If  '${initial_power_setting}' != '${0}'
248*f7ac0237SMarissa Garza    ...  Set DCMI Power Limit And Verify  ${initial_power_setting}
249*f7ac0237SMarissa Garza
250*f7ac0237SMarissa Garza    Run Keyword If  '${initial_deactivation}' == '${1}'
251*f7ac0237SMarissa Garza    ...  Deactivate DCMI Power And Verify  ELSE  Activate DCMI Power And Verify
252