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

Library            String
Library            DateTime
Library            openbmc_ffdc_list.py
Resource           resource.txt
Resource           connection_client.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}_ffdc_report.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}
    Write Data to File   
    ...   SYSTEM TYPE \t: ${OPENBMC_MODEL.replace('./data/','').replace('.py','')}${\n}${\n}
