1*** Settings ***
2Documentation     Utilities for power management tests.
3
4Resource          ../lib/rest_client.robot
5Resource          ../lib/openbmc_ffdc.robot
6Resource          ../lib/boot_utils.robot
7Resource          ../lib/ipmi_client.robot
8Library           ../lib/var_funcs.py
9
10
11*** Keywords ***
12
13DCMI Power Get Limits
14    [Documentation]  Run dcmi power get_limit and return values as a
15    ...  dictionary.
16
17    # This keyword packages the five lines returned by dcmi power get_limit
18    # command into a dictionary.  For example, the dcmi command may return:
19    #  Current Limit State: No Active Power Limit
20    #  Exception actions:   Hard Power Off & Log Event to SEL
21    #  Power Limit:         500   Watts
22    #  Correction time:     0 milliseconds
23    #  Sampling period:     0 seconds
24    # The power limit setting can be obtained with the following:
25    # &{limits}=  DCMI Power Get Limits
26    # ${power_setting}=  Set Variable  ${limits['power_limit']}
27
28    ${output}=  Run External IPMI Standard Command  dcmi power get_limit
29    ${output}=  Remove String  ${output}  Watts
30    ${output}=  Remove String  ${output}  milliseconds
31    ${output}=  Remove String  ${output}  seconds
32    &{limits}=  Key Value Outbuf To Dict  ${output}
33    [Return]  &{limits}
34
35
36Get DCMI Power Limit
37    [Documentation]  Return the system's current DCMI power_limit
38    ...  watts setting.
39
40    &{limits}=  DCMI Power Get Limits
41    ${power_setting}=  Get From Dictionary  ${limits}  power_limit
42    [Return]  ${power_setting}
43
44
45Set DCMI Power Limit And Verify
46    [Documentation]  Set system power limit via IPMI DCMI command.
47    [Arguments]  ${power_limit}
48
49    # Description of argument(s):
50    # limit      The power limit in watts
51
52    ${cmd}=  Catenate  dcmi power set_limit limit ${power_limit}
53    Run External IPMI Standard Command  ${cmd}
54    ${power}=  Get DCMI Power Limit
55    Should Be True  ${power} == ${power_limit}
56    ...  msg=Failed setting dcmi power limit to ${power_limit} watts.
57
58
59Activate DCMI Power And Verify
60    [Documentation]  Activate DCMI power limiting.
61
62    ${resp}=  Run External IPMI Standard Command  dcmi power activate
63    Should Contain  ${resp}  successfully activated
64    ...  msg=Command failed: dcmi power activate.
65
66
67Fail If DCMI Power Is Not Activated
68    [Documentation]  Fail if DCMI power limiting is not activated.
69
70    ${cmd}=  Catenate  dcmi power get_limit | grep State:
71    ${resp}=  Run External IPMI Standard Command  ${cmd}
72    Should Contain  ${resp}  Power Limit Active  msg=DCMI power is not active.
73
74
75Deactivate DCMI Power And Verify
76    [Documentation]  Deactivate DCMI power power limiting.
77
78    ${cmd}=  Catenate  dcmi power deactivate | grep deactivated
79    ${resp}=  Run External IPMI Standard Command  ${cmd}
80    Should Contain  ${resp}  successfully deactivated
81    ...  msg=Command failed: dcmi power deactivater.
82
83
84Fail If DCMI Power Is Not Deactivated
85    [Documentation]  Fail if DCMI power limiting is not deactivated.
86
87    ${cmd}=  Catenate  dcmi power get_limit | grep State:
88    ${resp}=  Run External IPMI Standard Command  ${cmd}
89    Should Contain  ${resp}  No Active Power Limit
90    ...  msg=DCMI power is not deactivated.
91
92
93Get DCMI Power Limit Via REST
94    [Documentation]  Return the system's current DCMI power_limit
95    ...  watts setting using REST interface.
96
97    ${power_limit}=  Read Attribute  ${CONTROL_HOST_URI}power_cap  PowerCap
98    [Return]  ${power_limit}
99
100
101Set DCMI Power Limit Via REST
102    [Documentation]  Set system power limit via REST command.
103    [Arguments]  ${power_limit}  ${verify}=${True}
104
105    # Description of argument(s):
106    # power_limit  The power limit in watts.
107    # verify       If True, read the power setting to confirm.
108
109    ${int_power_limit}=  Convert To Integer  ${power_limit}
110    ${data}=  Create Dictionary  data=${int_power_limit}
111    Write Attribute   ${CONTROL_HOST_URI}power_cap  PowerCap  data=${data}
112    Return From Keyword If  ${verify} == ${False}
113    ${power}=  Read Attribute  ${CONTROL_HOST_URI}power_cap  PowerCap
114    Should Be True  ${power} == ${power_limit}
115    ...  msg=Failed setting power limit to ${power_limit} watts via REST.
116
117
118Activate DCMI Power Via REST
119    [Documentation]  Activate DCMI power limiting via REST.
120    [Arguments]  ${verify}=${True}
121
122    # Description of argument(s):
123    # verify       If True, read the setting to confirm.
124
125    ${data}=  Create Dictionary  data=${True}
126    Write Attribute   ${CONTROL_HOST_URI}power_cap  PowerCapEnable
127    ...  data=${data}
128    Return From Keyword If  ${verify} == ${False}
129    ${setting}=  Get DCMI Power Acivation Via REST
130    Should Be True  ${setting} == ${1}
131    ...  msg=Failed to activate power limiting via REST.
132
133
134Deactivate DCMI Power Via REST
135    [Documentation]  Deactivate DCMI power limiting via REST.
136    [Arguments]  ${verify}=${True}
137
138    # Description of argument(s):
139    # verify       If True, read the setting to confirm.
140
141    ${data}=  Create Dictionary  data=${False}
142    Write Attribute   ${CONTROL_HOST_URI}power_cap  PowerCapEnable
143    ...  data=${data}
144    Return From Keyword If  ${verify} == ${False}
145    ${setting}=  Get DCMI Power Acivation Via REST
146    Should Be True  ${setting} == ${0}
147    ...  msg=Failed to deactivate power limiting via REST.
148
149
150Get DCMI Power Acivation Via REST
151    [Documentation]  Return the system's current DCMI power activation
152    ...  state setting using REST interface.
153
154    ${power_activation_setting}=  Read Attribute
155    ...  ${CONTROL_HOST_URI}power_cap  PowerCapEnable
156    [Return]  ${power_activation_setting}
157
158
159OCC Tool Upload Setup
160    [Documentation]  Upload occtoolp9 to /tmp on the OS.
161
162    ${cmd}=  Catenate  wget --no-check-certificate
163    ...  -O/tmp/occtoolp9 --content-disposition
164    ...  https://github.com/open-power/occ/raw/master/src/tools/occtoolp9
165    ...  && chmod 777 /tmp/occtoolp9
166    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
167