|  | *** Settings *** | 
|  | Documentation      Utility keywords for FFDC | 
|  |  | 
|  | Library            String | 
|  | Library            DateTime | 
|  | Library            openbmc_ffdc_list.py | 
|  | Resource           resource.robot | 
|  | Resource           connection_client.robot | 
|  | Resource           utils.robot | 
|  |  | 
|  | *** Variables *** | 
|  |  | 
|  | ${PRINT_LINE}      ------------------------------------------------------------------------ | 
|  |  | 
|  | ${MSG_INTRO}       This report contains the following information: | 
|  | ${MSG_DETAIL}      ${\n}\t\t[ Detailed Logs Captured Section ] | 
|  | ${HEADER_MSG}      ${\n}\t\t--------------------------- | 
|  | ...                ${\n}\t\t FIRST FAILURE DATA CAPTURE | 
|  | ...                ${\n}\t\t--------------------------- | 
|  | ${FOOTER_MSG}      ${\n}${PRINT_LINE} ${\n} | 
|  |  | 
|  | ${FFDC_LOG_PATH}   ${EXECDIR}${/}logs${/} | 
|  | ${TEST_HISTORY}    ${FFDC_LOG_PATH}${/}test_history.txt | 
|  |  | 
|  | *** Keywords *** | 
|  |  | 
|  | Get Test Dir and Name | 
|  | [Documentation]    SUITE_NAME and TEST_NAME are automatic variables | 
|  | ...                and is populated dynamically by the robot framework | 
|  | ...                during execution | 
|  | ${suite_name}=     Get strip string   ${SUITE_NAME} | 
|  | ${suite_name}=     Catenate  SEPARATOR=    ${FFDC_TIME}_   ${suite_name} | 
|  | ${test_name}=      Get strip string   ${TEST_NAME} | 
|  | ${test_name}=   Catenate  SEPARATOR=  ${FFDC_TIME}_   ${test_name} | 
|  | RETURN  ${suite_name}   ${test_name} | 
|  |  | 
|  |  | 
|  | Create FFDC Directory | 
|  | [Documentation]    Creates directory and report file | 
|  | Create Directory   ${FFDC_DIR_PATH} | 
|  | Create FFDC Report File | 
|  |  | 
|  |  | 
|  | Create FFDC Report File | 
|  | [Documentation]     Create a generic file name for ffdc | 
|  | Set Suite Variable | 
|  | ...  ${FFDC_FILE_PATH}   ${FFDC_DIR_PATH}${/}${FFDC_TIME}_BMC_general.txt | 
|  | Create File         ${FFDC_FILE_PATH} | 
|  |  | 
|  |  | 
|  | Write Data To File | 
|  | [Documentation]     Write data to the ffdc report document | 
|  | [Arguments]         ${data}=      ${filepath}=${FFDC_FILE_PATH} | 
|  | Append To File      ${filepath}   ${data} | 
|  |  | 
|  |  | 
|  | Get Current Time Stamp | 
|  | [Documentation]     Get the current time stamp data | 
|  | ${cur_time}=    Get Current Date   result_format=%Y-%m-%d %H:%M:%S:%f | 
|  | ${cur_time}=    Get strip string   ${cur_time} | 
|  | RETURN  ${cur_time} | 
|  |  | 
|  |  | 
|  | Header Message | 
|  | [Documentation]     Write header message to the report document manifest | 
|  | ...                 and return a list of generated files. | 
|  | ...                 TEST_NAME, TEST_MESSAGE,SUITE_SOURCE, TEST_DOCUMENTATION | 
|  | ...                 are auto variables and are populated dynamically by the | 
|  | ...                 robot framework during execution. | 
|  | ...                 1. Write opening statement headers message. | 
|  | ...                 2. Add test setup and config information. | 
|  | ...                 3. Print types of data collection. | 
|  |  | 
|  |  | 
|  | ${ffdc_file_list}=  Create List  ${FFDC_FILE_PATH} | 
|  | Return From Keyword If  '${TEST_MODE}'  ${ffdc_file_list} | 
|  |  | 
|  | ${TEST_NAME}=  Get Variable Value  ${TEST_NAME} | 
|  | ${TEST_MESSAGE}=  Get Variable Value  ${TEST_MESSAGE} | 
|  | ${TEST_DOCUMENTATION}=  Get Variable Value  ${TEST_DOCUMENTATION} | 
|  | Write Data To File  ${HEADER_MSG} | 
|  | Write Data To File  ${FOOTER_MSG} | 
|  | Write Data To File  Test Suite File\t\t: ${SUITE_NAME} ${\n} | 
|  | Write Data To File  Test Case Name\t\t: ${TEST_NAME}${\n} | 
|  | Write Data To File  Test Source File\t: ${SUITE_SOURCE}${\n} | 
|  | Write Data To File  Failure Time Stamp\t: ${FFDC_TIME}${\n} | 
|  | Write Data To File  Test Error Message\t: ${TEST_MESSAGE}${\n} | 
|  | Write Data To File  Test Documentation\t:${\n}${TEST_DOCUMENTATION}${\n} | 
|  | Write Data To File  ${FOOTER_MSG} | 
|  |  | 
|  | Test Setup Info | 
|  |  | 
|  | Write Data To File  ${\n}${MSG_INTRO}${\n} | 
|  |  | 
|  | # --- FFDC header notes --- | 
|  | @{entries}=  Get ffdc cmd index | 
|  | FOR  ${index}  IN  @{entries} | 
|  | Write Data To File  * ${index.upper()} | 
|  | Write Data To File  ${\n} | 
|  | END | 
|  |  | 
|  | Write Data To File  ${MSG_DETAIL} | 
|  | RETURN  ${ffdc_file_list} | 
|  |  | 
|  |  | 
|  | Write Cmd Output to FFDC File | 
|  | [Documentation]      Write cmd output data to the report document | 
|  | [Arguments]          ${name_str}   ${cmd} | 
|  |  | 
|  | Write Data To File   ${FOOTER_MSG} | 
|  | Write Data To File   ${ENTRY_INDEX.upper()} : ${name_str}\t | 
|  | Write Data To File   Executed : ${cmd} | 
|  | Write Data To File   ${FOOTER_MSG} | 
|  |  | 
|  |  | 
|  | Test Setup Info | 
|  | [Documentation]      BMC IP, Model and other information | 
|  |  | 
|  | Write Data To File  ${\n}-----------------------${\n} | 
|  | Write Data To File  Test Setup Information: | 
|  | Write Data To File  ${\n}-----------------------${\n} | 
|  | Write Data To File  OPENBMC HOST \t: ${OPENBMC_HOST}${\n} | 
|  | ${model_name}=  Get BMC System Model | 
|  | Write Data To File  SYSTEM TYPE \t: ${model_name} | 
|  |  | 
|  |  | 
|  | Error Logs Should Not Exist | 
|  | [Documentation]  Verify that error logs do not exist. | 
|  |  | 
|  | ${resp}=  OpenBMC Get Request  ${BMC_LOGGING_ENTRY}list  quiet=${1} | 
|  | Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND} | 
|  | ...  msg=Unexpected BMC error log(s) present. | 
|  |  | 
|  |  | 
|  | Error Logs Should Exist | 
|  | [Documentation]  Verify that error logs exist. | 
|  |  | 
|  | ${resp}=  OpenBMC Get Request  ${BMC_LOGGING_ENTRY}list  quiet=${1} | 
|  | Run Keyword If  ${resp.status_code} != ${HTTP_OK}  Fail | 
|  | ...  msg=Expected BMC error log(s) are not present. |