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