*** Settings ***
Documentation      Utility keywords for FFDC

Library            String
Library            DateTime
Library            openbmc_ffdc_list.py
Resource           resource.txt
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.
    ...                 TEST_NAME, TEST_MESSAGE,SUITE_SOURCE,TEST_DOCUMENTATION
    ...                 are auto variables and are populated dynamically by the
    ...                 robot framework during execution
    ...                 1. Writes opening statement headers msg
    ...                 2. Add Test setup and config information
    ...                 3. Types of data collection

    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}

    Write Data To File    ${MSG_DETAIL}


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}