1*** Settings *** 2Documentation Error logging utility keywords. 3 4Resource rest_client.robot 5Variables ../data/variables.py 6 7*** Keywords *** 8 9Get Logging Entry List 10 [Documentation] Get logging entry and return the object list. 11 12 ${entry_list}= Create List 13 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY}list quiet=${1} 14 Return From Keyword If ${resp.status_code} == ${HTTP_NOT_FOUND} 15 ${jsondata}= To JSON ${resp.content} 16 17 :FOR ${entry} IN @{jsondata["data"]} 18 \ Continue For Loop If '${entry.rsplit('/', 1)[1]}' == 'callout' 19 \ Append To List ${entry_list} ${entry} 20 21 # Logging entries list. 22 # ['/xyz/openbmc_project/logging/entry/14', 23 # '/xyz/openbmc_project/logging/entry/15'] 24 [Return] ${entry_list} 25 26 27Logging Entry Should Exist 28 [Documentation] Find the matching message id and return the entry id. 29 [Arguments] ${message_id} 30 31 # Description of argument(s): 32 # message_id Logging message string. 33 # Example: "xyz.openbmc_project.Common.Error.InternalFailure" 34 35 @{elog_entries}= Get Logging Entry List 36 37 :FOR ${entry} IN @{elog_entries} 38 \ ${resp}= Read Properties ${entry} 39 \ ${status}= Run Keyword And Return Status 40 ... Should Be Equal As Strings ${message_id} ${resp["Message"]} 41 \ Return From Keyword If ${status} == ${TRUE} ${entry} 42 43 Fail No ${message_id} logging entry found. 44 45 46Get Error Logs 47 [Documentation] Return a dictionary which contains the BMC error logs. 48 [Arguments] ${quiet}=1 49 50 # Description of argument(s): 51 # quiet Indicates whether this keyword should run without any output to 52 # the console, 0 = verbose, 1 = quiet. 53 54 # The length of the returned dictionary indicates how many logs there are. 55 # Printing of error logs can be done with the keyword Print Error Logs, 56 # for example, Print Error Logs ${error_logs} Message. 57 58 ${status} ${error_logs}= Run Keyword And Ignore Error Read Properties 59 ... /xyz/openbmc_project/logging/entry/enumerate 60 ... timeout=30 quiet=${quiet} 61 62 ${empty_dict}= Create Dictionary 63 Return From Keyword If '${status}' == 'FAIL' ${empty_dict} 64 [Return] ${error_logs} 65 66 67Get IPMI SEL Setting 68 [Documentation] Returns status for given IPMI SEL setting. 69 [Arguments] ${setting} 70 # Description of argument(s): 71 # setting SEL setting which needs to be read(e.g. "Last Add Time"). 72 73 ${resp}= Run IPMI Standard Command sel info 74 75 ${setting_line}= Get Lines Containing String ${resp} ${setting} 76 ... case-insensitive 77 ${setting_status}= Fetch From Right ${setting_line} :${SPACE} 78 79 [Return] ${setting_status} 80 81 82Verify Watchdog Errorlog Content 83 [Documentation] Verify watchdog errorlog content. 84 # Example: 85 # "/xyz/openbmc_project/logging/entry/1": 86 # { 87 # "AdditionalData": [], 88 # "Id": 1, 89 # "Message": "org.open_power.Host.Boot.Error.WatchdogTimedOut", 90 # "Resolved": 0, 91 # "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error", 92 # "Timestamp": 1492715244828, 93 # "associations": [] 94 # }, 95 96 ${elog_entry}= Get URL List ${BMC_LOGGING_ENTRY} 97 ${elog}= Read Properties ${elog_entry[0]} 98 Should Be Equal As Strings 99 ... ${elog["Message"]} org.open_power.Host.Boot.Error.WatchdogTimedOut 100 ... msg=Watchdog timeout error log was not found. 101 Should Be Equal As Strings 102 ... ${elog["Severity"]} xyz.openbmc_project.Logging.Entry.Level.Error 103 ... msg=Watchdog timeout severity unexpected value. 104 105 106Logging Test Binary Exist 107 [Documentation] Verify existence of prerequisite logging-test. 108 Open Connection And Log In 109 ${out} ${stderr}= Execute Command 110 ... which /tmp/tarball/bin/logging-test return_stderr=True 111 Should Be Empty ${stderr} msg=Logging Test stderr is non-empty. 112 Should Contain ${out} logging-test 113 ... msg=Logging test returned unexpected result. 114 115Clear Existing Error Logs 116 [Documentation] If error log isn't empty, reboot the BMC to clear the log. 117 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY}${1} 118 Return From Keyword If ${resp.status_code} == ${HTTP_NOT_FOUND} 119 Initiate BMC Reboot 120 Wait Until Keyword Succeeds 10 min 10 sec 121 ... Is BMC Ready 122 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY}${1} 123 Should Be Equal As Strings ${resp.status_code} ${HTTP_NOT_FOUND} 124 ... msg=Could not clear BMC error logs. 125 126Create Test Error Log 127 [Documentation] Generate test error log. 128 # Test error log entry example: 129 # "/xyz/openbmc_project/logging/entry/1": { 130 # "AdditionalData": [ 131 # "STRING=FOO" 132 # ], 133 # "Id": 1, 134 # "Message": "example.xyz.openbmc_project.Example.Elog.AutoTestSimple", 135 # "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error", 136 # "Timestamp": 1487743963328, 137 # "associations": [] 138 # } 139 BMC Execute Command /tmp/tarball/bin/logging-test -c AutoTestSimple 140 141Count Error Entries 142 [Documentation] Count Error entries. 143 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY} 144 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} 145 ... msg=Failed to get error logs. 146 ${jsondata}= To JSON ${resp.content} 147 ${count}= Get Length ${jsondata["data"]} 148 [Return] ${count} 149 150Verify Test Error Log 151 [Documentation] Verify test error log entries. 152 ${elog_entry}= Get URL List ${BMC_LOGGING_ENTRY} 153 ${entry_id}= Read Attribute ${elog_entry[0]} Message 154 Should Be Equal ${entry_id} 155 ... example.xyz.openbmc_project.Example.Elog.AutoTestSimple 156 ... msg=Error log not from AutoTestSimple. 157 ${entry_id}= Read Attribute ${elog_entry[0]} Severity 158 Should Be Equal ${entry_id} 159 ... xyz.openbmc_project.Logging.Entry.Level.Error 160 ... msg=Error log severity mismatch. 161 162Delete Error Logs And Verify 163 [Documentation] Delete all error logs and verify. 164 Delete All Error Logs 165 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY}list quiet=${1} 166 Should Be Equal As Strings ${resp.status_code} ${HTTP_NOT_FOUND} 167 ... msg=Error logs not deleted as expected. 168 169 170Install Tarball 171 [Documentation] Install tarball on BMC. 172 Should Not Be Empty ${DEBUG_TARBALL_PATH} 173 ... msg=Debug tarball path value is required. 174 BMC Execute Command rm -rf /tmp/tarball 175 Install Debug Tarball On BMC ${DEBUG_TARBALL_PATH} 176 177 178Get Event Logs 179 [Documentation] Get all available EventLog entries. 180 181 #{ 182 # "@odata.context": "/redfish/v1/$metadata#LogEntryCollection.LogEntryCollection", 183 # "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog/Entries", 184 # "@odata.type": "#LogEntryCollection.LogEntryCollection", 185 # "Description": "Collection of System Event Log Entries", 186 # "Members": [ 187 # { 188 # "@odata.context": "/redfish/v1/$metadata#LogEntry.LogEntry", 189 # "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog/Entries/1", 190 # "@odata.type": "#LogEntry.v1_4_0.LogEntry", 191 # "Created": "2019-05-29T13:19:27+00:00", 192 # "EntryType": "Event", 193 # "Id": "1", 194 # "Message": "org.open_power.Host.Error.Event", 195 # "Name": "System DBus Event Log Entry", 196 # "Severity": "Critical" 197 # } 198 # ], 199 # "Members@odata.count": 1, 200 # "Name": "System Event Log Entries" 201 #} 202 203 ${members}= Redfish.Get Attribute ${EVENT_LOG_URI}Entries Members 204 [Return] ${members} 205 206 207Get Event Logs Not Ok 208 [Documentation] Get all event logs where the 'Severity' is not 'OK'. 209 210 ${members}= Get Event Logs 211 ${severe_logs}= Evaluate [elog for elog in $members if elog['Severity'] != 'OK'] 212 [Return] ${severe_logs} 213 214 215Get Number Of Event Logs 216 [Documentation] Return the number of EventLog members. 217 218 ${members}= Get Event Logs 219 ${num_members}= Get Length ${members} 220 [Return] ${num_members} 221 222 223Redfish Purge Event Log 224 [Documentation] Do Redfish EventLog purge. 225 226 ${target_action}= redfish_utils.Get Target Actions 227 ... /redfish/v1/Systems/system/LogServices/EventLog/ LogService.ClearLog 228 Redfish.Post ${target_action} body={'target': '${target_action}'} 229 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] 230 231