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 13Test 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 IF '${resp_resource.dict["Version"]}' == '${manager_bmc_version.strip('"')}' BREAK 108 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 ID 136 [Documentation] Verify BMC images have valid 8-digit hex IDs. 137 [Tags] Verify_Redfish_Software_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 Should Match Regexp ${sw_inv['image_id']} [0-9_a-z]* 145 END 146 147 148Verify Redfish FirmwareInventory Is Updateable 149 [Documentation] Verify the redfish firmware inventory path is updateable. 150 [Tags] Verify_Redfish_FirmwareInventory_Is_Updateable 151 152 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 153 154 # sw_member_list: 155 # [0]: /redfish/v1/UpdateService/FirmwareInventory/98744d76 156 # [1]: /redfish/v1/UpdateService/FirmwareInventory/9a8028ec 157 # [2]: /redfish/v1/UpdateService/FirmwareInventory/acc9e073 158 159 FOR ${sw_member} IN @{sw_member_list} 160 ${resp}= Redfish.Get Attribute ${sw_member} Updateable 161 162 # Example: 163 # "Updateable": true, 164 165 Should Be Equal As Strings ${resp} True 166 END 167 168 169Check Redfish Functional Image Version Is Same 170 [Documentation] Verify functional image version is same as in Redfish managers. 171 [Tags] Check_Redfish_Functional_Image_Version_Is_Same 172 [Template] Verify Redfish Functional Image Version Is Same 173 174 # image 175 functional_image 176 backup_image 177 178 179Check Redfish Backup Image Version Is Same 180 [Documentation] Switch to backup image and then verify functional image version 181 ... is same as in Redfish managers.. 182 [Tags] Check_Redfish_Backup_Image_Version_Is_Same 183 [Template] Verify Redfish Functional Image Version Is Same 184 185 # image 186 switch_backup_image 187 188 189Verify Redfish Software Image And Firmware Inventory Are Same 190 [Documentation] Verify the firmware software inventory is same as software images of managers. 191 [Tags] Verify_Redfish_Software_Image_And_Firmware_Inventory_Are_Same 192 193 # SoftwareImages 194 # /redfish/v1/UpdateService/FirmwareInventory/632c5114 195 # /redfish/v1/UpdateService/FirmwareInventory/e702a011 196 197 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/${MANAGER_ID} 198 ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links 199 ${sw_image}= Get From Dictionary ${firmware_inv_path} SoftwareImages 200 201 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 202 203 FOR ${sw_inv_path} IN @{sw_image} 204 List Should Contain Value ${sw_member_list} ${sw_inv_path['@odata.id']} 205 END 206 207 ${num_records_sw_image}= Get Length ${sw_image} 208 ${num_records_sw_inv}= Get Length ${sw_member_list} 209 Should Be Equal ${num_records_sw_image} ${num_records_sw_inv} 210 211 212Check If Firmware Image Is Same In Firmware Inventory And Redfish Read Operation 213 [Documentation] Check the Redfish firmware inventory path is same as in 214 ... active software image of Redfish managers and firmware inventory of update service. 215 [Tags] Check_If_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation 216 217 Verify Active Software Image And Firmware Inventory Is Same 218 219 220Check If Backup Firmware Image Is Same In Firmware Inventory And Redfish Read Operation 221 [Documentation] Check the Redfish backup image firmware inventory path is same as in 222 ... active software image of Redfish managers and firmware inventory of update service. 223 [Tags] Check_If_Backup_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation 224 225 Verify Active Software Image And Firmware Inventory Is Same 226 Set Backup Firmware Image As Functional 227 Verify Active Software Image And Firmware Inventory Is Same 228 Set Backup Firmware Image As Functional 229 Verify Active Software Image And Firmware Inventory Is Same 230 231 232Verify Redfish BIOS Version 233 [Documentation] Get host firmware version from system inventory. 234 [Tags] Verify_Redfish_BIOS_Version 235 236 ${bios_version}= Redfish.Get Attribute /redfish/v1/Systems/${SYSTEM_ID}/ BiosVersion 237 ${pnor_version}= Get PNOR Version 238 Should Be Equal ${pnor_version} ${bios_version} 239 240 241*** Keywords *** 242 243Test Setup Execution 244 [Documentation] Do test case setup tasks. 245 246 Redfish.Login 247 Redfish Power Off stack_mode=skip 248 249 250Test Teardown Execution 251 [Documentation] Do the post test teardown. 252 253 FFDC On Test Case Fail 254 Redfish.Logout 255 256 257Verify Firmware Version Same In Firmware Inventory And Managers 258 [Documentation] Verify the Redfish firmware inventory path version is same as Redfish managers. 259 260 # User defined state for software objects. 261 # Note: "Functional" term refers to firmware which system is currently booted with. 262 263 # sw_inv_dict: 264 # [b9101858]: 265 # [image_type]: BMC update 266 # [image_id]: b9101858 267 # [functional]: True 268 # [version]: 2.8.0-dev-150-g04508dc9f 269 270 ${sw_inv_list}= Get Functional Firmware BMC image 271 ${sw_inv_dict}= Get Non Functional Firmware ${sw_inv_list} True 272 273 # /redfish/v1/Managers/${MANAGER_ID} 274 # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f" 275 276 ${firmware_version}= Redfish.Get Attribute 277 ... ${REDFISH_BASE_URI}Managers/${MANAGER_ID} FirmwareVersion 278 279 Should Be Equal ${sw_inv_dict['version']} ${firmware_version} 280 281 282Verify Firmware Version Is Not Same In Firmware Inventory And Managers 283 [Documentation] Verify the Redfish firmware inventory path version is not same as 284 ... Redfish managers for backup image. 285 286 # User defined state for software objects. 287 # Note: "Functional" term refers to firmware which system is currently booted with. 288 289 # sw_inv_dict: 290 # [b9101858]: 291 # [image_type]: BMC update 292 # [image_id]: b9101858 293 # [functional]: True 294 # [version]: 2.8.0-dev-150-g04508dc9f 295 296 ${sw_inv_list}= Get Functional Firmware BMC image 297 ${sw_inv_list}= Get Non Functional Firmware List ${sw_inv_list} False 298 299 # /redfish/v1/Managers/${MANAGER_ID} 300 # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f" 301 302 ${firmware_version}= Redfish.Get Attribute 303 ... ${REDFISH_BASE_URI}Managers/${MANAGER_ID} FirmwareVersion 304 305 FOR ${sw_inv} IN @{sw_inv_list} 306 Should Not Be Equal ${sw_inv['version']} ${firmware_version} 307 END 308 309 310Set Backup Firmware Image As Functional 311 [Documentation] Switch to the backup firmware image to make functional. 312 313 ${state}= Get Pre Reboot State 314 Rprint Vars state 315 316 Switch Backup Firmware Image To Functional 317 Wait For Reboot start_boot_seconds=${state['epoch_seconds']} 318 319 320Verify Redfish Functional Image Version Is Same 321 [Documentation] Verify the functional image version is same as in firmware inventory and managers. 322 [Arguments] ${image} 323 324 # Description of argument(s): 325 # image Functional Image or Backup Image 326 327 Verify Firmware Version Same In Firmware Inventory And Managers 328 329 IF 'backup_image' == '${image}' 330 Verify Firmware Version Is Not Same In Firmware Inventory And Managers 331 END 332 333 IF 'switch_backup_image' == '${image}' 334 Set Backup Firmware Image As Functional 335 Verify Firmware Version Same In Firmware Inventory And Managers 336 Set Backup Firmware Image As Functional 337 Verify Firmware Version Same In Firmware Inventory And Managers 338 END 339 340 341Verify Active Software Image And Firmware Inventory Is Same 342 [Documentation] Verify Redfish firmware inventory path and active software image is same. 343 344 # ActiveSoftwareImage 345 # /redfish/v1/UpdateService/FirmwareInventory/632c5114 346 347 # Firmware Inventory 348 # /redfish/v1/UpdateService/FirmwareInventory 349 # /redfish/v1/UpdateService/FirmwareInventory/632c5114 350 # /redfish/v1/UpdateService/FirmwareInventory/632c5444 351 352 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/${MANAGER_ID} 353 ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links 354 ${active_sw_image}= Get From Dictionary ${firmware_inv_path} ActiveSoftwareImage 355 ${active_sw_image}= Get From Dictionary ${active_sw_image} @odata.id 356 357 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 358 List Should Contain Value ${sw_member_list} ${active_sw_image} 359