1*** Settings *** 2Documentation Verify that Redfish software inventory can be collected. 3 4Resource ../../lib/resource.robot 5Resource ../../lib/bmc_redfish_resource.robot 6Resource ../../lib/openbmc_ffdc.robot 7Resource ../../lib/redfish_code_update_utils.robot 8Library ../../lib/gen_robot_valid.py 9 10Test Setup Test Setup Execution 11Test Teardown Test Teardown Execution 12 13Force Tags Firmware_Inventory 14 15*** Test Cases *** 16 17Verify Redfish Update Service Enabled 18 [Documentation] Verify "ServiceEnabled" is enabled. 19 [Tags] Verify_Redfish_Update_Service_Enabled 20 21 # Example: 22 # "HttpPushUri": "/redfish/v1/UpdateService", 23 # "Id": "UpdateService", 24 # "Name": "Update Service", 25 # "ServiceEnabled": true 26 27 ${resp}= Redfish.Get /redfish/v1/UpdateService 28 Should Be Equal As Strings ${resp.dict["ServiceEnabled"]} ${True} 29 30 31Verify Redfish Software Inventory Collection 32 [Documentation] Verify software inventory collection member and object entries. 33 [Tags] Verify_Redfish_Software_Inventory_Collection 34 35 # Example: 36 # { 37 # "@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection", 38 # "Members": [ 39 # { 40 # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/a3522998" 41 # }, 42 # { 43 # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/a7c79f71" 44 # }, 45 # { 46 # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/ace821ef" 47 # } 48 # ], 49 # "Members@odata.count": 3, 50 # "Name": "Software Inventory Collection" 51 # } 52 53 ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory 54 55 Should Be True ${resp.dict["Members@odata.count"]} >= ${1} 56 Length Should Be ${resp.dict["Members"]} ${resp.dict["Members@odata.count"]} 57 58 59Redfish Software Inventory Status Check 60 [Documentation] Get firmware inventory entries and do health check status. 61 [Tags] Redfish_Software_Inventory_Status_Check 62 63 ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory 64 65 # Entries "Members@odata.count": 3, 66 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a3522998'} 67 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a7c79f71'} 68 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/ace821ef'} 69 70 FOR ${entry} IN RANGE 0 ${resp.dict["Members@odata.count"]} 71 ${resp_resource}= Redfish.Get ${resp.dict["Members"][${entry}]["@odata.id"]} 72 # Example: 73 # "Status": { 74 # "Health": "OK", 75 # "HealthRollup": "OK", 76 # "State": "Enabled" 77 # }, 78 Should Be Equal As Strings ${resp_resource.dict["Status"]["Health"]} OK 79 Should Be Equal As Strings ${resp_resource.dict["Status"]["HealthRollup"]} OK 80 Should Be Equal As Strings ${resp_resource.dict["Status"]["State"]} Enabled 81 END 82 83 84Verify BMC Version Matches With FirmwareInventory 85 [Documentation] Verify BMC version from FirmwareInventory same as in manager. 86 [Tags] Verify_BMC_Version_Matches_With_FirmwareInventory 87 88 ${bmc_manager}= Redfish.Get /redfish/v1/Managers/${MANAGER_ID} 89 ${manager_bmc_version}= Get BMC Version 90 # Check for manager version and cat /etc/os-release. 91 Should Be Equal As Strings 92 ... ${bmc_manager.dict["FirmwareVersion"]} ${manager_bmc_version.strip('"')} 93 94 ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory 95 96 # Entries "Members@odata.count": 3, 97 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a3522998'} 98 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a7c79f71'} 99 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/ace821ef'} 100 101 ${actual_count}= Evaluate ${resp.dict["Members@odata.count"]}-1 102 FOR ${entry} IN RANGE 0 ${resp.dict["Members@odata.count"]} 103 ${resp_resource}= Redfish.Get ${resp.dict["Members"][${entry}]["@odata.id"]} 104 # 3rd comparison of BMC version and verify FirmwareInventory bmc version. 105 # Example: 106 # "Version": 2.7.0-dev-19-g9b44ea7 107 Exit For Loop If '${resp_resource.dict["Version"]}' == '${manager_bmc_version.strip('"')}' 108 Run Keyword If '${entry}' == '${actual_count}' Fail BMC version not there in Firmware Inventory 109 END 110 111 112Verify UpdateService Supports TransferProtocol TFTP 113 [Documentation] Verify update service supported values have TFTP protocol. 114 [Tags] Verify_UpdateService_Supports_TransferProtocol_TFTP 115 116 # Example: 117 # "Actions": { 118 # "#UpdateService.SimpleUpdate": { 119 # "TransferProtocol@Redfish.AllowableValues": [ 120 # "TFTP" 121 # ], 122 # "target": "/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate" 123 # } 124 # }, 125 126 ${allowable_values}= Redfish.Get Attribute /redfish/v1/UpdateService Actions 127 128 Valid Value 129 ... allowable_values["#UpdateService.SimpleUpdate"]["TransferProtocol@Redfish.AllowableValues"][0] 130 ... valid_values=['TFTP'] 131 Valid Value allowable_values["#UpdateService.SimpleUpdate"]["target"] 132 ... valid_values=['/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate'] 133 134 135Verify Redfish Software Hex ID 136 [Documentation] Verify BMC images have valid 8-digit hex IDs. 137 [Tags] Verify_Redfish_Software_Hex_ID 138 139 ${sw_inv_dict}= Get Software Inventory State 140 141 FOR ${id_key} IN @{sw_inv_dict} 142 ${sw_inv}= Get From Dictionary ${sw_inv_dict} ${id_key} 143 Should Be Equal As Strings ${id_key} ${sw_inv['image_id']} 144 Length Should Be ${sw_inv['image_id']} ${8} 145 Should Match Regexp ${sw_inv['image_id']} [0-9a-f]* 146 END 147 148 149Verify Redfish FirmwareInventory Is Updateable 150 [Documentation] Verify the redfish firmware inventory path is updateable. 151 [Tags] Verify_Redfish_FirmwareInventory_Is_Updateable 152 153 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 154 155 # sw_member_list: 156 # [0]: /redfish/v1/UpdateService/FirmwareInventory/98744d76 157 # [1]: /redfish/v1/UpdateService/FirmwareInventory/9a8028ec 158 # [2]: /redfish/v1/UpdateService/FirmwareInventory/acc9e073 159 160 FOR ${sw_member} IN @{sw_member_list} 161 ${resp}= Redfish.Get Attribute ${sw_member} Updateable 162 163 # Example: 164 # "Updateable": true, 165 166 Should Be Equal As Strings ${resp} True 167 END 168 169 170Check Redfish Functional Image Version Is Same 171 [Documentation] Verify functional image version is same as in Redfish managers. 172 [Tags] Check_Redfish_Functional_Image_Version_Is_Same 173 [Template] Verify Redfish Functional Image Version Is Same 174 175 # image 176 functional_image 177 backup_image 178 179 180Check Redfish Backup Image Version Is Same 181 [Documentation] Switch to backup image and then verify functional image version 182 ... is same as in Redfish managers.. 183 [Tags] Check_Redfish_Backup_Image_Version_Is_Same 184 [Template] Verify Redfish Functional Image Version Is Same 185 186 # image 187 switch_backup_image 188 189 190Verify Redfish Software Image And Firmware Inventory Are Same 191 [Documentation] Verify the firmware software inventory is same as software images of managers. 192 [Tags] Verify_Redfish_Software_Image_And_Firmware_Inventory_Are_Same 193 194 # SoftwareImages 195 # /redfish/v1/UpdateService/FirmwareInventory/632c5114 196 # /redfish/v1/UpdateService/FirmwareInventory/e702a011 197 198 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/${MANAGER_ID} 199 ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links 200 ${sw_image}= Get From Dictionary ${firmware_inv_path} SoftwareImages 201 202 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 203 204 FOR ${sw_inv_path} IN @{sw_image} 205 List Should Contain Value ${sw_member_list} ${sw_inv_path['@odata.id']} 206 END 207 208 ${num_records_sw_image}= Get Length ${sw_image} 209 ${num_records_sw_inv}= Get Length ${sw_member_list} 210 Should Be Equal ${num_records_sw_image} ${num_records_sw_inv} 211 212 213Check If Firmware Image Is Same In Firmware Inventory And Redfish Read Operation 214 [Documentation] Check the Redfish firmware inventory path is same as in 215 ... active software image of Redfish managers and firmware inventory of update service. 216 [Tags] Check_If_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation 217 218 Verify Active Software Image And Firmware Inventory Is Same 219 220 221Check If Backup Firmware Image Is Same In Firmware Inventory And Redfish Read Operation 222 [Documentation] Check the Redfish backup image firmware inventory path is same as in 223 ... active software image of Redfish managers and firmware inventory of update service. 224 [Tags] Check_If_Backup_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation 225 226 Verify Active Software Image And Firmware Inventory Is Same 227 Set Backup Firmware Image As Functional 228 Verify Active Software Image And Firmware Inventory Is Same 229 Set Backup Firmware Image As Functional 230 Verify Active Software Image And Firmware Inventory Is Same 231 232 233Verify Redfish BIOS Version 234 [Documentation] Get host firmware version from system inventory. 235 [Tags] Verify_Redfish_BIOS_Version 236 237 ${bios_version}= Redfish.Get Attribute /redfish/v1/Systems/system/ BiosVersion 238 ${pnor_version}= Get PNOR Version 239 Should Be Equal ${pnor_version} ${bios_version} 240 241 242*** Keywords *** 243 244Test Setup Execution 245 [Documentation] Do test case setup tasks. 246 247 Redfish.Login 248 Redfish Power Off stack_mode=skip 249 250 251Test Teardown Execution 252 [Documentation] Do the post test teardown. 253 254 FFDC On Test Case Fail 255 Redfish.Logout 256 257 258Verify Firmware Version Same In Firmware Inventory And Managers 259 [Documentation] Verify the Redfish firmware inventory path version is same as Redfish managers. 260 261 # User defined state for software objects. 262 # Note: "Functional" term refers to firmware which system is currently booted with. 263 264 # sw_inv_dict: 265 # [b9101858]: 266 # [image_type]: BMC update 267 # [image_id]: b9101858 268 # [functional]: True 269 # [version]: 2.8.0-dev-150-g04508dc9f 270 271 ${sw_inv_list}= Get Functional Firmware BMC image 272 ${sw_inv_dict}= Get Non Functional Firmware ${sw_inv_list} True 273 274 # /redfish/v1/Managers/${MANAGER_ID} 275 # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f" 276 277 ${firmware_version}= Redfish.Get Attribute 278 ... ${REDFISH_BASE_URI}Managers/${MANAGER_ID} FirmwareVersion 279 280 Should Be Equal ${sw_inv_dict['version']} ${firmware_version} 281 282 283Verify Firmware Version Is Not Same In Firmware Inventory And Managers 284 [Documentation] Verify the Redfish firmware inventory path version is not same as 285 ... Redfish managers for backup image. 286 287 # User defined state for software objects. 288 # Note: "Functional" term refers to firmware which system is currently booted with. 289 290 # sw_inv_dict: 291 # [b9101858]: 292 # [image_type]: BMC update 293 # [image_id]: b9101858 294 # [functional]: True 295 # [version]: 2.8.0-dev-150-g04508dc9f 296 297 ${sw_inv_list}= Get Functional Firmware BMC image 298 ${sw_inv_list}= Get Non Functional Firmware List ${sw_inv_list} False 299 300 # /redfish/v1/Managers/${MANAGER_ID} 301 # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f" 302 303 ${firmware_version}= Redfish.Get Attribute 304 ... ${REDFISH_BASE_URI}Managers/${MANAGER_ID} FirmwareVersion 305 306 FOR ${sw_inv} IN @{sw_inv_list} 307 Should Not Be Equal ${sw_inv['version']} ${firmware_version} 308 END 309 310 311Set Backup Firmware Image As Functional 312 [Documentation] Switch to the backup firmware image to make functional. 313 314 ${state}= Get Pre Reboot State 315 Rprint Vars state 316 317 Switch Backup Firmware Image To Functional 318 Wait For Reboot start_boot_seconds=${state['epoch_seconds']} 319 320 321Verify Redfish Functional Image Version Is Same 322 [Documentation] Verify the functional image version is same as in firmware inventory and managers. 323 [Arguments] ${image} 324 325 # Description of argument(s): 326 # image Functional Image or Backup Image 327 328 Verify Firmware Version Same In Firmware Inventory And Managers 329 330 Run Keyword If 'backup_image' == '${image}' 331 ... Verify Firmware Version Is Not Same In Firmware Inventory And Managers 332 333 Run Keyword If 'switch_backup_image' == '${image}' 334 ... Run Keywords Set Backup Firmware Image As Functional AND 335 ... Verify Firmware Version Same In Firmware Inventory And Managers AND 336 ... Set Backup Firmware Image As Functional AND 337 ... Verify Firmware Version Same In Firmware Inventory And Managers 338 339 340Verify Active Software Image And Firmware Inventory Is Same 341 [Documentation] Verify Redfish firmware inventory path and active software image is same. 342 343 # ActiveSoftwareImage 344 # /redfish/v1/UpdateService/FirmwareInventory/632c5114 345 346 # Firmware Inventory 347 # /redfish/v1/UpdateService/FirmwareInventory 348 # /redfish/v1/UpdateService/FirmwareInventory/632c5114 349 # /redfish/v1/UpdateService/FirmwareInventory/632c5444 350 351 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/${MANAGER_ID} 352 ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links 353 ${active_sw_image}= Get From Dictionary ${firmware_inv_path} ActiveSoftwareImage 354 ${active_sw_image}= Get From Dictionary ${active_sw_image} @odata.id 355 356 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 357 List Should Contain Value ${sw_member_list} ${active_sw_image} 358