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