1*** Settings ***
2Documentation  Open power domain keywords.
3
4Library        ../data/variables.py
5Resource       ../lib/utils.robot
6
7*** Keywords ***
8
9Get OCC Objects
10    [Documentation]  Get the OCC objects and return as a list.
11
12    # Example:
13    # {
14    #     "/org/open_power/control/occ0": {
15    #          "OccActive": 0
16    # },
17    #     "/org/open_power/control/occ1": {
18    #          "OccActive": 1
19    # }
20
21    ${occ_list}=  Get Endpoint Paths  ${OPENPOWER_CONTROL}  occ*
22
23    [Return]  ${occ_list}
24
25
26Get OCC Active State
27    [Documentation]  Get the OCC "OccActive" and return the attribute value.
28    [Arguments]  ${occ_object}
29
30    # Description of argument(s):
31    # occ_object   OCC object path.
32    #             (e.g. "/org/open_power/control/occ0").
33
34    ${occ_attribute}=  Read Attribute  ${occ_object}  OccActive
35    [Return]  ${occ_attribute}
36
37
38Count Object Entries
39    [Documentation]  Count the occurrence number of a given object.
40    [Arguments]  ${object_base_uri_path}  ${object_name}
41
42    # Description of argument(s):
43    # object_base_uri_path    Object base path
44    #                         (e.g. "/org/open_power/control/").
45    # object_name             Object name (e.g. "occ", "cpu" etc).
46
47    ${object_list}=  Get Endpoint Paths
48    ...  ${object_base_uri_path}  ${object_name}
49    ${list_count}=  Get Length  ${object_list}
50    [Return]  ${list_count}
51
52
53Read Object Attribute
54    [Documentation]  Return object attribute data.
55    [Arguments]  ${object_base_uri_path}  ${attribute_name}
56
57    # Description of argument(s):
58    # object_base_uri_path       Object path.
59    #                   (e.g. "/org/open_power/control/occ0").
60    # attribute_name    Object attribute name.
61
62    ${resp}=  OpenBMC Get Request
63    ...  ${object_base_uri_path}/attr/${attribute_name}  quiet=${1}
64    Return From Keyword If  ${resp.status_code} != ${HTTP_OK}
65    ${content}=  To JSON  ${resp.content}
66    [Return]  ${content["data"]}
67
68
69Verify OCC State
70    [Documentation]  Check OCC active state.
71    [Arguments]  ${expected_occ_active}=${1}
72    # Description of Argument(s):
73    # expected_occ_active  The expected occ_active value (i.e. 1/0).
74
75    # Example cpu_list data output:
76    #  /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
77    #  /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
78    ${cpu_list}=  Get Endpoint Paths
79    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard/  cpu*
80
81    :FOR  ${endpoint_path}  IN  @{cpu_list}
82    \  ${is_functional}=  Read Object Attribute  ${endpoint_path}  Functional
83    \  Continue For Loop If  ${is_functional} == ${0}
84    \  ${num}=  Set Variable  ${endpoint_path[-1]}
85    \  ${occ_active}=  Get OCC Active State  ${OPENPOWER_CONTROL}occ${num}
86    \  Should Be Equal  ${occ_active}  ${expected_occ_active}
87    ...  msg=OCC not in right state
88
89
90Get Sensors Aggregation Data
91    [Documentation]  Return open power sensors aggregation value list.
92    [Arguments]  ${object_base_uri_path}
93
94    # Description of argument(s):
95    # object_base_uri_path  An object path such as one of the elements
96    #                       returned by 'Get Sensors Aggregation URL List'
97    #                       (e.g. "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/average").
98
99    # Example of aggregation [epoch,time] data:
100    # "Values": [
101    #    [
102    #        1517815708479,  <-- EPOCH
103    #        282             <-- Power value in watts
104    #    ],
105    #    [
106    #        1517815678238,
107    #        282
108    #    ],
109    #    [
110    #        1517815648102,
111    #        282
112    #    ],
113    # ],
114
115    ${resp}=  Read Attribute  ${object_base_uri_path}  Values  quiet=${1}
116    ${power_sensors_value_list}=  Create List
117    :FOR  ${entry}  IN  @{resp}
118    \  Append To List  ${power_sensors_value_list}  ${entry[1]}
119    [Return]  ${power_sensors_value_list}
120
121
122Get Sensors Aggregation URL List
123    [Documentation]  Return the open power aggregation maximum list and the
124    ...  average list URIs.
125    [Arguments]  ${object_base_uri_path}
126
127    # Example of the 2 lists returned by this keyword:
128    # avgs:
129    #   avgs[0]: /org/open_power/sensors/aggregation/per_30s/ps0_input_power/average
130    #   avgs[1]: /org/open_power/sensors/aggregation/per_30s/ps1_input_power/average
131    # maxs:
132    #   maxs[0]: /org/open_power/sensors/aggregation/per_30s/ps1_input_power/maximum
133    #   maxs[1]: /org/open_power/sensors/aggregation/per_30s/ps0_input_power/maximum
134
135    # Description of argument(s):
136    # object_base_uri_path  Object path.
137    #                       base path "/org/open_power/sensors/"
138    #        (e.g. "base path + aggregation/per_30s/ps0_input_power/average")
139
140    # Example of open power sensor aggregation data as returned by the get
141    # request:
142    # /org/open_power/sensors/list
143    # [
144    #    "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/average",
145    #    "/org/open_power/sensors/aggregation/per_30s/ps1_input_power/maximum",
146    #    "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/maximum",
147    #    "/org/open_power/sensors/aggregation/per_30s/ps1_input_power/average"
148    # ]
149
150    ${resp}=  OpenBMC Get Request  ${object_base_uri_path}list  quiet=${1}
151    ${content}=  To JSON  ${resp.content}
152
153    ${power_supply_avg_list}=  Create List
154    ${power_supply_max_list}=  Create List
155
156    :FOR  ${entry}  IN  @{content["data"]}
157    \  ${status}=
158    ...  Run keyword And Return Status  Should Contain  ${entry}  average
159    \  Run Keyword If  ${status} == ${False}
160    ...    Append To List  ${power_supply_max_list}  ${entry}
161    ...  ELSE
162    ...    Append To List  ${power_supply_avg_list}  ${entry}
163
164    [Return]  ${power_supply_avg_list}  ${power_supply_max_list}
165
166
167REST Verify No Gard Records
168    [Documentation]  Verify no gard records are present.
169
170    ${resp}=  Read Properties  ${OPENPOWER_CONTROL}gard/enumerate
171    Log Dictionary  ${resp}
172    Should Be Empty  ${resp}  msg=Found gard records.
173