| *** Settings *** | 
 |  | 
 | Documentation       Test dump functionality of OpenBMC. | 
 |  | 
 | Resource            ../../lib/openbmc_ffdc.robot | 
 | Resource            ../../lib/rest_client.robot | 
 | Resource            ../../lib/dump_utils.robot | 
 | Resource            ../../lib/boot_utils.robot | 
 | Resource            ../../lib/utils.robot | 
 | Resource            ../../lib/state_manager.robot | 
 | Library             ../../lib/bmc_ssh_utils.py | 
 |  | 
 | Suite Setup         Suite Setup Execution | 
 | Test Setup          Open Connection And Log In | 
 | Test Teardown       Test Teardown Execution | 
 |  | 
 | *** Test Cases *** | 
 |  | 
 | Pre Dump BMC Performance Test | 
 |     [Documentation]  Check performance of memory, CPU & file system of BMC. | 
 |     [Tags]  Pre_Dump_BMC_Performance_Test | 
 |  | 
 |     Open Connection And Log In | 
 |     Check BMC Performance | 
 |  | 
 |  | 
 | Verify User Initiated BMC Dump When Powered Off | 
 |     [Documentation]  Create user initiated BMC dump at host off state and | 
 |     ...  verify dump entry for it. | 
 |     [Tags]  Verify_User_Initiated_BMC_Dump_When_Powered_Off | 
 |  | 
 |     Redfish Power Off  stack_mode=skip | 
 |     ${dump_id}=  Create User Initiated Dump | 
 |     Check Existence Of BMC Dump File  ${dump_id} | 
 |  | 
 |  | 
 | Verify Dump Persistency On Service Restart | 
 |     [Documentation]  Create user dump, restart BMC service and verify dump | 
 |     ...  persistency. | 
 |     [Tags]  Verify_Dump_Persistency_On_Service_Restart | 
 |  | 
 |     Delete All BMC Dump | 
 |     ${dump_id}=  Create User Initiated Dump | 
 |     BMC Execute Command | 
 |     ...  systemctl restart xyz.openbmc_project.Dump.Manager.service | 
 |     Sleep  10s  reason=Wait for BMC dump service to restart properly. | 
 |  | 
 |     ${resp}=  OpenBMC Get Request  ${DUMP_ENTRY_URI}list | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
 |     Check Existence Of BMC Dump File  ${dump_id} | 
 |  | 
 |  | 
 | Verify Dump Persistency On Reset | 
 |     [Documentation]  Create user dump, reset BMC and verify dump persistency. | 
 |     [Tags]  Verify_Dump_Persistency_On_Reset | 
 |  | 
 |     Delete All BMC Dump | 
 |     ${dump_id}=  Create User Initiated Dump | 
 |     OBMC Reboot (off) | 
 |     ${resp}=  OpenBMC Get Request  ${DUMP_ENTRY_URI}list | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
 |     Check Existence Of BMC Dump File  ${dump_id} | 
 |  | 
 |  | 
 | Delete User Initiated BMC Dump And Verify | 
 |     [Documentation]  Delete user initiated dump and verify. | 
 |     [Tags]  Delete_User_Initiated_Dump_And_Verify | 
 |  | 
 |     ${dump_id}=  Create User Initiated Dump | 
 |     Check Existence Of BMC Dump File  ${dump_id} | 
 |  | 
 |     Delete BMC Dump  ${dump_id} | 
 |  | 
 |  | 
 | Verify User Initiated Dump Size | 
 |     [Documentation]  Verify user Initiated BMC dump size is under 200k. | 
 |     [Tags]  Verify_User_Initiated_Dump_Size | 
 |  | 
 |     ${dump_id}=  Create User Initiated Dump | 
 |  | 
 |     ${dump_size}=  Read Attribute  ${DUMP_ENTRY_URI}${dump_id}  Size | 
 |     # Max size for dump is 200k = 200x1024 | 
 |     Should Be True  0 < ${dump_size} < 204800 | 
 |     Check Existence Of BMC Dump File  ${dump_id} | 
 |  | 
 |  | 
 | Create Two User Initiated Dump And Delete One | 
 |     [Documentation]  Create two dumps and delete the first. | 
 |     [Tags]  Create_Two_User_Initiated_Dump_And_Delete_One | 
 |  | 
 |     ${dump_id_1}=  Create User Initiated Dump | 
 |     ${dump_id_2}=  Create User Initiated Dump | 
 |  | 
 |     Delete BMC Dump  ${dump_id_1} | 
 |  | 
 |     ${resp}=  OpenBMC Get Request  ${DUMP_ENTRY_URI}${dump_id_1} | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND} | 
 |  | 
 |     ${resp}=  OpenBMC Get Request  ${DUMP_ENTRY_URI}${dump_id_2} | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
 |     Check Existence Of BMC Dump File  ${dump_id_2} | 
 |  | 
 |  | 
 | Create And Delete BMC Dump Multiple Times | 
 |     [Documentation]  Create and delete BMC dump multiple times. | 
 |     [Tags]  Create_And_Delete_BMC_Dump_Multiple_Times | 
 |  | 
 |     FOR  ${INDEX}  IN  1  5 | 
 |       ${dump_id}=  Create User Initiated Dump | 
 |       Delete BMC Dump  ${dump_id} | 
 |     END | 
 |  | 
 |  | 
 | Delete All BMC Dumps And Verify | 
 |     [Documentation]  Delete all BMC dumps and verify. | 
 |     [Tags]  Delete_All_BMC_Dumps_And_Verify | 
 |  | 
 |     # Create some dump. | 
 |     Create User Initiated Dump | 
 |     Create User Initiated Dump | 
 |  | 
 |     Delete All BMC Dump | 
 |     ${resp}=  OpenBMC Get Request  ${DUMP_ENTRY_URI}list | 
 |     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND} | 
 |  | 
 |  | 
 | Verify User Initiated BMC Dump When Host Booted | 
 |     [Documentation]  Create user initiated BMC dump at host booted state and | 
 |     ...  verify dump entry for it. | 
 |     [Tags]  Verify_User_Initiated_BMC_Dump_When_Host_Booted | 
 |  | 
 |     Redfish Power On  stack_mode=skip | 
 |     Create User Initiated Dump | 
 |  | 
 |  | 
 | Verify Core Dump Size | 
 |     [Documentation]  Verify BMC core dump size is under 200k. | 
 |     [Tags]  Verify_Core_Dump_Size | 
 |  | 
 |     Delete All Dumps | 
 |     Trigger Core Dump | 
 |     Wait Until Keyword Succeeds  2 min  10 sec  Get Dump Entries | 
 |  | 
 |     ${dump_entries}=  Get URL List  ${DUMP_ENTRY_URI} | 
 |     ${dump_size}=  Read Attribute  ${dump_entries[0]}  Size | 
 |  | 
 |     # Max size for dump is 200k = 200x1024 | 
 |     Should Be True  0 < ${dump_size} < 204800  msg=Size of dump is incorrect. | 
 |  | 
 |  | 
 | Dump Out Of Space Test | 
 |     [Documentation]  Verify out of dump space is reported when attempt | 
 |     ...  to create too many dumps. | 
 |     [Tags]  Dump_Out_Of_Space_Test | 
 |     [Setup]  Delete All BMC Dump | 
 |  | 
 |     # Systems typically hold 8-14 dumps before running out of dump space. | 
 |     # Attempt to create too_many_dumps.  Expect to run out of space | 
 |     # before this. | 
 |     ${too_many_dumps}  Set Variable  ${20} | 
 |  | 
 |     # Loop, creating a dump each iteration.  Will either get dump_id or | 
 |     # will get EMPTY when out of dump space. | 
 |     FOR  ${n}  IN RANGE  0  ${too_many_dumps} | 
 |       ${dump_id}=  Create User Initiated Dump  check_out_of_space=${True} | 
 |       Exit For Loop If  '${dump_id}' == '${EMPTY}' | 
 |       Check Existence Of BMC Dump File  ${dump_id} | 
 |     END | 
 |  | 
 |     Run Keyword If  '${dump_id}' != '${EMPTY}'  Fail | 
 |     ...  msg=Did not run out of dump space as expected. | 
 |  | 
 |  | 
 | Post Dump BMC Performance Test | 
 |     [Documentation]  Check performance of memory, CPU & file system of BMC. | 
 |     [Tags]  Post_Dump_BMC_Performance_Test | 
 |  | 
 |     Open Connection And Log In | 
 |     Check BMC Performance | 
 |  | 
 |  | 
 | Post Dump Core Dump Check | 
 |     [Documentation]  Check core dump existence on BMC after code update. | 
 |     [Tags]  Post_Dump_Core_Dump_Check | 
 |  | 
 |     Check For Core Dumps | 
 |  | 
 |  | 
 | Verify Dump After Host Watchdog Error Injection | 
 |     [Documentation]  Inject host watchdog error and verify whether dump is generated. | 
 |     [Tags]  Verify_Dump_After_Host_Watchdog_Error_Injection | 
 |  | 
 |     Redfish Power On | 
 |  | 
 |     Run Keyword And Ignore Error  Delete All Dumps | 
 |  | 
 |     # Enable auto reboot | 
 |     Set Auto Reboot  ${1} | 
 |  | 
 |     Trigger Host Watchdog Error  2000  30 | 
 |  | 
 |     Wait Until Keyword Succeeds  300 sec  20 sec  Is Host Rebooted | 
 |  | 
 |     #Get dump details | 
 |     @{dump_entry_list}=  Read Properties  ${DUMP_ENTRY_URI} | 
 |  | 
 |     # Verifying that there is only one dump | 
 |     ${length}=  Get length  ${dump_entry_list} | 
 |     Should Be Equal As Integers  ${length}  ${1} | 
 |  | 
 |     # Get dump id | 
 |     ${value}=  Get From List  ${dump_entry_list}  0 | 
 |     @{split_value}=  Split String  ${value}  / | 
 |     ${dump_id}=  Get From List  ${split_value}  -1 | 
 |  | 
 |     # Max size for dump is 200k = 200x1024 | 
 |     ${dump_size}=  Read Attribute  ${DUMP_ENTRY_URI}${dump_id}  Size | 
 |     Should Be True  0 < ${dump_size} < 204800 | 
 |  | 
 |  | 
 | Verify Download BMC Dump | 
 |     [Documentation]  Verify that a BMC dump can be downloaded to the local machine. | 
 |     [Tags]  Verify_Download_BMC_Dump | 
 |  | 
 |     ${dump_id}=  Create User Initiated Dump | 
 |     ${dump_dict}=  Get Dump Dict | 
 |     ${bmc_dump_name}=  Fetch From Right  ${dump_dict['${dump_id}']}  / | 
 |     ${bmc_dump_checksum}  ${stderr}  ${rc}=  BMC Execute Command | 
 |     ...  md5sum ${dump_dict['${dump_id}']}|awk '{print$1}' | 
 |     ${bmc_dump_size}  ${stderr}  ${rc}=  BMC Execute Command | 
 |     ...  stat -c "%s" ${dump_dict['${dump_id}']} | 
 |  | 
 |     ${response}=  OpenBMC Get Request  ${DUMP_DOWNLOAD_URI}${dump_id} | 
 |     ...  quiet=${1} | 
 |     Should Be Equal As Strings  ${response.status_code}  ${HTTP_OK} | 
 |     Create Binary File  ${EXECDIR}${/}dumps   ${response.content} | 
 |     Run  tar -xvf ${EXECDIR}${/}dumps | 
 |     ${download_dump_name}=  Fetch From Left  ${bmc_dump_name}  . | 
 |     ${download_dump_checksum}=  Run  md5sum ${EXECDIR}/dumps|awk '{print$1}' | 
 |     ${download_dump_size}=  Run  stat -c "%s" ${EXECDIR}${/}dumps | 
 |  | 
 |     OperatingSystem.Directory Should Exist  ${EXECDIR}/${download_dump_name} | 
 |     ...  msg=Created dump name and downloaded dump name don't match. | 
 |     Should Be Equal As Strings  ${bmc_dump_checksum}  ${download_dump_checksum} | 
 |     Should Be Equal As Strings  ${bmc_dump_size}  ${download_dump_size} | 
 |  | 
 |     Run  rm -rf ${EXECDIR}${/}${download_dump_name};rm ${EXECDIR}${/}dumps | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 | Suite Setup Execution | 
 |     [Documentation]  Do initial suite setup tasks. | 
 |  | 
 |     ${resp}=  OpenBMC Get Request  ${DUMP_URI} | 
 |     Run Keyword If  '${resp.status_code}' == '${HTTP_NOT_FOUND}' | 
 |     ...  Run Keywords  Set Suite Variable  ${DUMP_URI}  /xyz/openbmc_project/dump/  AND | 
 |     ...  Set Suite Variable  ${DUMP_ENTRY_URI}  /xyz/openbmc_project/dump/entry/ | 
 |  | 
 |  | 
 | Test Teardown Execution | 
 |     [Documentation]  Do the post test teardown. | 
 |  | 
 |     Wait Until Keyword Succeeds  3 min  15 sec  Verify No Dump In Progress | 
 |     FFDC On Test Case Fail | 
 |     Delete All BMC Dump | 
 |     Close All Connections |