blob: 4692088a7866343eaed47f6e7c6f82c72dc06c5e [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
George Keishingc8166ed2017-02-24 03:53:38 -06002Documentation System inventory related test.
3
Chris Austenb29d2e82016-06-07 12:25:35 -05004Resource ../lib/rest_client.robot
5Resource ../lib/utils.robot
Rahul Maheshwari908df572017-02-16 04:41:54 -06006Resource ../lib/state_manager.robot
George Keishingd55a4be2016-08-26 03:28:17 -05007Resource ../lib/openbmc_ffdc.robot
Sweta Potthuri654cbc02017-06-15 10:10:55 -05008Resource ../lib/list_utils.robot
Sweta Potthuriaf741cb2017-07-04 09:41:17 -05009Resource ../lib/boot_utils.robot
George Keishingefa97352017-03-13 07:13:03 -050010Library ../lib/utilities.py
George Keishing8c9efed2018-02-28 10:45:26 -060011Library Collections
Chris Austenb29d2e82016-06-07 12:25:35 -050012
13Variables ../data/variables.py
George Keishingc8166ed2017-02-24 03:53:38 -060014Variables ../data/inventory.py
Chris Austenb29d2e82016-06-07 12:25:35 -050015
George Keishingda0aa882017-12-05 06:44:03 -060016Suite Setup Suite Setup Execution
Rahul Maheshwari908df572017-02-16 04:41:54 -060017Test Teardown FFDC On Test Case Fail
Chris Austenb29d2e82016-06-07 12:25:35 -050018
Rahul Maheshwari3e9b0de2017-03-20 06:25:44 -050019Force Tags Inventory
20
Sweta Potthuri654cbc02017-06-15 10:10:55 -050021***Variables***
22
23${LOOP_COUNT} ${1}
24
Chris Austenb29d2e82016-06-07 12:25:35 -050025*** Test Cases ***
26
George Keishingc8166ed2017-02-24 03:53:38 -060027Verify System Inventory Path
28 [Documentation] Check if system inventory path exist.
29 [Tags] Verify_System_Inventory_Path
30 # When the host is booted, system inventory path should exist.
31 # Example: /xyz/openbmc_project/inventory/system
32 Get Inventory system
Chris Austenb29d2e82016-06-07 12:25:35 -050033
Rahul Maheshwaribb20f732016-10-24 06:27:14 -050034
George Keishing3d734312017-07-24 04:10:25 -050035Verify Boxelder Present Property
36 [Documentation] Boxelder should be present by default.
George Keishing01b59ac2017-11-24 10:43:58 -060037 [Tags] Verify_Boxelder_Present_Property
George Keishing3d734312017-07-24 04:10:25 -050038 # Example:
39 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc":
40 # {
41 # "BuildDate": "",
42 # "FieldReplaceable": 0,
43 # "Manufacturer": "IBM",
44 # "Model": "",
45 # "PartNumber": "01DH051",
46 # "Present": 1,
47 # "PrettyName": "BMC PLANAR ",
48 # "SerialNumber": "000000000000"
49 # },
50 ${json_data}= Get Inventory system/chassis/motherboard/boxelder/bmc
51 Should Be True ${json_data["data"]["Present"]}
George Keishing33dd4432017-09-13 01:48:26 -050052 Should Not Be Equal As Strings
53 ... ${json_data["data"]["SerialNumber"]} 000000000000
54 ... msg=BMC planar serial number invalid.
George Keishing3d734312017-07-24 04:10:25 -050055
56
George Keishinge4e1d272017-11-24 06:05:21 -060057Verify UUID Entry
58 [Documentation] UUID entry should exist in BMC planar property.
59 [Tags] Verify_UUID_Entry
60 # Example:
61 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc":
62 # {
63 # "BuildDate": "",
64 # "FieldReplaceable": 0,
65 # "Manufacturer": "IBM",
66 # "Model": "",
67 # "PartNumber": "01DH051",
68 # "Present": 1,
69 # "PrettyName": "BMC PLANAR ",
70 # "SerialNumber": "000000000000"
71 # "UUID": ""
72 # },
George Keishingfa239972017-12-11 06:45:05 -060073 ${resp}= OpenBMC Get Request
74 ... ${HOST_INVENTORY_URI}system/chassis/motherboard/boxelder/bmc/attr/UUID
75 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
George Keishinge4e1d272017-11-24 06:05:21 -060076
77
George Keishing3d734312017-07-24 04:10:25 -050078Verify Boxelder MAC Address Property Is Populated
79 [Documentation] Boxelder should be present by default.
80 [Tags] Verify_Boxelder_MAC_Address_Property_Is_Populated
81 # Example:
82 # /xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet
83 # {
84 # "FieldReplaceable": 0,
85 # "MACAddress": "00:00:00:00:00:00",
86 # "Present": 1,
87 # "PrettyName": ""
88 # }
89
90 ${json_data}= Get Inventory
91 ... system/chassis/motherboard/boxelder/bmc/ethernet
92 Should Be True ${json_data["data"]["Present"]}
93 Should Not Be Equal As Strings
94 ... ${json_data["data"]["MACAddress"]} 00:00:00:00:00:00
95
96 # eth0 Link encap:Ethernet HWaddr 70:E2:84:14:23:F9
97 ${mac_addr} ${stderr} ${rc}= BMC Execute Command
98 ... /sbin/ifconfig -a | grep HWaddr | awk -F'HWaddr ' '{print $2}'
99 ... return_stderr=True
100 Should Be Empty ${stderr}
Rahul Maheshwari844dbe72017-09-18 00:24:23 -0500101 Should Be Equal As Strings ${json_data["data"]["MACAddress"]}
102 ... ${mac_addr.strip()} msg=MAC address configured incorrectly.
103 ... ignore_case=True
George Keishing3d734312017-07-24 04:10:25 -0500104
105
George Keishingc8166ed2017-02-24 03:53:38 -0600106Verify Chassis Motherboard Properties
107 [Documentation] Check if chassis motherboard properties are
108 ... populated valid.
109 [Tags] Verify_Chassis_Motherboard_Properties
110 # When the host is booted, the following properties should
111 # be populated Manufacturer, PartNumber, SerialNumber and
112 # it should not be zero's.
113 # Example:
114 # "data": {
115 # "/xyz/openbmc_project/inventory/system/chassis/motherboard": {
116 # "BuildDate": "",
117 # "Manufacturer": "0000000000000000",
118 # "Model": "",
119 # "PartNumber": "0000000",
120 # "Present": 0,
121 # "PrettyName": "SYSTEM PLANAR ",
122 # "SerialNumber": "000000000000"
123 # }
124 ${properties}= Get Inventory system/chassis/motherboard
125 Should Not Be Equal As Strings
George Keishingc8166ed2017-02-24 03:53:38 -0600126 ... ${properties["data"]["PartNumber"]} 0000000
127 ... msg=motherboard part number invalid.
128 Should Not Be Equal As Strings
129 ... ${properties["data"]["SerialNumber"]} 000000000000
130 ... msg=motherboard serial number invalid.
Chris Austenb29d2e82016-06-07 12:25:35 -0500131
George Keishingae355302017-03-13 04:34:58 -0500132Verify CPU Present
133 [Documentation] Check if the FRU "Present" is set for CPU's.
134 [Tags] Verify_CPU_Present
135 # System inventory cpu list:
136 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
137 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
138 # Example:
139 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": {
140 # "FieldReplaceable": 1,
141 # "BuildDate": "",
142 # "Cached": 0,
143 # "SerialNumber": "YA3933741574",
144 # "Version": "10",
145 # "Model": "",
146 # "PrettyName": "PROCESSOR MODULE",
147 # "PartNumber": "01HL322",
148 # "Present": 1,
149 # "Manufacturer": "IBM"
150 # },
151 # The CPU properties "Present" should be boolean 1.
152
153 ${cpu_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system cpu
154 :FOR ${cpu_uri} IN @{cpu_list}
155 \ ${present}= Read Attribute ${cpu_uri} Present
156 \ Should Be True ${present}
157
158
159Verify DIMM Present
160 [Documentation] Check if the FRU "Present" is set for DIMM's.
161 [Tags] Verify_DIMM_Present
162 # Example:
163 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
164 # "FieldReplaceable": 1,
165 # "BuildDate": "",
166 # "Cached": 0,
167 # "SerialNumber": "0x0300cf4f",
168 # "Version": "0x00",
169 # "Model": "M393A1G40EB1-CRC ",
170 # "PrettyName": "0x0c",
171 # "PartNumber": "",
172 # "Present": 1,
173 # "Manufacturer": "0xce80"
174 # },
175
176 # The DIMM properties "Present" should be boolean 1.
177
178 ${dimm_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system dimm
179 :FOR ${dimm_uri} IN @{dimm_list}
180 \ ${present}= Read Attribute ${dimm_uri} Present
181 \ Should Be True ${present}
182
183
George Keishingefa97352017-03-13 07:13:03 -0500184Verify FRU Properties
185 [Documentation] Verify the FRU properties fields.
186 [Tags] Verify_FRU_Properties
187 # Example:
188 # A FRU would have "FieldReplaceable" set to boolean 1 and should have
189 # the following entries
190 # "fru": [
191 # "FieldReplaceable"
192 # "BuildDate",
193 # "Cached"
194 # "SerialNumber",
195 # "Version",
196 # "Model",
197 # "PrettyName",
198 # "PartNumber",
199 # "Present",
200 # "Manufacturer",
201 # ]
202 # and FRU which doesn't have one of this fields is an error.
203 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
204 # "FieldReplaceable": 1,
205 # "BuildDate": "",
206 # "Cached": 0,
207 # "SerialNumber": "0x0300cf4f",
208 # "Version": "0x00",
209 # "Model": "M393A1G40EB1-CRC ",
210 # "PrettyName": "0x0c",
211 # "PartNumber": "",
212 # "Present": 1,
213 # "Manufacturer": "0xce80"
214 # },
215
216 ${system_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system *
217 ${fru_list}= Qualified FRU List @{system_list}
George Keishingda0aa882017-12-05 06:44:03 -0600218 Validate FRU Properties Fields fru @{fru_list}
219
220
221Verify GPU Properties
222 [Documentation] Verify the GPU properties fields.
223 [Tags] Verify_GPU_Properties
224 # Example:
225 # A GPU property should have the following entries:
226 # "gpu":[
George Keishing0219da62018-03-26 03:24:40 -0500227 # "FieldReplaceable",
George Keishingda0aa882017-12-05 06:44:03 -0600228 # "PrettyName",
229 # "Present",
230 # "Functional"
231 # ]
232 # GPU inventory:
233 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card2": {
George Keishing0219da62018-03-26 03:24:40 -0500234 # "FieldReplaceable": 1,
George Keishingda0aa882017-12-05 06:44:03 -0600235 # "Functional": 1,
236 # "Present": 1,
237 # "PrettyName": ""
238 # },
239
240
241 ${system_list}= Get Endpoint Paths
242 ... ${HOST_INVENTORY_URI}system/chassis/motherboard gv*
243 Validate FRU Properties Fields gpu @{system_list}
244
245
246Verify Core Properties
247 [Documentation] Verify the core property fields.
248 [Tags] Verify_Core_Properties
249 # Example:
250 # A core property should have the following entries:
251 # "core":[
252 # "PrettyName",
253 # "Present",
254 # "Functional"
255 # ]
256 # core inventory:
257 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core0": {
258 # "Functional": 1,
259 # "Present": 1,
260 # "PrettyName": ""
261 # },
262
263 ${system_list}= Get Endpoint Paths
264 ... ${HOST_INVENTORY_URI}system/chassis/motherboard core*
265 Validate FRU Properties Fields core @{system_list}
266
George Keishingefa97352017-03-13 07:13:03 -0500267
George Keishingca8c61b2017-12-11 11:48:00 -0600268Verify Fan Properties
269 [Documentation] Verify the fan property fields.
270 [Tags] Verify_Fan_Properties
271 # Example:
272 # A fan property should have the following entries:
273 # "core":[
274 # "PrettyName",
275 # "Present",
276 # "MeetsMinimumShipLevel",
277 # "Functional"
278 # ]
279 # fan inventory:
280 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": {
281 # "Functional": 1,
282 # "MeetsMinimumShipLevel": 1,
283 # "Present": 1,
284 # "PrettyName": "fan0"
285 # },
286
287 ${system_list}= Get Endpoint Paths
288 ... ${HOST_INVENTORY_URI}system/chassis/motherboard fan*
289 Validate FRU Properties Fields fan @{system_list}
290
George Keishing071d8da2017-03-24 09:13:16 -0500291
292Verify Core Functional State
293 [Documentation] Verify that "Present" core property is set if "Functional"
294 ... core property is set.
295 [Tags] Verify_Core_Functional_State
296 # Example:
297 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core5":{
298 # "Functional": 1,
299 # "Present": 1,
300 # "PrettyName": ""
301 # },
302 ${core_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system core
303 :FOR ${core_uri} IN @{core_list}
304 \ ${status}= Run Keyword And Return Status
305 ... Check URL Property If Functional ${core_uri}
George Keishingc5658392017-04-27 23:05:18 -0500306 \ Continue For Loop If '${status}' == '${False}'
George Keishing071d8da2017-03-24 09:13:16 -0500307 \ ${present}= Read Attribute ${core_uri} Present
308 \ Should Be True ${present}
309 ... msg=${core_uri} is functional but not present.
310
311
312Verify DIMM Functional State
313 [Documentation] Verify that "Present" DIMM property is set if "Functional"
314 ... DIMM property is set.
315 [Tags] Verify_DIMM_Functional_State
316 # Example:
317 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
318 # "BuildDate": "",
319 # "Cached": 0,
320 # "FieldReplaceable": 1,
321 # "Functional": 1,
322 # "Manufacturer": "0xce80",
323 # "Model": "M393A1G40EB1-CRC ",
324 # "PartNumber": "",
325 # "Present": 1,
326 # "PrettyName": "0x0c",
327 # "SerialNumber": "0x0300cf4f",
328 # "Version": "0x00"
329 # },
330
331 ${dimm_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system dimm
332 :FOR ${dimm_uri} IN @{dimm_list}
333 \ ${status}= Run Keyword And Return Status
334 ... Check URL Property If Functional ${dimm_uri}
George Keishingc5658392017-04-27 23:05:18 -0500335 \ Continue For Loop If '${status}' == '${False}'
George Keishing071d8da2017-03-24 09:13:16 -0500336 \ ${present}= Read Attribute ${dimm_uri} Present
337 \ Should Be True ${present}
338 ... msg=${dimm_uri} is functional but not present.
339
George Keishing3c205b12017-05-13 04:09:33 -0500340
341Verify Fan Functional State
342 [Documentation] Verify that "Present" fan property is set if "Functional"
343 ... fan property is set.
344 [Tags] Verify_Fan_Functional_State
345 # Example:
346 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": {
347 # "Functional": 1,
348 # "Present": 1,
349 # "PrettyName": "fan0"
350 # },
351
352 ${fan_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system fan*
353 Should Not Be Empty ${fan_list}
354 :FOR ${fan_uri} IN @{fan_list}
355 \ ${status}= Run Keyword And Return Status
356 ... Check URL Property If Functional ${fan_uri}
357 \ Continue For Loop If '${status}' == '${False}'
358 \ ${present}= Read Attribute ${fan_uri} Present
359 \ Should Be True ${present}
360 ... msg=${fan_uri} is functional but "Present" is not set.
361
Sweta Potthuri56631f52017-11-10 02:19:38 -0600362Verify CPU Functional State
363 [Documentation] Verify that "Present" CPU property is set if "Functional"
364 ... CPU property is set.
365 [Tags] Verify_CPU_Functional_State
366
367 # Example of cpu* endpoint data:
368 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": {
369 # "Functional": 1,
370 # "Present": 1,
371 # "PrettyName": "cpu0"
372 # },
373
374 ${cpu_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system cpu*
375 Should Not Be Empty ${cpu_list}
376 :FOR ${cpu_uri} IN @{cpu_list}
377 \ ${status}= Run Keyword And Return Status
378 ... Check URL Property If Functional ${cpu_uri}
379 \ Continue For Loop If '${status}' == '${False}'
380 \ ${present}= Read Attribute ${cpu_uri} Present
381 \ Should Be True ${present}
382 ... msg=${cpu_uri} is functional but "Present" is not set.
George Keishing3c205b12017-05-13 04:09:33 -0500383
George Keishing53a75f72017-11-17 12:50:30 -0600384
385Verify GPU Functional State
386 [Documentation] Verify that "Functional" GPU property is set if "Present"
387 ... GPU property is set
388 [Tags] Verify_GPU_Functional_State
389
390 # Example of gv* endpoint data:
391 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4": {
392 # "Functional": 1,
393 # "Present": 1,
394 # "PrettyName": ""
395 # },
396
397
George Keishingc7b161b2017-12-01 09:58:12 -0600398 ${gpu_list}= Get Endpoint Paths
399 ... ${HOST_INVENTORY_URI}system/chassis/motherboard gv*
George Keishing53a75f72017-11-17 12:50:30 -0600400 Should Not Be Empty ${gpu_list}
401 :FOR ${gpu_uri} IN @{gpu_list}
402 \ ${status}= Run Keyword And Return Status
403 ... Check URL Property If Functional ${gpu_uri}
404 \ Continue For Loop If '${status}' == '${False}'
405 \ ${present}= Read Attribute ${gpu_uri} Present
406 \ Should Be True ${present}
407 ... msg=${gpu_uri} is functional but "Present" is not set.
408
409
George Keishing04c6b2c2017-06-15 12:33:59 -0500410Check Air Or Water Cooled
411 [Documentation] Check if this system is Air or water cooled.
412 [Tags] Check_Air_Or_Water_Cooled
413 # Example:
414 # "/xyz/openbmc_project/inventory/system/chassis": {
415 # "AirCooled": 1,
416 # "WaterCooled": 0
417 # },
418
419 ${air_cooled}= Read Attribute
420 ... /xyz/openbmc_project/inventory/system/chassis AirCooled
421 Log AirCooled:${air_cooled}
422
423 ${water_cooled}= Read Attribute
424 ... /xyz/openbmc_project/inventory/system/chassis WaterCooled
425 Log WaterCooled:${water_cooled}
426
427 Run Keyword If ${air_cooled}==${0} and ${water_cooled}==${0}
428 ... Fail Neither AirCooled or WaterCooled.
429
Sweta Potthuri1a640de2017-07-18 11:09:59 -0500430Verify Minimal CPU Inventory
431 [Documentation] Verify minimal CPU inventory.
432 [Tags] Verify_Minimal_CPU_Inventory
433
434 # item minimum_count
435 cpu 1
436 [Template] Minimum Inventory
437
438Verify Minimal DIMM Inventory
439 [Documentation] Verify minimal DIMM inventory.
440 [Tags] Verify_Minimal_DIMM_Inventory
441
442 # item minimum_count
443 dimm 2
444 [Template] Minimum Inventory
445
446Verify Minimal Core Inventory
447 [Documentation] Verify minimal core inventory.
448 [Tags] Verify_Minimal_Core_Inventory
449
450 # item minimum_count
451 core 1
452 [Template] Minimum Inventory
453
454Verify Minimal Memory Buffer Inventory
455 [Documentation] Verify minimal memory buffer inventory.
456 [Tags] Verify_Minimal_Memory_Buffer_Inventory
457
458 # item minimum_count
459 memory_buffer 1
460 [Template] Minimum Inventory
461
462Verify Minimal Fan Inventory
463 [Documentation] Verify minimal fan inventory.
464 [Tags] Verify_Minimal_Fan_Inventory
465
466 # item minimum_count
467 fan 2
468 [Template] Minimum Inventory
469
470Verify Minimal Main Planar Inventory
471 [Documentation] Verify minimal main planar inventory.
472 [Tags] Verify_Minimal_Main_Planar_Inventory
473
474 # item minimum_count
475 main_planar 1
476 [Template] Minimum Inventory
477
478Verify Minimal System Inventory
479 [Documentation] Verify minimal system inventory.
480 [Tags] Verify_Minimal_System_Inventory
481
482 # item minimum_count
483 system 1
484 [Template] Minimum Inventory
George Keishing04c6b2c2017-06-15 12:33:59 -0500485
George Keishing03ebc292017-08-02 01:22:02 -0500486Verify Minimal Power Supply Inventory
487 [Documentation] Verify minimal power supply inventory.
488 [Tags] Verify_Minimal_Power_Supply_Inventory
489 # Example:
Matt Spinler6a1e5ed2018-02-14 09:05:07 -0600490 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0",
491 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1",
George Keishing03ebc292017-08-02 01:22:02 -0500492
493 # item minimum_count
George Keishing1b71f222017-11-23 14:02:49 -0600494 powersupply 1
George Keishing03ebc292017-08-02 01:22:02 -0500495 [Template] Minimum Inventory
496
George Keishingfafbfdb2017-08-30 23:51:23 -0500497
498Verify Inventory List After Reboot
499 [Documentation] Verify inventory list after reboot.
500 [Tags] Verify_Inventory_List_After_Reboot
501
502 Repeat Keyword ${LOOP_COUNT} times Choose Boot Option reboot
503
504
505Verify Inventory List After Reset
506 [Documentation] Verify inventory list after reset.
507 [Tags] Verify_Inventory_List_After_Reset
508
509 Repeat Keyword ${LOOP_COUNT} times Choose Boot Option reset
510
Chris Austenb29d2e82016-06-07 12:25:35 -0500511*** Keywords ***
512
George Keishingda0aa882017-12-05 06:44:03 -0600513Suite Setup Execution
George Keishingc8166ed2017-02-24 03:53:38 -0600514 [Documentation] Do the initial suite setup.
George Keishing25577a22017-07-12 05:18:46 -0500515
George Keishing4f5260b2017-12-14 12:28:31 -0600516 Smart Power Off
517 REST Power On
George Keishingcaac9f32017-03-09 02:14:27 -0600518
George Keishingc8166ed2017-02-24 03:53:38 -0600519Get Inventory
520 [Documentation] Get the properties of an endpoint.
521 [Arguments] ${endpoint}
522 # Description of arguments:
523 # endpoint string for which url path ending.
524 # Example: "system" is the endpoint for url
525 # /xyz/openbmc_project/inventory/system
526 ${resp}= OpenBMC Get Request ${HOST_INVENTORY_URI}${endpoint}
527 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
528 ${jsondata}= To JSON ${resp.content}
529 [Return] ${jsondata}
George Keishingefa97352017-03-13 07:13:03 -0500530
531
532Qualified FRU List
533 [Documentation] Build the list of valid FRUs.
534 [Arguments] @{system_list}
535 # Description of arguments:
536 # system_list List of system inventory URLs.
537 # Example:
538 # /xyz/openbmc_project/inventory/system/chassis/motherboard
539 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
540 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
541 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
542 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1
543 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2
544 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm3
545 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm4
546 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm5
547 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm6
548 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm7
549
550 ${fru_list}= Create List
551 :FOR ${fru_uri} IN @{system_list}
George Keishingdf5ab122017-04-17 04:01:11 -0500552 \ ${resp}= OpenBMC Get Request ${fru_uri}/attr/FieldReplaceable
George Keishingda0aa882017-12-05 06:44:03 -0600553 ... quiet=${1}
George Keishingdf5ab122017-04-17 04:01:11 -0500554 \ ${jsondata}= To JSON ${resp.content}
555 \ ${status}= Run Keyword And Return Status
556 ... Should Be True ${jsondata['data']} == ${1}
George Keishingefa97352017-03-13 07:13:03 -0500557 \ Run Keyword If '${status}' == '${True}'
558 ... Append To List ${fru_list} ${fru_uri}
559
George Keishing8c9efed2018-02-28 10:45:26 -0600560 ${fru_valid_list}= Filter GPU FRU Entries ${fru_list}
561
562 [Return] ${fru_valid_list}
563
564
565Filter GPU FRU Entries
566 [Documentation] Remove GPU entries from FRU list and return the result.
567 [Arguments] ${fru_list}
568
569 # Description of arguments:
570 # fru_list List of FRU system inventory URIs.
571 # Example FRUs list:
572 # [u'/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0',
573 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1',
574 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0',
575 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1',
576 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card0',
577 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card1',
578 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card3',
579 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4']
580
581 # Example of the matched GPU FRUs entries:
582 # [u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card0',
583 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card1',
584 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card3',
585 # u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4']
586
587 ${gpu_matches}= Get Matches ${fru_list} *gv*
588
589 Remove Values From List ${fru_list} @{gpu_matches}
George Keishingefa97352017-03-13 07:13:03 -0500590 [Return] ${fru_list}
591
592
593Validate FRU Properties Fields
594 [Documentation] Compare valid FRUs from system vs expected FRU set.
George Keishingda0aa882017-12-05 06:44:03 -0600595 [Arguments] ${fru_type} @{fru_list}
596
George Keishingefa97352017-03-13 07:13:03 -0500597 # Description of arguments:
George Keishingda0aa882017-12-05 06:44:03 -0600598 # fru_type FRU type name (e.g. "gpu", "fru", "fan", etc.).
George Keishingefa97352017-03-13 07:13:03 -0500599 # fru_list List of qualified FRU URLs.
600
601 # Build the pre-defined set list from data/inventory.py derived from
602 # a group of YAML files.
603 # Example:
604 # set(['Version', 'PartNumber', 'SerialNumber', 'FieldReplaceable',
605 # 'BuildDate', 'Present', 'Manufacturer', 'PrettyName', 'Cached', 'Model'])
George Keishingda0aa882017-12-05 06:44:03 -0600606 ${fru_set}= List To Set ${inventory_dict['${fru_type}']}
George Keishingefa97352017-03-13 07:13:03 -0500607
608 # Iterate through the FRU's url and compare the set dictionary keys
609 # with the pre-define inventory data.
610 :FOR ${fru_url_path} IN @{fru_list}
611 \ ${fru_field}= Read Properties ${fru_url_path}
612 # ------------------------------------------------------------
613 # ${fru_field.viewkeys()} extracts the list of keys from the
614 # JSON dictionary as a set.
615 # ------------------------------------------------------------
616 \ Should Be Equal ${fru_field.viewkeys()} ${fru_set}
617
George Keishing071d8da2017-03-24 09:13:16 -0500618
619Check URL Property If Functional
620 [Arguments] ${url_path}
621 # Description of arguments:
622 # url_path Full url path of the inventory object.
623 # Example: DIMM / core property url's
624 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
625 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0
626 ${state}= Read Attribute ${url_path} Functional
627 Should Be True ${state}
Sweta Potthuri654cbc02017-06-15 10:10:55 -0500628
George Keishingfafbfdb2017-08-30 23:51:23 -0500629Choose Boot Option
630 [Documentation] Choose BMC reset or host reboot.
631 [Arguments] ${option}
Sweta Potthuri654cbc02017-06-15 10:10:55 -0500632
George Keishingfafbfdb2017-08-30 23:51:23 -0500633 Run Keyword If '${option}' == 'reboot'
634 ... Verify Inventory List Before And After Reboot
635 ... ELSE
636 ... Verify Inventory List Before And After Reset
637
638
639Verify Inventory List Before And After Reboot
640 [Documentation] Verify inventory list before and after reboot.
641
George Keishingda0aa882017-12-05 06:44:03 -0600642 REST Power On stack_mode=skip quiet=1
George Keishingfafbfdb2017-08-30 23:51:23 -0500643 Delete Error Logs
644 ${inventory_before}= Get URL List ${HOST_INVENTORY_URI}
Sweta Potthuri654cbc02017-06-15 10:10:55 -0500645 Initiate Host Reboot
George Keishingf0680ee2017-08-19 15:22:53 -0500646 Wait Until Keyword Succeeds 10 min 10 sec Is OS Booted
George Keishingfafbfdb2017-08-30 23:51:23 -0500647 Delete Error Logs
648 ${inventory_after}= Get URL List ${HOST_INVENTORY_URI}
649 Lists Should Be Equal ${inventory_before} ${inventory_after}
650
651
652Verify Inventory List Before And After Reset
653 [Documentation] Verify inventory list before and after BMC reset.
654
George Keishingda0aa882017-12-05 06:44:03 -0600655 REST Power On stack_mode=skip quiet=1
George Keishingfafbfdb2017-08-30 23:51:23 -0500656 Delete Error Logs
657 ${inventory_before}= Get URL List ${HOST_INVENTORY_URI}
658 OBMC Reboot (run)
659 Delete Error Logs
660 ${inventory_after}= Get URL List ${HOST_INVENTORY_URI}
661 Lists Should Be Equal ${inventory_before} ${inventory_after}
662
Sweta Potthuri1a640de2017-07-18 11:09:59 -0500663
664Minimum Inventory
665 [Documentation] Check for minimum inventory.
666 [Arguments] ${item} ${minimum_count}
667
668 # Description of argument(s):
669 # item Inventory name (example: "fan/cpu/dimm/etc").
670 # minimum_count The minimum number of the given item.
671
672 ${count}= Get Number Hardware Items ${item}
673 Should Be True ${count}>=${minimum_count}
674
675Get Number Hardware Items
676 [Documentation] Get the count of the total present currently on inventory.
677 [Arguments] ${item}
678
679 # Description of argument(s):
680 # item Inventory name (example: "fan/cpu/dimm/etc").
681
682 ${count_inventory} Set Variable ${0}
683 ${list}= Get Endpoint Paths ${HOST_INVENTORY_URI}/system/
684 ... ${item}
685
686 : FOR ${element} IN @{list}
687 \ ${present}= Read Properties ${element}
688 \ ${count_inventory}= Set Variable if ${present['Present']} == 1
689 \ ... ${count_inventory+1} ${count_inventory}
690 [return] ${count_inventory}