1*** Settings ***
2Documentation      Utility keywords for FFDC
3
4Library            String
5Library            DateTime
6Library            openbmc_ffdc_list.py
7Resource           resource.robot
8Resource           connection_client.robot
9Resource           utils.robot
10
11*** Variables ***
12
13${PRINT_LINE}      ------------------------------------------------------------------------
14
15${MSG_INTRO}       This report contains the following information:
16${MSG_DETAIL}      ${\n}\t\t[ Detailed Logs Captured Section ]
17${HEADER_MSG}      ${\n}\t\t---------------------------
18...                ${\n}\t\t FIRST FAILURE DATA CAPTURE
19...                ${\n}\t\t---------------------------
20${FOOTER_MSG}      ${\n}${PRINT_LINE} ${\n}
21
22${FFDC_LOG_PATH}   ${EXECDIR}${/}logs${/}
23${TEST_HISTORY}    ${FFDC_LOG_PATH}${/}test_history.txt
24
25*** Keywords ***
26
27Get Test Dir and Name
28    [Documentation]    SUITE_NAME and TEST_NAME are automatic variables
29    ...                and is populated dynamically by the robot framework
30    ...                during execution
31    ${suite_name}=     Get strip string   ${SUITE_NAME}
32    ${suite_name}=     Catenate  SEPARATOR=    ${FFDC_TIME}_   ${suite_name}
33    ${test_name}=      Get strip string   ${TEST_NAME}
34    ${test_name}=   Catenate  SEPARATOR=  ${FFDC_TIME}_   ${test_name}
35    [Return]  ${suite_name}   ${test_name}
36
37
38Create FFDC Directory
39    [Documentation]    Creates directory and report file
40    Create Directory   ${FFDC_DIR_PATH}
41    Create FFDC Report File
42
43
44Create FFDC Report File
45    [Documentation]     Create a generic file name for ffdc
46    Set Suite Variable
47    ...  ${FFDC_FILE_PATH}   ${FFDC_DIR_PATH}${/}${FFDC_TIME}_BMC_general.txt
48    Create File         ${FFDC_FILE_PATH}
49
50
51Write Data To File
52    [Documentation]     Write data to the ffdc report document
53    [Arguments]         ${data}=      ${filepath}=${FFDC_FILE_PATH}
54    Append To File      ${filepath}   ${data}
55
56
57Get Current Time Stamp
58    [Documentation]     Get the current time stamp data
59    ${cur_time}=    Get Current Date   result_format=%Y-%m-%d %H:%M:%S:%f
60    ${cur_time}=    Get strip string   ${cur_time}
61    [Return]   ${cur_time}
62
63
64Header Message
65    [Documentation]     Write header message to the report document manifest
66    ...                 and return a list of generated files.
67    ...                 TEST_NAME, TEST_MESSAGE,SUITE_SOURCE, TEST_DOCUMENTATION
68    ...                 are auto variables and are populated dynamically by the
69    ...                 robot framework during execution.
70    ...                 1. Write opening statement headers message.
71    ...                 2. Add test setup and config information.
72    ...                 3. Print types of data collection.
73
74
75    ${ffdc_file_list}=  Create List  ${FFDC_FILE_PATH}
76    Return From Keyword If  '${TEST_MODE}'  ${ffdc_file_list}
77
78    ${TEST_NAME}=  Get Variable Value  ${TEST_NAME}
79    ${TEST_MESSAGE}=  Get Variable Value  ${TEST_MESSAGE}
80    ${TEST_DOCUMENTATION}=  Get Variable Value  ${TEST_DOCUMENTATION}
81    Write Data To File  ${HEADER_MSG}
82    Write Data To File  ${FOOTER_MSG}
83    Write Data To File  Test Suite File\t\t: ${SUITE_NAME} ${\n}
84    Write Data To File  Test Case Name\t\t: ${TEST_NAME}${\n}
85    Write Data To File  Test Source File\t: ${SUITE_SOURCE}${\n}
86    Write Data To File  Failure Time Stamp\t: ${FFDC_TIME}${\n}
87    Write Data To File  Test Error Message\t: ${TEST_MESSAGE}${\n}
88    Write Data To File  Test Documentation\t:${\n}${TEST_DOCUMENTATION}${\n}
89    Write Data To File  ${FOOTER_MSG}
90
91    Test Setup Info
92
93    Write Data To File  ${\n}${MSG_INTRO}${\n}
94
95    # --- FFDC header notes ---
96    @{entries}=  Get ffdc cmd index
97    :FOR  ${index}  IN  @{entries}
98    \   Write Data To File  * ${index.upper()}
99    \   Write Data To File  ${\n}
100
101    Write Data To File  ${MSG_DETAIL}
102    [Return]  ${ffdc_file_list}
103
104
105Write Cmd Output to FFDC File
106    [Documentation]      Write cmd output data to the report document
107    [Arguments]          ${name_str}   ${cmd}
108
109    Write Data To File   ${FOOTER_MSG}
110    Write Data To File   ${ENTRY_INDEX.upper()} : ${name_str}\t
111    Write Data To File   Executed : ${cmd}
112    Write Data To File   ${FOOTER_MSG}
113
114
115Test Setup Info
116    [Documentation]      BMC IP, Model and other information
117
118    Write Data To File  ${\n}-----------------------${\n}
119    Write Data To File  Test Setup Information:
120    Write Data To File  ${\n}-----------------------${\n}
121    Write Data To File  OPENBMC HOST \t: ${OPENBMC_HOST}${\n}
122    ${model_name}=  Get BMC System Model
123    Write Data To File  SYSTEM TYPE \t: ${model_name}
124
125
126Error Logs Should Not Exist
127    [Documentation]  Verify that error logs do not exist.
128
129    ${resp}=  OpenBMC Get Request  ${BMC_LOGGING_ENTRY}list  quiet=${1}
130    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
131    ...  msg=Unexpected BMC error log(s) present.
132
133
134Error Logs Should Exist
135    [Documentation]  Verify that error logs exist.
136
137    ${resp}=  OpenBMC Get Request  ${BMC_LOGGING_ENTRY}list  quiet=${1}
138    Run Keyword If  ${resp.status_code} != ${HTTP_OK}  Fail
139    ...  msg=Expected BMC error log(s) are not present.
140