blob: 149a4eebe1e5bdd3a5270d583f4d11deeeeef421 [file] [log] [blame]
Steven Sombarc90c8e22019-05-21 11:28:48 -05001*** Settings ***
Steven Sombarb76d4df2019-08-06 15:03:47 -05002Documentation Inventory of hardware FRUs under redfish.
Steven Sombarc90c8e22019-05-21 11:28:48 -05003
4Resource ../../lib/bmc_redfish_resource.robot
5Resource ../../lib/bmc_redfish_utils.robot
6Resource ../../lib/openbmc_ffdc.robot
Steven Sombarbccfd512019-06-05 15:50:35 -05007Library ../../lib/gen_robot_valid.py
Steven Sombarc90c8e22019-05-21 11:28:48 -05008
9Suite Setup Suite Setup Execution
10Suite Teardown Suite Teardown Execution
Steven Sombarecf10e32019-07-25 08:51:00 -050011Test Setup Printn
Steven Sombarc90c8e22019-05-21 11:28:48 -050012Test Teardown Test Teardown Execution
13
Igor Kanyukafeb79d62025-10-20 21:24:03 +010014Test Tags Systems_Inventory
15
Steven Sombarc90c8e22019-05-21 11:28:48 -050016*** Variables ***
17
18# The passing criteria. Must have at least this many.
Steven Sombarbccfd512019-06-05 15:50:35 -050019${min_num_dimms} 2
20${min_num_cpus} 1
Steven Sombar815fa632019-07-16 14:24:40 -050021${min_num_cores} 18
Steven Sombarb76d4df2019-08-06 15:03:47 -050022${min_num_power_supplies} 1
Steven Sombarc90c8e22019-05-21 11:28:48 -050023
24
25*** Test Cases ***
26
Steven Sombarb76d4df2019-08-06 15:03:47 -050027Verify CPU And Core Count
28 [Documentation] Get the total number of CPUs and cores in the system.
29 ... Verify counts are above minimums.
30 [Tags] Verify_CPU_And_Core_Count
Steven Sombarc90c8e22019-05-21 11:28:48 -050031
Steven Sombarb76d4df2019-08-06 15:03:47 -050032 # Select only CPUs with Health = "OK".
33 ${cpus_ok}= Filter Struct ${cpu_info} [('Health', 'OK')]
34 ${num_cpus}= Get Length ${cpus_ok}
Steven Sombarc90c8e22019-05-21 11:28:48 -050035
Steven Sombarb76d4df2019-08-06 15:03:47 -050036 Rprint Vars num_cpus min_num_cpus
Steven Sombarc90c8e22019-05-21 11:28:48 -050037
Steven Sombarb76d4df2019-08-06 15:03:47 -050038 # Assert that num_cpus is greater than or equal to min_num_cpus.
39 Valid Range num_cpus ${min_num_cpus}
Steven Sombar815fa632019-07-16 14:24:40 -050040
Steven Sombarb76d4df2019-08-06 15:03:47 -050041 # Get the number of cores.
Steven Sombar815fa632019-07-16 14:24:40 -050042 ${total_num_cores}= Set Variable ${0}
Sushma M Md27fc312020-06-19 08:26:50 -050043 FOR ${cpu} IN @{cpus_ok}
Steven Sombarb76d4df2019-08-06 15:03:47 -050044 ${cores}= Get CPU TotalCores ${cpu}
45 ${total_num_cores}= Evaluate $total_num_cores + ${cores}
Steven Sombar815fa632019-07-16 14:24:40 -050046 END
47
Steven Sombarb76d4df2019-08-06 15:03:47 -050048 Rprint Vars total_num_cores min_num_cores
Steven Sombarecf10e32019-07-25 08:51:00 -050049
Steven Sombarb76d4df2019-08-06 15:03:47 -050050 # Assert that total_num_cores is greater than or equal to
51 # min_num_cores.
52 Valid Range total_num_cores ${min_num_cores}
Steven Sombar815fa632019-07-16 14:24:40 -050053
54
Steven Sombarc90c8e22019-05-21 11:28:48 -050055Get Memory Inventory Via Redfish And Verify
56 [Documentation] Get the number of DIMMs that are functional and enabled.
57 [Tags] Get_Memory_Inventory_Via_Redfish_And_Verify
58
Steven Sombarbccfd512019-06-05 15:50:35 -050059 Verify FRU Inventory Minimums Memory ${min_num_dimms}
60
61
Steven Sombarc5d65842019-08-21 15:39:08 -050062Get Memory Summary State And Verify Enabled
63 [Documentation] Check that the state of the MemorySummary attribute
64 ... under /redfish/v1/Systems/system is 'Enabled'.
65 [Tags] Get_Memory_Summary_State_And_Verify_Enabled
66
67 ${status}= Redfish.Get Attribute ${SYSTEM_BASE_URI} MemorySummary
68 ${memory_summary_state}= Set Variable ${status['Status']['State']}
69 Rprint Vars memory_summary_state
70
71 Should Be Equal As Strings Enabled ${memory_summary_state}
72 ... msg=MemorySummary State is not 'Enabled'.
73
74
Steven Sombar815fa632019-07-16 14:24:40 -050075Get System Serial And Verify Populated
76 [Documentation] Check that the System SerialNumber is non-blank.
77 [Tags] Get_System_Serial_And_Verify_Populated
Steven Sombarbccfd512019-06-05 15:50:35 -050078
79 ${serial_number}= Redfish.Get Attribute ${SYSTEM_BASE_URI} SerialNumber
Michael Walshe7edb222019-08-19 17:39:38 -050080 Valid Value serial_number
Steven Sombarbccfd512019-06-05 15:50:35 -050081 Rprint Vars serial_number
82
83
84Get Model And Verify Populated
85 [Documentation] Check that the Model is non-blank.
86 [Tags] Get_Model_And_Verify_Populated
87
88 ${model}= Redfish.Get Attribute ${SYSTEM_BASE_URI} Model
Michael Walshe7edb222019-08-19 17:39:38 -050089 Valid Value model
Steven Sombarbccfd512019-06-05 15:50:35 -050090 Rprint Vars model
Steven Sombarc90c8e22019-05-21 11:28:48 -050091
92
Steven Sombar815fa632019-07-16 14:24:40 -050093Get Available Power Supplies And Verify
94 [Documentation] Get the number of functional power supplies and
95 ... verify that it is at or above the minimum.
96 [Tags] Get_Available_Power_Supplies_And_Verify
97
Steven Sombarb76d4df2019-08-06 15:03:47 -050098 # Select only power supplies with Health = "OK".
99 ${power_supplies_ok}= Filter Struct ${power_supplies} [('Health', 'OK')]
Steven Sombar815fa632019-07-16 14:24:40 -0500100
Steven Sombarb76d4df2019-08-06 15:03:47 -0500101 # Count the power supplies that are Enabled or StandbyOffline.
102 ${total_num_supplies}= Set Variable ${0}
Sushma M Md27fc312020-06-19 08:26:50 -0500103 FOR ${power_supply} IN @{power_supplies_ok}
Steven Sombarb76d4df2019-08-06 15:03:47 -0500104 # Example of power_supply:
105 # power_supply = {'@odata.id': '/redfish/v1/Chassis/chassis/Power#/PowerSupplies/0',
106 # 'Manufacturer': '', 'MemberId': 'powersupply0', 'Model': '2100', 'Name':
107 # 'powersupply0', 'PartNumber': 'PNPWR123', 'PowerInputWatts': 394.0,
108 # 'SerialNumber': '75B12W', 'Status': {'Health': 'OK', 'State': 'Enabled'}}
109 ${state}= Set Variable ${power_supply['Status']['State']}
110 ${good_state}= Evaluate
111 ... any(x in '${state}' for x in ('Enabled', 'StandbyOffline'))
Sridevi Rameshc6e7f932025-05-07 11:26:54 -0500112
Sridevi Rameshe54be142025-05-05 00:52:45 -0500113 IF not ${good_state} CONTINUE
Steven Sombarb76d4df2019-08-06 15:03:47 -0500114 ${total_num_supplies}= Evaluate $total_num_supplies + ${1}
Steven Sombar815fa632019-07-16 14:24:40 -0500115 END
116
Steven Sombarb76d4df2019-08-06 15:03:47 -0500117 Rprint Vars total_num_supplies min_num_power_supplies
Steven Sombar815fa632019-07-16 14:24:40 -0500118
Steven Sombarb76d4df2019-08-06 15:03:47 -0500119 Valid Range total_num_supplies ${min_num_power_supplies}
Steven Sombar815fa632019-07-16 14:24:40 -0500120
121
122Get Motherboard Serial And Verify Populated
123 [Documentation] Check that the Motherboard SerialNumber is non-blank.
124 [Tags] Get_Motherboard_Serial_And_Verify_Populated
125
George Keishing6ec9d702022-03-07 11:46:53 -0600126 ${serial_number}= Redfish.Get Attribute ${REDFISH_CHASSIS_URI}${CHASSIS_ID} SerialNumber
Michael Walshe7edb222019-08-19 17:39:38 -0500127 Valid Value serial_number
Steven Sombar815fa632019-07-16 14:24:40 -0500128 Rprint Vars serial_number
129
130
Steven Sombarc2ace202019-09-04 13:17:32 -0500131Verify Motherboard Manufacturer Field Value Populated
132 [Documentation] Check that the Motherboard manufacturer is non-blank.
133 [Tags] Verify_Motherboard_Manufacturer_Field_Value_Populated
134
George Keishing6ec9d702022-03-07 11:46:53 -0600135 ${motherboard_manufacturer}= Redfish.Get Attribute ${REDFISH_CHASSIS_URI}${CHASSIS_ID} Manufacturer
Steven Sombarc2ace202019-09-04 13:17:32 -0500136 Valid Value motherboard_manufacturer
George Keishingd2f210a2022-02-23 10:44:10 -0600137 Rprint Vars motherboard_manufacturer
Steven Sombarc2ace202019-09-04 13:17:32 -0500138
139
140Verify Motherboard Partnumber Field Value Populated
141 [Documentation] Check that the Motherboard partnumber is non-blank.
142 [Tags] Verify_Motherboard_Partnumber_Field_Value_Populated
143
George Keishing6ec9d702022-03-07 11:46:53 -0600144 ${motherboard_part_number}= Redfish.Get Attribute ${REDFISH_CHASSIS_URI}${CHASSIS_ID} PartNumber
Steven Sombarc2ace202019-09-04 13:17:32 -0500145 Valid Value motherboard_part_number
George Keishingd2f210a2022-02-23 10:44:10 -0600146 Rprint Vars motherboard_part_number
Steven Sombarc2ace202019-09-04 13:17:32 -0500147
148
Steven Sombarb76d4df2019-08-06 15:03:47 -0500149Check GPU States When Power On
150 [Documentation] Check the State of each of the GPUs
151 ... in the system. A system may have 0-6 GPUs.
152 [Tags] Check_GPU_States_When_Power_On
Steven Sombarecf10e32019-07-25 08:51:00 -0500153
Steven Sombarb76d4df2019-08-06 15:03:47 -0500154 # System was powered-on in Suite Setup.
155 GPU State Check
Steven Sombarecf10e32019-07-25 08:51:00 -0500156
Steven Sombarb76d4df2019-08-06 15:03:47 -0500157
158Check GPU States When Power Off
159 [Documentation] Check the State of the GPUs when power is Off.
160 [Tags] Check_GPU_States_When_Power_Off
161
162 Redfish Power Off
Steven Sombarb76d4df2019-08-06 15:03:47 -0500163 GPU State Check
Steven Sombarecf10e32019-07-25 08:51:00 -0500164
Nandakumar B122c41f2025-11-05 13:38:29 +0530165Verify Systems Collection With Unsupported Methods
166 [Documentation] Verify Systems collection with Unsupported methods
167 [Tags] Verify_Systems_Collection_With_Unsupported_Methods
168
169 # Get operation on Systems Collection
170 Redfish.Get /redfish/v1/Systems
171 ... valid_status_codes=[${HTTP_OK}]
172
173 # Put operation on Systems Collection
174 Redfish.Put /redfish/v1/Systems
175 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
176
177 # Post operation on Systems Collection
178 Redfish.Post /redfish/v1/Systems
179 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
180
181 # Delete operation on Systems Collection
182 Redfish.Delete /redfish/v1/Systems
183 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
184
185 # Patch operation on Systems Collection
186 Redfish.Patch /redfish/v1/Systems
187 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
188
189Verify Systems Instance Collection With Unsupported Methods
190 [Documentation] Verify Systems Instance collection with Unsupported methods
191 [Tags] Verify_Systems_Instance_Collection_With_Unsupported_Methods
192
193 # Get operation on Systems Instance Collection
194 Redfish.Get /redfish/v1/Systems/system
195 ... valid_status_codes=[${HTTP_OK}]
196
197 # Put operation on Systems Instance Collection
198 Redfish.Put /redfish/v1/Systems/system
199 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
200
201 # Post operation on Systems Instance Collection
202 Redfish.Post /redfish/v1/Systems/system
203 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
204
205 # Delete operation on Systems Instance Collection
206 Redfish.Delete /redfish/v1/Systems/system
207 ... valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
Steven Sombarecf10e32019-07-25 08:51:00 -0500208
Nandakumar B3da8ead2025-11-21 12:26:39 +0530209Verify And Modify Systems Instance Collection Properties
210 [Documentation] Verify And Modify Systems Instance Collection Properties
211 [Tags] Verify_And_Modify_Systems_Instance_Collection_Properties
212 [Template] Modify Systems Instance Collection Properties
213
214 #Action_type #Parameter
215 AutomaticRetryConfig Disabled
216 AutomaticRetryConfig RetryAttempts
217 BootSourceOverrideTarget Pxe
218 BootSourceOverrideTarget Hdd
219 BootSourceOverrideTarget Cd
220 BootSourceOverrideTarget Usb
221 BootSourceOverrideTarget BiosSetup
222 BootSourceOverrideTarget Diags
223 BootSourceOverrideTarget None
224 BootSourceOverrideMode Legacy
225 BootSourceOverrideMode UEFI
226
227
Steven Sombarc90c8e22019-05-21 11:28:48 -0500228*** Keywords ***
229
Nandakumar B3da8ead2025-11-21 12:26:39 +0530230Modify Systems Instance Collection Properties
231 [Documentation] Modify Systems Instance Collection Properties
232 [Arguments] ${action_type} ${parameter}
233 # Description of argument(s):
234 # action_type The action_type to modify the systems Instance Properties.
235 # parameter The parameter value to set for the specified action_type.
236
237 # Get original action_type from Systems Instance Properties
238 ${resp}= Redfish.Get Properties /redfish/v1/Systems/system
239 ... valid_status_codes=[${HTTP_OK}]
240 ${default_action_type}= Set Variable ${resp["Boot"]["${action_type}"]}
241
242 # Set new action_type in Systems Instance Properties
243 ${payload}= Catenate { "Boot":{"${action_type}":"${parameter}"}}
244 Redfish.Patch /redfish/v1/Systems/system body=${payload}
245 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
246
247 # Verify Modified action_type in Systems Instance Properties
248 ${resp}= Redfish.Get Properties /redfish/v1/Systems/system
249 ... valid_status_codes=[${HTTP_OK}]
250 Should Be Equal As Strings ${resp["Boot"]["${action_type}"]} ${parameter}
251
252 # Restore default action_type in Systems Instance Properties
253 ${payload}= Catenate { "Boot":{"${action_type}":"${default_action_type}"}}
254 Redfish.Patch /redfish/v1/Systems/system body=${payload}
255 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
256
257 # Verify Restored action_type in Systems Instance Properties
258 ${resp}= Redfish.Get Properties /redfish/v1/Systems/system
259 ... valid_status_codes=[${HTTP_OK}]
260 Should Be Equal As Strings ${resp["Boot"]["${action_type}"]} ${default_action_type}
Steven Sombarc90c8e22019-05-21 11:28:48 -0500261
Steven Sombarecf10e32019-07-25 08:51:00 -0500262Get CPU TotalCores
263 [Documentation] Return the TotalCores of a CPU.
264 ... Return 0 if this attribute is missing or NONE.
265 [Arguments] ${processor}
266
267 # Description of Argument(s):
268 # processor The Redfish URI of a CPU (e.g.
269 # "/redfish/v1/Systems/system/Processors/cpu0").
270
271 ${total_cores}= Redfish.Get Attribute ${processor} TotalCores
Sridevi Rameshe54be142025-05-05 00:52:45 -0500272 IF ${total_cores} is ${NONE} RETURN ${0}
George Keishing409df052024-01-17 22:36:14 +0530273 RETURN ${total_cores}
Steven Sombarecf10e32019-07-25 08:51:00 -0500274
275
Steven Sombarb76d4df2019-08-06 15:03:47 -0500276GPU State Check
277 [Documentation] The state of every "OK" GPU should be
278 ... "Absent", "Enabled", or "UnavailableOffline".
279
280 # Select only GPUs with Health = "OK".
281 ${gpus_ok}= Filter Struct ${gpu_info} [('Health', 'OK')]
282
Sushma M Md27fc312020-06-19 08:26:50 -0500283 FOR ${gpu} IN @{gpus_ok}
Steven Sombarb76d4df2019-08-06 15:03:47 -0500284 ${status}= Redfish.Get Attribute ${gpu} Status
285 ${state}= Set Variable ${status['State']}
286 ${good_state}= Evaluate
287 ... any(x in '${state}' for x in ('Absent', 'Enabled', 'UnavailableOffline'))
288 Rprint Vars gpu state
Sridevi Rameshe54be142025-05-05 00:52:45 -0500289 IF not ${good_state}
290 Fail msg=GPU State is not Absent, Enabled, or UnavailableOffline.
291 END
Steven Sombarb76d4df2019-08-06 15:03:47 -0500292 END
293
294
295Get Inventory URIs
296 [Documentation] Get and return a tuple of lists of URIs for CPU,
297 ... GPU and PowerSupplies.
298
Sridevi Rameshe54be142025-05-05 00:52:45 -0500299
Steven Sombarb76d4df2019-08-06 15:03:47 -0500300 ${processor_info}= Redfish_Utils.Enumerate Request
301 ... ${SYSTEM_BASE_URI}Processors return_json=0
302
303 ${cpu_info}= Filter Struct ${processor_info}
304 ... [('ProcessorType', 'CPU')] regex=1
305
306 ${gpu_info}= Filter Struct ${processor_info}
307 ... [('ProcessorType', 'Accelerator')] regex=1
308
309 ${power_supplies}= Redfish.Get Attribute
Glukhov Mikhail148b5b82023-01-20 15:14:44 +0300310 ... ${REDFISH_CHASSIS_URI}${CHASSIS_ID}/Power PowerSupplies
Steven Sombarb76d4df2019-08-06 15:03:47 -0500311
George Keishing409df052024-01-17 22:36:14 +0530312 RETURN ${cpu_info} ${gpu_info} ${power_supplies}
Steven Sombarb76d4df2019-08-06 15:03:47 -0500313
314
Steven Sombarbccfd512019-06-05 15:50:35 -0500315Verify FRU Inventory Minimums
George Keishing3292d4a2019-06-19 02:04:53 -0500316 [Documentation] Verify a minimum number of FRUs.
Steven Sombarbccfd512019-06-05 15:50:35 -0500317 [Arguments] ${fru_type} ${min_num_frus}
Steven Sombarc90c8e22019-05-21 11:28:48 -0500318
319 # Description of Argument(s):
Steven Sombarbccfd512019-06-05 15:50:35 -0500320 # fru_type The type of FRU (e.g. "Processors", "Memory", etc.).
321 # min_num_frus The minimum acceptable number of FRUs found.
Steven Sombarc90c8e22019-05-21 11:28:48 -0500322
Steven Sombarbccfd512019-06-05 15:50:35 -0500323 # A valid FRU will have a "State" key of "Enabled" and a "Health" key
324 # of "OK".
Steven Sombarc90c8e22019-05-21 11:28:48 -0500325
Steven Sombarbccfd512019-06-05 15:50:35 -0500326 ${status} ${num_valid_frus}= Run Key U Get Num Valid FRUs \ ${fru_type}
Steven Sombarc90c8e22019-05-21 11:28:48 -0500327
Steven Sombarecf10e32019-07-25 08:51:00 -0500328 Rprint Vars fru_type num_valid_frus min_num_frus
329
Steven Sombarbccfd512019-06-05 15:50:35 -0500330 Return From Keyword If ${num_valid_frus} >= ${min_num_frus}
331 Fail Too few "${fru_type}" FRUs found, found only ${num_valid_frus}.
Steven Sombarc90c8e22019-05-21 11:28:48 -0500332
333
334Suite Teardown Execution
335 [Documentation] Do the post suite teardown.
336
337 Redfish.Logout
338
339
340Suite Setup Execution
341 [Documentation] Do test case setup tasks.
342
343 Redfish.Login
George Keishing07fb41f2020-06-16 08:09:19 -0500344 Redfish Power On stack_mode=skip
Steven Sombarecf10e32019-07-25 08:51:00 -0500345
Steven Sombarb76d4df2019-08-06 15:03:47 -0500346 ${cpu_info} ${gpu_info} ${power_supplies}= Get Inventory URIs
Steven Sombarecf10e32019-07-25 08:51:00 -0500347
Steven Sombarb76d4df2019-08-06 15:03:47 -0500348 Set Suite Variable ${cpu_info}
349 Set Suite Variable ${gpu_info}
350 Set Suite Variable ${power_supplies}
Steven Sombarc90c8e22019-05-21 11:28:48 -0500351
352
353Test Teardown Execution
354 [Documentation] Do the post test teardown.
355
356 FFDC On Test Case Fail