1*** Settings *** 2Documentation Test suite to verify BIOS POST code log entries. 3 4Resource ../../../lib/resource.robot 5Resource ../../../lib/bmc_redfish_resource.robot 6Resource ../../../lib/openbmc_ffdc.robot 7Resource ../../../lib/logging_utils.robot 8 9Suite Setup Suite Setup Execution 10Test Setup Test Setup Execution 11Test Teardown Test Teardown Execution 12Suite Teardown Suite Teardown Execution 13 14 15*** Variables *** 16${max_view_count} 1000 17 18 19*** Test Cases *** 20 21Test PostCodes When Host Boots 22 [Documentation] Boot the system and verify PostCodes from host are logged. 23 [Tags] Test_PostCodes_When_Host_Boots 24 25 Redfish Power On 26 ${post_code_list}= Redfish Get PostCodes 27 Rprint Vars post_code_list 28 29 ${post_codes}= Redfish.Get Properties 30 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 31 Log To Console BIOS POST Codes count: ${post_codes['Members@odata.count']} 32 Should Be True ${post_codes['Members@odata.count']} >= 1 msg=No BIOS POST Codes populated. 33 34 35Test PostCodes When Host Reboot 36 [Documentation] Initiate Host reboot the system and verify PostCodes from host are logged. 37 [Tags] Test_PostCodes_When_Host_Reboot 38 39 # Boot to runtime and clear post codes. 40 Redfish Power On stack_mode=skip 41 Redfish Clear PostCodes 42 43 RF SYS GracefulRestart 44 ${post_code_list}= Redfish Get PostCodes 45 Rprint Vars post_code_list 46 47 ${post_codes}= Redfish.Get Properties 48 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 49 Log To Console BIOS POST Codes count: ${post_codes['Members@odata.count']} 50 Should Be True ${post_codes['Members@odata.count']} >= 1 msg=No BIOS POST Codes populated. 51 52 53Test PostCodes When Host Powered Off 54 [Documentation] Power off the system and verify PostCodes from host are logged. 55 [Tags] Test_PostCodes_When_Host_Powered_Off 56 57 # Boot to runtime and clear post codes. 58 Redfish Power On stack_mode=skip 59 Redfish Clear PostCodes 60 61 Redfish Power Off 62 ${post_code_list}= Redfish Get PostCodes 63 Rprint Vars post_code_list 64 65 ${post_codes}= Redfish.Get Properties 66 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 67 Log To Console BIOS POST Codes count: ${post_codes['Members@odata.count']} 68 Should Be True ${post_codes['Members@odata.count']} >= 1 msg=No BIOS POST Codes populated. 69 70 71Test PostCode Id Value Incremented On Host Reboot 72 [Documentation] Verify the value of ID in postcode entry is incremented 73 ... on host reboot. In the ID value 'B2-49', '2' represents 74 ... the boot cycle count of the host system. 75 [Tags] Test_PostCode_Id_Value_Incremented_On_Host_Reboot 76 [Setup] Populate PostCode Logs Incase No Prior Entries Available 77 78 # Get boot count of current postcode logs. 79 ${initial_boot_count}= Get Boot Count For Last PostCode Entry 80 ${expected_boot_count}= Evaluate ${initial_boot_count} + 1 81 82 # Perform host reboot and verify boot count incremented in ID value. 83 RF SYS GracefulRestart 84 ${current_boot_count}= Get Boot Count For Last PostCode Entry 85 Should Be True ${current_boot_count} == ${expected_boot_count} 86 87 88Test PostCode Log Perisistency After BMC Reboot 89 [Documentation] Verify the post code log entries persist after BMC reboot. 90 [Tags] Test_PostCode_Log_Perisistency_After_BMC_Reboot 91 [Setup] Populate PostCode Logs Incase No Prior Entries Available 92 93 Redfish Power On stack_mode=skip 94 95 # Get log count before BMC reboot. 96 ${post_codes}= Redfish.Get Properties 97 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 98 ${initial_log_count}= Set Variable ${post_codes['Members@odata.count']} 99 100 # Reboot BMC. 101 OBMC Reboot (run) 102 103 # Get log count after BMC reboot and compare with initial log count. 104 ${post_codes}= Redfish.Get Properties 105 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 106 ${current_log_count}= Set Variable ${post_codes['Members@odata.count']} 107 Should Be True ${current_log_count} == ${initial_log_count} 108 109 110Test Clear Post Code Log Action 111 [Documentation] Verify clear log action for post code entries. 112 [Tags] Test_Clear_Post_Code_Log_Action 113 [Setup] Populate PostCode Logs Incase No Prior Entries Available 114 115 # Perform clear postcode log action. 116 Redfish Clear PostCodes 117 ${post_codes}= Redfish.Get Properties 118 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 119 120 # Verify if log count becomes zero. 121 Should Be True ${post_codes['Members@odata.count']} == 0 122 ... msg=BIOS POST code logs not cleared. 123 124 125*** Keywords *** 126 127Test Setup Execution 128 [Documentation] Do test setup operation. 129 130 Redfish.Login 131 Redfish Clear PostCodes 132 133 134Test Teardown Execution 135 [Documentation] Do test teardown operation. 136 137 FFDC On Test Case Fail 138 139 140Suite Setup Execution 141 [Documentation] Do suite setup operation. 142 143 Redfish.Login 144 Redfish Power Off stack_mode=skip 145 146 Run Keyword And Ignore Error Redfish Delete All BMC Dumps 147 Run Keyword And Ignore Error Redfish Purge Event Log 148 Run Keyword And Ignore Error Delete All Redfish Sessions 149 150 151Suite Teardown Execution 152 [Documentation] Do suite teardown operation. 153 154 Run Keyword And Ignore Error Redfish Delete All BMC Dumps 155 Run Keyword And Ignore Error Redfish Purge Event Log 156 Run Keyword And Ignore Error Delete All Redfish Sessions 157 158 159Get Boot Count For Last PostCode Entry 160 [Documentation] Get the latest boot count from post code log entry. 161 ... log entry has ID "B2-1000", latest boot count "2" is returned. 162 163 # { 164 # "@odata.id": "/redfish/v1/Systems/system/LogServices/PostCodes/Entries", 165 # "@odata.type": "#LogEntryCollection.LogEntryCollection", 166 # "Description": "Collection of POST Code Log Entries", 167 # "Members": [ 168 # { 169 # "@odata.id": "/redfish/v1/Systems/system/LogServices/PostCodes/Entries/B1-1000", 170 # "@odata.type": "#LogEntry.v1_8_0.LogEntry", 171 # "Created": "1970-01-01T00:16:40+00:00", 172 # "EntryType": "Event", 173 # "Id": "B2-1000", 174 # "Message": "Boot Count: 2; Time Stamp Offset: 117.4928 seconds; POST Code: 0xac10", 175 # "MessageArgs": [ 176 # "2", 177 # "117.4928", 178 # "0xac10" 179 # ], 180 # "MessageId": "OpenBMC.0.2.BIOSPOSTCode", 181 # "Name": "POST Code Log Entry", 182 # "Severity": "OK" 183 # } 184 # ], 185 # "Members@odata.count": 2240, 186 # "Members@odata.nextLink": "/redfish/v1/Systems/system/LogServices/PostCodes/Entries?$skip=1000", 187 # "Name": "BIOS POST Code Log Entries" 188 # } 189 ${post_codes}= Redfish.Get Properties 190 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 191 ${total_log_count}= Set Variable ${post_codes['Members@odata.count']} 192 193 IF ${total_log_count} > ${max_view_count} 194 ${skip_count}= Evaluate (${total_log_count}//${max_view_count})*${max_view_count} 195 ${uri}= Set Variable 196 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries?$skip=${skip_count} 197 ${post_codes}= Redfish.Get Properties ${uri} 198 END 199 200 ${last_id}= Set Variable ${post_codes['Members'][-1]['Id']} 201 ${last_id}= Split String ${last_id} - 202 ${boot_count}= Set Variable ${last_id[0][1]} 203 204 Return From Keyword ${boot_count} 205 206 207Populate PostCode Logs Incase No Prior Entries Available 208 [Documentation] Trigger Redfish graceful restart action on host system 209 ... to populate postcode logs if there are no prior log entries. 210 211 ${post_codes}= Redfish.Get Properties 212 ... /redfish/v1/Systems/system/LogServices/PostCodes/Entries 213 Run Keyword If ${post_codes['Members@odata.count']} == 0 214 ... RF SYS GracefulRestart 215 216