1*** Settings ***
2
3Documentation       Test BMC dump functionality of OpenBMC.
4
5Resource            ../../lib/bmc_redfish_resource.robot
6Resource            ../../lib/boot_utils.robot
7Resource            ../../lib/dump_utils.robot
8Resource            ../../lib/openbmc_ffdc.robot
9Variables           ../../data/pel_variables.py
10
11Suite Setup         Redfish.Login
12Test Setup          Redfish Delete All BMC Dumps
13Test Teardown       Test Teardown Execution
14
15Force Tags          BMC_Dumps
16
17*** Variables ***
18
19# Total size of the dump in kilo bytes
20${BMC_DUMP_TOTAL_SIZE}       ${1024}
21
22# Minimum space required for one bmc dump in kilo bytes
23${BMC_DUMP_MIN_SPACE_REQD}   ${20}
24${MAX_DUMP_COUNT}            ${20}
25${BMC_DUMP_COLLECTOR_PATH}   /var/lib/phosphor-debug-collector/dumps
26
27*** Test Cases ***
28
29Verify Error Response For Already Deleted Dump Id
30    [Documentation]  Delete non existing BMC dump and expect an error.
31    [Tags]  Verify_Error_Response_For_Already_Deleted_Dump_Id
32
33    Redfish Power Off  stack_mode=skip
34    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
35    Wait Until Keyword Succeeds  15 sec  5 sec  Redfish Delete BMC Dump  ${dump_id}
36    Run Keyword And Expect Error  ValueError: *  Redfish Delete BMC Dump  ${dump_id}
37
38
39Verify User Initiated BMC Dump When Host Powered Off
40    [Documentation]  Create user initiated BMC dump at host off state and
41    ...  verify dump entry for it.
42    [Tags]  Verify_User_Initiated_BMC_Dump_When_Host_Powered_Off
43
44    Redfish Power Off  stack_mode=skip
45    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
46    ${dump_entries}=  Get BMC Dump Entries
47    Length Should Be  ${dump_entries}  1
48    List Should Contain Value  ${dump_entries}  ${dump_id}
49
50
51Verify User Initiated BMC Dump Size
52    [Documentation]  Verify user initiated BMC dump size is under 20 MB.
53    [Tags]  Verify_User_Initiated_BMC_Dump_Size
54
55    Redfish Power Off  stack_mode=skip
56    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
57    ${resp}=  Redfish.Get Properties  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/${dump_id}
58
59    # Example of response from above Redfish GET request.
60    # "@odata.type": "#LogEntry.v1_7_0.LogEntry",
61    # "AdditionalDataSizeBytes": 31644,
62    # "AdditionalDataURI": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/attachment/9",
63    # "Created": "2020-10-23T06:32:53+00:00",
64    # "DiagnosticDataType": "Manager",
65    # "EntryType": "Event",
66    # "Id": "9",
67    # "Name": "BMC Dump Entry"
68
69    # Max size for dump is 20 MB = 20x1024x1024 Byte.
70    Should Be True  0 < ${resp["AdditionalDataSizeBytes"]} < 20971520
71
72
73Verify Internal Failure Initiated BMC Dump Size
74    [Documentation]  Verify that the internal failure initiated BMC dump size is under 20 MB.
75    [Tags]  Verify_Internal_Failure_Initiated_BMC_Dump_Size
76
77    Redfish Power Off  stack_mode=skip
78    Redfish Delete All BMC Dumps
79
80    # Create an internal failure error log.
81    BMC Execute Command  ${CMD_INTERNAL_FAILURE}
82
83    # Wait for BMC dump to get generated after injecting internal failure.
84    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Dump Available
85
86    # Verify that only one BMC dump is generated after injecting error.
87    ${dump_entries}=  Get BMC Dump Entries
88    ${length}=  Get length  ${dump_entries}
89    Should Be Equal As Integers  ${length}  ${1}
90
91    # Max size for dump is 20 MB = 20x1024x1024 Byte.
92    ${resp}=  Redfish.Get Properties
93    ...  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/${dump_entries[0]}
94    Should Be True  0 < ${resp["AdditionalDataSizeBytes"]} < 20971520
95
96
97Verify Multiple BMC Dump Creation
98    [Documentation]  Verify that multiple BMC dumps can be created one after
99    ...  another successfully.
100    [Tags]   Verify_Multiple_BMC_Dump_Creation
101
102    Redfish Power Off  stack_mode=skip
103    ${dump_count}=  Evaluate  random.randint(5, 10)  modules=random
104    FOR  ${INDEX}  IN  1  ${dump_count}
105      Create User Initiated BMC Dump Via Redfish
106    END
107
108
109Verify BMC Dump Default Location In BMC
110     [Documentation]  Verify that BMC dump is created in its default location of BMC.
111     [Tags]  Verify_BMC_Dump_Default_Location_In_BMC
112
113     Redfish Power Off  stack_mode=skip
114     Redfish Delete All BMC Dumps
115     ${dump_id}=  Create User Initiated BMC Dump Via Redfish
116     ${dump_file}  ${stderr}  ${rc}=  BMC Execute Command
117     ...  ls ${BMC_DUMP_COLLECTOR_PATH}/${dump_id}
118     Should Be True  ${rc} == 0
119     Should Contain Any  ${dump_file}  BMCDUMP  obmcdump
120
121
122Verify User Initiated BMC Dump When Host Booted
123    [Documentation]  Create user initiated BMC dump at host booted state and
124    ...  verify dump entry for it.
125    [Tags]  Verify_User_Initiated_BMC_Dump_When_Host_Booted
126
127    Redfish Power On  stack_mode=skip
128    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
129    ${dump_entries}=  Get BMC Dump Entries
130    Length Should Be  ${dump_entries}  1
131    List Should Contain Value  ${dump_entries}  ${dump_id}
132
133
134Verify User Initiated BMC Dump At Host Booting
135    [Documentation]  Create and verify user initiated BMC dump during Host is powwering on
136    ...  or when host booting is in progress.
137    [Tags]  Verify_User_Initiated_BMC_Dump_At_Host_Booting
138
139    Redfish Power Off  stack_mode=skip
140    Redfish Delete All BMC Dumps
141
142    # Initiate power on.
143    Redfish Power Operation  On
144    Wait Until Keyword Succeeds  2 min  5 sec  Is Boot Progress Changed
145
146    # Create user initiated BMC dump and verify only one dump is available.
147    Create User Initiated BMC Dump Via Redfish
148    ${dump_entries}=  Get BMC Dump Entries
149    Length Should Be  ${dump_entries}  1
150
151
152Verify Dump Persistency On Dump Service Restart
153    [Documentation]  Create user dump, restart dump manager service and verify dump
154    ...  persistency.
155    [Tags]  Verify_Dump_Persistency_On_Dump_Service_Restart
156
157    Redfish Power Off  stack_mode=skip
158    Create User Initiated BMC Dump Via Redfish
159    ${dump_entries_before}=  redfish_utils.get_member_list  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
160
161    # Restart dump service.
162    BMC Execute Command  systemctl restart xyz.openbmc_project.Dump.Manager.service
163    Sleep  10s  reason=Wait for BMC dump service to restart properly
164
165    ${dump_entries_after}=  redfish_utils.get_member_list  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
166    Lists Should Be Equal  ${dump_entries_before}  ${dump_entries_after}
167
168
169Verify Dump Persistency On BMC Reset
170    [Documentation]  Create user dump, reset BMC and verify dump persistency.
171    [Tags]  Verify_Dump_Persistency_On_BMC_Reset
172
173    # Power off host so that dump is not offloaded to host OS.
174    Redfish Power Off  stack_mode=skip
175
176    Create User Initiated BMC Dump Via Redfish
177    ${dump_entries_before}=  redfish_utils.get_member_list  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
178
179    # Reset BMC.
180    OBMC Reboot (off)  stack_mode=skip
181
182    ${dump_entries_after}=  redfish_utils.get_member_list  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
183    Lists Should Be Equal  ${dump_entries_before}  ${dump_entries_after}
184
185
186Delete User Initiated BMC Dump And Verify
187    [Documentation]  Delete user initiated BMC dump and verify.
188    [Tags]  Delete_User_Initiated_BMC_Dump_And_Verify
189
190    Redfish Power Off  stack_mode=skip
191    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
192    Wait Until Keyword Succeeds  15 sec  5 sec  Redfish Delete BMC Dump  ${dump_id}
193
194    ${dump_entries}=  Get BMC Dump Entries
195    Should Be Empty  ${dump_entries}
196
197
198Delete All User Initiated BMC Dumps And Verify
199    [Documentation]  Delete all user initiated BMC dumps and verify.
200    [Tags]  Delete_All_User_Initiated_BMC_Dumps_And_Verify
201
202    # Power off host so that dump is not offloaded to host OS.
203    Redfish Power Off  stack_mode=skip
204
205    # Create some BMC dump.
206    Create User Initiated BMC Dump Via Redfish
207    Create User Initiated BMC Dump Via Redfish
208
209    Redfish Delete All BMC Dumps
210    ${dump_entries}=  Get BMC Dump Entries
211    Should Be Empty  ${dump_entries}
212
213
214Create Two User Initiated BMC Dumps
215    [Documentation]  Create two user initiated BMC dumps.
216    [Tags]  Create_Two_User_Initiated_BMC_Dumps
217
218    Redfish Power Off  stack_mode=skip
219    ${dump_id1}=  Create User Initiated BMC Dump Via Redfish
220    ${dump_id2}=  Create User Initiated BMC Dump Via Redfish
221
222    ${dump_entries}=  Get BMC Dump Entries
223    Length Should Be  ${dump_entries}  2
224    Should Contain  ${dump_entries}  ${dump_id1}
225    Should Contain  ${dump_entries}  ${dump_id2}
226
227
228Create Two User Initiated BMC Dumps And Delete One
229    [Documentation]  Create two dumps and delete the first.
230    [Tags]  Create_Two_User_Initiated_BMC_Dumps_And_Delete_One
231
232    Redfish Power Off  stack_mode=skip
233    ${dump_id1}=  Create User Initiated BMC Dump Via Redfish
234    ${dump_id2}=  Create User Initiated BMC Dump Via Redfish
235
236    Wait Until Keyword Succeeds  15 sec  5 sec  Redfish Delete BMC Dump  ${dump_id1}
237
238    ${dump_entries}=  Get BMC Dump Entries
239    Length Should Be  ${dump_entries}  1
240    List Should Contain Value  ${dump_entries}  ${dump_id2}
241
242
243Create And Delete User Initiated BMC Dump Multiple Times
244    [Documentation]  Create and delete user initiated BMC dump multiple times.
245    [Tags]  Create_And_Delete_User_Initiated_BMC_Dump_Multiple_Times
246
247    Redfish Power Off  stack_mode=skip
248    FOR  ${INDEX}  IN  1  10
249      ${dump_id}=  Create User Initiated BMC Dump Via Redfish
250      Wait Until Keyword Succeeds  15 sec  5 sec  Redfish Delete BMC Dump  ${dump_id}
251    END
252
253
254Verify Maximum BMC Dump Creation
255    [Documentation]  Create maximum BMC dump and verify error when dump runs out of space.
256    [Tags]  Verify_Maximum_BMC_Dump_Creation
257    [Teardown]  Redfish Delete All BMC Dumps
258
259    # Maximum allowed space for dump is 1024 KB. BMC typically hold 8-14 dumps
260    # before running out of this dump space. So trying to create dumps in 20
261    # iterations to run out of space.
262    # User can key in the Maximum allowed space for bmc dump and how many iteration.
263    FOR  ${n}  IN RANGE  0  ${MAX_DUMP_COUNT}
264      Create User Initiated BMC Dump Via Redfish
265      ${dump_space}=  Get Disk Usage For Dumps
266      Exit For Loop If  ${dump_space} >= (${BMC_DUMP_TOTAL_SIZE} - ${BMC_DUMP_MIN_SPACE_REQD})
267    END
268
269    # Check error while creating dump when dump size is full.
270    ${payload}=  Create Dictionary  DiagnosticDataType=Manager
271    Redfish.Post  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData
272    ...  body=${payload}  valid_status_codes=[${HTTP_INTERNAL_SERVER_ERROR}]
273
274
275Verify BMC Core Dump When Host Powered Off
276    [Documentation]  Verify BMC core dump after application crash at host powered off state.
277    [Tags]  Verify_BMC_Core_Dump_When_Host_Powered_Off
278
279    Redfish Power Off  stack_mode=skip
280
281    # Ensure all dumps are cleaned out.
282    Redfish Delete All BMC Dumps
283    Trigger Core Dump
284
285    # Verify that BMC dump is available.
286    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Dump Available
287
288
289Verify Core Dump Size
290    [Documentation]  Verify BMC core dump size is under 20 MB.
291    [Tags]  Verify_Core_Dump_Size
292
293    Redfish Power Off  stack_mode=skip
294
295    # Ensure all dumps are cleaned out.
296    Redfish Delete All BMC Dumps
297    Trigger Core Dump
298
299    # Verify that BMC dump is available.
300    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Dump Available
301    ${dump_entries}=  Get BMC Dump Entries
302    ${resp}=  Redfish.Get Properties
303    ...  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/${dump_entries[0]}
304
305    # Max size for dump is 20 MB = 20x1024x1024 Byte.
306    Should Be True  0 < ${resp["AdditionalDataSizeBytes"]} < 20971520
307
308
309Verify Error While Initiating BMC Dump During Dumping State
310    [Documentation]  Verify error while initiating BMC dump during dumping state.
311    [Tags]  Verify_Error_While_Initiating_BMC_Dump_During_Dumping_State
312
313    Redfish Power Off  stack_mode=skip
314    ${task_id}=  Create User Initiated BMC Dump Via Redfish  ${1}
315
316    # Check error while initiating BMC dump while dump in progress.
317    ${payload}=  Create Dictionary  DiagnosticDataType=Manager
318    Redfish.Post
319    ...  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData
320    ...  body=${payload}  valid_status_codes=[${HTTP_SERVICE_UNAVAILABLE}]
321
322    # Wait for above initiated dump to complete. Otherwise, on going dump would impact next test.
323    Wait Until Keyword Succeeds  5 min  15 sec  Check Task Completion  ${task_id}
324
325
326Verify BMC Dump Create Errors While Another BMC Dump In Progress
327    [Documentation]  Verify BMC dump creation error until older BMC dump completion.
328    [Tags]  Verify_BMC_Dump_Create_Errors_While_Another_BMC_Dump_In_Progress
329
330    Redfish Power Off  stack_mode=skip
331
332    # Initiate a BMC dump that returns without completion.
333    ${task_id}=  Create User Initiated BMC Dump Via Redfish  ${1}
334    ${task_dict}=  Redfish.Get Properties  /redfish/v1/TaskService/Tasks/${task_id}
335    ${payload}=  Create Dictionary  DiagnosticDataType=Manager
336    IF  '${task_dict['TaskState']}' != 'Completed'
337        ${resp}=  Redfish.Post
338        ...  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData
339        ...  body=${payload}  valid_status_codes=[${HTTP_SERVICE_UNAVAILABLE}]
340    END
341
342    # Wait for above initiated dump to complete. Otherwise, on going dump would impact next test.
343    Wait Until Keyword Succeeds  5 min  15 sec  Check Task Completion  ${task_id}
344
345
346Verify Core Dump After Terminating Dump Manager Service
347    [Documentation]  Verify initiate core dumps and kill Phosphor-dump-manager.
348    [Tags]  Verify_Core_Dump_After_Terminating_Dump_Manager_Service
349
350    Redfish Power Off  stack_mode=skip
351
352    # Remove all available dumps in BMC.
353    Redfish Delete All BMC Dumps
354
355    # Find the pid of the phosphor-dump-manage process and kill it.
356    ${cmd_buf}=  Catenate  kill -s SEGV $(pgrep phosphor-dump-manager)
357    ${cmd_output}  ${stderr}  ${rc}=  BMC Execute Command  ${cmd_buf}
358    Should Be Equal As Integers  ${rc}  ${0}
359
360    # Verify that BMC dump is available.
361    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Dump Available
362
363    # Verifying that there is only one dump.
364    ${dump_entries}=  Get BMC Dump Entries
365    ${length}=  Get length  ${dump_entries}
366    Should Be Equal As Integers  ${length}  ${1}
367
368
369Verify User Initiated BMC Dump Type
370    [Documentation]  Download user initiate BMC dump and validates its type.
371    [Tags]  Verify_User_Initiated_BMC_Dump_Type
372
373    Redfish Power Off  stack_mode=skip
374    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
375
376    # Download BMC dump and verify its size.
377    ${resp}=  Redfish.Get  /redfish/v1/Managers/bmc/LogServices/Dump/Entries/${dump_id}
378    ${redfish_dump_creation_timestamp}=  Set Variable  ${resp.dict["Created"]}
379    # Download BMC dump and verify its size.
380    ${tarfile}=  Download BMC Dump  ${dump_id}
381
382    # Extract dump and verify type of dump from summary.log content:
383    # Wed Aug 30 17:23:29 UTC 2023 Name:          BMCDUMP.XXXXXXX.0001005.20230830172329
384    # Wed Aug 30 17:23:29 UTC 2023 Epochtime:     1693416209
385    # Wed Aug 30 17:23:29 UTC 2023 ID:            0001005
386    # Wed Aug 30 17:23:29 UTC 2023 Type:          user
387    ${extracted_dump_folder}=  Extract BMC Dump  BMC_dump.tar.gz  ${redfish_dump_creation_timestamp}
388    ${contents}=  OperatingSystem.Get File  ${extracted_dump_folder}/summary.log
389    Should Match Regexp  ${contents}  Type:[ ]*user
390
391    # Clean extracted dump files.
392    Remove Files  output  output.zst
393    Remove Directory  ${extracted_dump_folder}  True
394
395
396Verify Retrieve Core Initiated BMC Dump
397    [Documentation]  Verify retrieval of core initiated BMC dump.
398    [Tags]  Verify_Retrieve_Core_Initiated_BMC_Dump
399
400    Redfish Power Off  stack_mode=skip
401
402    # Ensure all dumps are cleaned out.
403    Redfish Delete All BMC Dumps
404    Trigger Core Dump
405
406    # Verify that BMC dump is available.
407    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Dump Available
408
409    ${dump_entries}=  Get BMC Dump Entries
410    # Download BMC dump and verify its size.
411    Download BMC Dump  ${dump_entries[0]}
412
413
414Verify Retrieve User Initiated BMC Dump
415    [Documentation]  Verify retrieval of user initiated BMC dump.
416    [Tags]  Verify_Retrieve_User_Initiated_BMC_Dump
417
418    Redfish Power Off  stack_mode=skip
419    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
420
421    # Download BMC dump.
422    Download BMC Dump  ${dump_id}
423
424
425Verify Core Initiated BMC Dump Type
426    [Documentation]  Download core initiate BMC dump and validates its type.
427    [Tags]  Verify_Core_Initiated_BMC_Dump_Type
428
429    Redfish Power Off  stack_mode=skip
430
431    # Ensure all dumps are cleaned out.
432    Redfish Delete All BMC Dumps
433    Trigger Core Dump
434
435    # Verify that BMC dump is available.
436    Wait Until Keyword Succeeds  2 min  10 sec  Is BMC Dump Available
437
438    ${dump_entries}=  Get BMC Dump Entries
439
440    # Find the timestamp of BMC dump.
441    ${resp}=  Redfish.Get  /redfish/v1/Managers/bmc/LogServices/Dump/Entries/${dump_entries[0]}
442    ${redfish_dump_creation_timestamp}=  Set Variable  ${resp.dict["Created"]}
443
444    # Download BMC dump and verify its size.
445    ${tarfile}=  Download BMC Dump  ${dump_entries[0]}
446
447    # Extract dump and verify type of dump from summary.log content:
448    # Wed Aug 30 17:23:29 UTC 2023 Name:          BMCDUMP.XXXXXXX.0001005.20230830172329
449    # Wed Aug 30 17:23:29 UTC 2023 Epochtime:     1693416209
450    # Wed Aug 30 17:23:29 UTC 2023 ID:            0001005
451    # Wed Aug 30 17:23:29 UTC 2023 Type:          core
452
453    ${extracted_dump_folder}=  Extract BMC Dump  ${tarfile}  ${redfish_dump_creation_timestamp}
454    ${contents}=  OperatingSystem.Get File  ${extracted_dump_folder}/summary.log
455    Should Match Regexp  ${contents}  Type:[ ]*core
456
457    # Clean extracted dump files.
458    Remove Files  output  output.zst
459    Remove Directory  ${extracted_dump_folder}  True
460
461
462Verify Core Watchdog Initiated BMC Dump
463    [Documentation]  Verify core watchdog timeout initiated BMC dump.
464    [Tags]  Verify_Core_Watchdog_Initiated_BMC_Dump
465
466    Redfish Delete All BMC Dumps
467    Redfish Power Off  stack_mode=skip
468
469    # Trigger watchdog timeout.
470    Redfish Initiate Auto Reboot  2000
471
472    # Wait for BMC dump to get generated after injecting watchdog timeout.
473    Wait Until Keyword Succeeds  4 min  20 sec  Is BMC Dump Available
474
475    # Verify that only one BMC dump is available.
476    ${dump_entry_list}=  Get BMC Dump Entries
477    ${length}=  Get length  ${dump_entry_list}
478    Should Be Equal As Integers  ${length}  ${1}
479
480
481*** Keywords ***
482
483Download BMC Dump
484    [Documentation]  Download BMC dump and verify its size.
485    [Arguments]  ${dump_id}
486
487    # Description of argument(s):
488    # dump_id                An integer value that identifies a particular dump (e.g. 1, 3).
489
490    ${resp}=  Redfish.Get  /redfish/v1/Managers/bmc/LogServices/Dump/Entries/${dump_id}
491    ${redfish_bmc_dump_size}=  Set Variable  ${resp.dict["AdditionalDataSizeBytes"]}
492
493    Initialize OpenBMC
494    ${headers}=  Create Dictionary  Content-Type=application/octet-stream  X-Auth-Token=${XAUTH_TOKEN}
495
496    ${ret}=  GET On Session  openbmc  /redfish/v1/Managers/bmc/LogServices/Dump/Entries/${dump_id}/attachment  headers=${headers}
497
498    Should Be Equal As Numbers  ${ret.status_code}  200
499
500    Create Binary File  BMC_dump.tar.gz  ${ret.content}
501    ${downloaded_dump_size}=  Get File Size  BMC_dump.tar.gz
502    Should Be Equal  ${downloaded_dump_size}  ${redfish_bmc_dump_size}
503    [Return]  BMC_dump.tar.gz
504
505
506Extract BMC Dump
507    [Documentation]  Extract BMC dump from the tar file and returns the name of
508    ...  extracted folder like BMCDUMP.XXXXXXX.0000070.20230706063841.
509    [Arguments]  ${filename}   ${bmc_dump_timestamp}
510
511    # Description of argument(s):
512    # filename                name of BMC dump tar file.
513    # bmc_dump_timestamp      timestamp of generated BMC dump.
514
515    OperatingSystem.File Should Exist  ${filename}
516    ${rc}=  Run And Return RC  dd if=${filename} of=output.zst bs=1 skip=628
517    Should Be True  0 == ${rc}
518
519    ${rc}=  Run And Return RC  zstd -d output.zst
520    Should Be True  0 == ${rc}
521
522    ${rc}=  Run And Return RC  tar -xvf output
523    Should Be True  0 == ${rc}
524
525    # Find the extracted dump folder identified with BMCDUMP as prefix and
526    # timestamp of dump generation where timestamp format is : 2023-09-27T08:30:17.000000+00:00.
527    ${var}=  Fetch From Left  ${bmc_dump_timestamp}  .
528    ${var}=  Remove String  ${var}  -  T  :
529    ${bmc_extraction_folders}=  OperatingSystem.List Directories In Directory  .  BMCDUMP*${var}
530    ${cnt}=  Get length  ${bmc_extraction_folders}
531    should be equal as numbers  ${cnt}  1
532
533    [Return]  ${bmc_extraction_folders}[0]
534
535
536Get BMC Dump Entries
537    [Documentation]  Return BMC dump ids list.
538
539    ${dump_uris}=  redfish_utils.get_member_list  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
540    ${dump_ids}=  Create List
541
542    FOR  ${dump_uri}  IN  @{dump_uris}
543      ${dump_id}=  Fetch From Right  ${dump_uri}  /
544      Append To List  ${dump_ids}  ${dump_id}
545    END
546
547    [Return]  ${dump_ids}
548
549
550Is BMC Dump Available
551    [Documentation]  Verify if BMC dump is available.
552
553    ${dump_entries}=  Get BMC Dump Entries
554
555    # Verifying that BMC dump is available.
556    ${length}=  Get length  ${dump_entries}
557    Should Be True  0 < ${length}
558
559
560Get Disk Usage For Dumps
561    [Documentation]  Return disk usage in kilobyte for BMC dumps.
562
563    ${usage_output}  ${stderr}  ${rc}=  BMC Execute Command  du -s ${BMC_DUMP_COLLECTOR_PATH}
564
565    # Example of output from above BMC cli command.
566    # $ du -s /var/lib/phosphor-debug-collector/dumps
567    # 516    /var/lib/phosphor-debug-collector/dumps
568
569    ${usage_output}=  Fetch From Left  ${usage_output}  /
570    ${usage_output}=  Convert To Integer  ${usage_output}
571
572    [return]  ${usage_output}
573
574
575Test Teardown Execution
576    [Documentation]  Do test teardown operation.
577
578    FFDC On Test Case Fail
579    Close All Connections
580