1*** Settings ***
2Documentation  Test IPMI sensor IDs.
3
4Resource               ../lib/rest_client.robot
5Resource               ../lib/ipmi_client.robot
6Resource               ../lib/openbmc_ffdc.robot
7Resource               ../lib/boot_utils.robot
8Resource               ../lib/bmc_redfish_resource.robot
9Library                ../lib/ipmi_utils.py
10
11Suite setup             Suite Setup Execution
12Suite Teardown          Redfish.Logout
13Test Teardown           Test Teardown Execution
14
15Force Tags              SDR_Test
16
17
18*** Test Cases ***
19
20Verify SDR Info
21    [Documentation]  Verify sdr info command output.
22    [Tags]  Verify_SDR_Info
23    # Example of SDR info command output:
24    # SDR Version                         : 0x51
25    # Record Count                        : 216
26    # Free Space                          : unspecified
27    # Most recent Addition                :
28    # Most recent Erase                   :
29    # SDR overflow                        : no
30    # SDR Repository Update Support       : unspecified
31    # Delete SDR supported                : no
32    # Partial Add SDR supported           : no
33    # Reserve SDR repository supported    : no
34    # SDR Repository Alloc info supported : no
35
36    ${sdr_info}=  Get SDR Info
37    Should Be Equal  ${sdr_info['sdr_version']}  0x51
38
39    # Get sensor count from "sdr elist all" command output.
40    ${sensor_count}=  Get Sensor Count
41    Should Be Equal As Strings
42    ...  ${sdr_info['record_count']}  ${sensor_count}
43
44    Should Be Equal  ${sdr_info['free_space']}  unspecified
45    Should Be Equal  ${sdr_info['most_recent_addition']}  ${EMPTY}
46    Should Be Equal  ${sdr_info['most_recent_erase']}  ${EMPTY}
47    Should Be Equal  ${sdr_info['sdr_overflow']}  no
48    Should Be Equal  ${sdr_info['sdr_repository_update_support']}  unspecified
49    Should Be Equal  ${sdr_info['delete_sdr_supported']}  no
50    Should Be Equal  ${sdr_info['partial_add_sdr_supported']}  no
51    Should Be Equal  ${sdr_info['reserve_sdr_repository_supported']}  no
52    Should Be Equal  ${sdr_info['sdr_repository_alloc_info_supported']}  no
53
54
55Test CPU Core SDR Info At Power On
56    [Documentation]  Verify CPU core SDR info via IPMI and Redfish at power on.
57
58    [Tags]  Test_CPU_Core_SDR_Info_At_Power_On
59
60    Redfish Power On  stack_mode=skip  quiet=1
61    Test SDR Info  core
62
63
64Test DIMM SDR Info At Power On
65    [Documentation]  Verify DIMM SDR info via IPMI and Redfish at power on.
66
67    [Tags]  Test_DIMM_SDR_Info_At_Power_On
68
69    Redfish Power On  stack_mode=skip  quiet=1
70    Test SDR Info  dimm
71
72
73Test GPU SDR Info At Power On
74    [Documentation]  Verify GPU SDR info via IPMI and Redfish at power on.
75
76    [Tags]  Test_GPU_SDR_Info_At_Power_On
77
78    Redfish Power On  stack_mode=skip  quiet=1
79    Test SDR Info  gv100card
80
81
82Test CPU Core SDR Info At Power Off
83    [Documentation]  Verify CPU core SDR info via IPMI and Redfish at power off.
84
85    [Tags]  Test_CPU_Core_SDR_Info_At_Power_Off
86
87    Redfish Hard Power Off  stack_mode=skip  quiet=1
88    Test SDR Info  core
89
90
91Test DIMM SDR Info At Power Off
92    [Documentation]  Verify DIMM SDR info via IPMI and Redfish at power off.
93
94    [Tags]  Test_DIMM_SDR_Info_At_Power_Off
95
96    Redfish Hard Power Off  stack_mode=skip  quiet=1
97    Test SDR Info  dimm
98
99
100Test Turbo Allowed SDR Info
101    [Documentation]  Verify turbo allowed SDR info via IPMI and Redfish.
102    [Tags]  Test_Turbo_Allowed_SDR_Info
103
104    ${component_uri_list}=  Get Component URIs  turbo_allowed
105    ${component_uri}=  Get From List  ${component_uri_list}  0
106    ${state_rest}=  Read Attribute  ${component_uri}  TurboAllowed
107
108    ${state_ipmi}=  Get SDR Presence Via IPMI  turbo_allowed${SPACE}
109
110    Run Keyword If  '${state_ipmi}' == 'Disabled'
111    ...    Should Be True  ${state_rest} == ${0}
112    ...  ELSE IF  '${state_ipmi}' == 'State Asserted'
113    ...    Should Be True  ${state_rest} == ${1}
114
115
116Test Auto Reboot SDR Info
117    [Documentation]  Verify auto reboot SDR info via IPMI and Redfish.
118    [Tags]  Test_Auto_Reboot_SDR_Info
119
120
121    ${component_uri_list}=  Get Component URIs  auto_reboot
122    ${component_uri}=  Get From List  ${component_uri_list}  0
123    ${state_rest}=  Read Attribute  ${component_uri}  AutoReboot
124
125    ${state_ipmi}=  Get SDR Presence Via IPMI  auto_reboot${SPACE}
126
127    Run Keyword If  '${state_ipmi}' == 'Disabled'
128    ...    Should Be True  ${state_rest} == ${0}
129    ...  ELSE IF  '${state_ipmi}' == 'State Asserted'
130    ...    Should Be True  ${state_rest} == ${1}
131
132
133Test TPM Enable SDR Info
134    [Documentation]  Verify auto reboot SDR info via IPMI and Redfish.
135    [Tags]  Test_TPM_Enable_SDR_Info
136
137
138    ${component_uri_list}=  Get Component URIs  TPMEnable
139    ${component_uri}=  Get From List  ${component_uri_list}  0
140    ${state_rest}=  Read Attribute  ${component_uri}  TPMEnable
141
142    ${state_ipmi}=  Get SDR Presence Via IPMI  auto_reboot${SPACE}
143
144    Run Keyword If  '${state_ipmi}' == 'Disabled'
145    ...    Should Be True  ${state_rest} == ${0}
146    ...  ELSE IF  '${state_ipmi}' == 'State Asserted'
147    ...    Should Be True  ${state_rest} == ${1}
148
149
150*** Keywords ***
151
152Get Sensor Count
153    [Documentation]  Get sensors count using "sdr elist all" command.
154    # Example of "sdr elist all" command output:
155    # BootProgress     | 03h | ok  | 34.2 |
156    # OperatingSystemS | 05h | ok  | 35.1 |
157    # AttemptsLeft     | 07h | ok  | 34.1 |
158    # occ0             | 08h | ok  | 210.1 | Device Disabled
159    # occ1             | 09h | ok  | 210.2 | Device Disabled
160    # p0_core0_temp    | 11h | ns  |  3.1 | Disabled
161    # cpu0_core0       | 12h | ok  | 208.1 | Presence detected
162    # p0_core1_temp    | 14h | ns  |  3.2 | Disabled
163    # cpu0_core1       | 15h | ok  | 208.2 | Presence detected
164    # p0_core2_temp    | 17h | ns  |  3.3 | Disabled
165    # ..
166    # ..
167    # ..
168    # ..
169    # ..
170    # ..
171    # fan3             | 00h | ns  | 29.4 | Logical FRU @35h
172    # bmc              | 00h | ns  |  6.1 | Logical FRU @3Ch
173    # ethernet         | 00h | ns  |  1.1 | Logical FRU @46h
174
175    ${output}=  Run IPMI Standard Command  sdr elist all
176    ${sensor_list}=  Split String  ${output}  \n
177    ${sensor_count}=  Get Length  ${sensor_list}
178    [Return]  ${sensor_count}
179
180
181Get Component URIs
182    [Documentation]  Get URIs for given component from given URIs
183    ...  and return as a list.
184    [Arguments]  ${component_name}  ${uri_list}=${SYSTEM_URI}
185
186    # A sample result returned for the "core" component:
187    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0
188    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core1
189    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core10
190    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core11
191    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core12
192    # (etc.)
193
194    # Description of argument(s):
195    # component_name    Component name (e.g. "core", "dimm", etc.).
196    # uri_list          URI list.
197
198    ${component_uris}=  Get Matches  ${uri_list}
199    ...  regexp=^.*[0-9a-z_].${component_name}\[_0-9a-z]*$
200    ...  case_insensitive=${True}
201    [Return]  ${component_uris}
202
203
204Get SDR Presence Via IPMI
205    [Documentation]  Return presence info from IPMI sensor data record.
206    [Arguments]  ${component_name}
207
208    # Description of argument(s):
209    # component_name    Component name (e.g. "cpu0_core0", "dimm0", etc.).
210
211    # Example of IPMI SDR elist output.
212    # BootProgress     | 03h | ok  | 34.2 |
213    # OperatingSystemS | 05h | ok  | 35.1 | boot completed - device not specified
214    # AttemptsLeft     | 07h | ok  | 34.1 |
215    # occ0             | 08h | ok  | 210.1 | Device Disabled
216    # occ1             | 09h | ok  | 210.2 | Device Disabled
217    # cpu0_core0       | 12h | ok  | 208.1 | Presence detected
218    # cpu0_core1       | 15h | ok  | 208.2 | Disabled
219    # cpu0_core2       | 18h | ok  | 208.3 | Presence detected
220    # dimm0            | A6h | ok  | 32.1 | Presence Detected
221    # dimm1            | A8h | ok  | 32.2 | Presence Detected
222    # dimm2            | AAh | ok  | 32.9 | Presence Detected
223    # gv100card0       | C5h | ok  | 216.1 | 0 unspecified
224    # gv100card1       | C8h | ok  | 216.2 | 0 unspecified
225    # TPMEnable        | D7h | ok  |  3.3 | State Asserted
226    # auto_reboot      | DAh | ok  | 33.2 | State Asserted
227    # volatile         | DBh | ok  | 33.1 | State Deasserted
228
229    ${sdr_elist_output}=  Run IPMI Standard Command  sdr elist
230    ${sdr_component_line}=
231    ...  Get Lines Containing String  ${sdr_elist_output}  ${component_name}
232    ...  case-insensitive
233
234    ${presence_ipmi}=  Fetch From Right  ${sdr_component_line}  |
235    ${presence_ipmi}=  Strip String  ${presence_ipmi}
236    [Return]  ${presence_ipmi}
237
238
239Verify SDR
240    [Documentation]  Verify IPMI sensor data record for given component
241    ...  with Redfish.
242    [Arguments]  ${component_name}
243
244    # Description of argument(s):
245    # component_name    Component name (e.g. "cpu0/core0", "dimm0", etc.).
246
247    ${presence_rest}=  Read Attribute
248    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard/${component_name}
249    ...  Present
250    ${functional_rest}=  Read Attribute
251    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard/${component_name}
252    ...  Functional
253
254    # Replace "/" with "_" if there is any "/" in component name.
255    # e.g. cpu0/core0 to cpu0_core0
256    ${component_name}=  Replace String  ${component_name}  /  _
257    ${presence_ipmi}=  Get SDR Presence Via IPMI  ${component_name}${SPACE}
258
259    Run Keyword If  '${presence_ipmi}' == 'Disabled' or '${presence_ipmi}' == ''
260    ...    Should Be True  ${presence_rest} == ${0} and ${functional_rest} == ${0}
261    ...  ELSE IF  '${presence_ipmi}' == 'Presence Detected' or '${presence_ipmi}' == 'Presence detected'
262    ...    Should Be True  ${presence_rest} == ${1} and ${functional_rest} == ${1}
263    ...  ELSE IF  '${presence_ipmi}' == 'State Asserted'
264    ...    Should Be True  ${presence_rest} == ${1} and ${functional_rest} == ${1}
265    ...  ELSE IF  '${presence_ipmi}' == 'State Deasserted'
266    ...    Should Be True  ${presence_rest} == ${1} and ${functional_rest} == ${0}
267    ...  ELSE  Fail  msg=Invalid Presence${presence_ipmi}
268
269
270Test SDR Info
271    [Documentation]  Test SDR info for given component.
272    [Arguments]  ${component_name}
273
274    # Description of argument(s):
275    # component_name    Component name (e.g. "core", "dimm", etc.).
276
277    ${component_uri_list}=  Get Component URIs  ${component_name}
278
279    FOR  ${uri}  IN  @{component_uri_list}
280      ${component_name}=  Fetch From Right  ${uri}  motherboard/
281      Log To Console  ${component_name}
282      Verify SDR  ${component_name}
283    END
284
285
286Suite Setup Execution
287    [Documentation]  Do the initial suite setup.
288
289    Redfish.Login
290    Redfish Power On  stack_mode=skip  quiet=1
291
292    ${uri_list}=  Read Properties  ${OPENBMC_BASE_URI}list
293    Set Suite Variable  ${SYSTEM_URI}  ${uri_list}
294    Log  ${uri_list}
295
296
297Test Teardown Execution
298    [Documentation]  Do the post test teardown.
299
300    FFDC On Test Case Fail
301