*** Settings *** Documentation Verify that Redfish software inventory can be collected. Resource ../../lib/resource.robot Resource ../../lib/bmc_redfish_resource.robot Resource ../../lib/openbmc_ffdc.robot Resource ../../lib/redfish_code_update_utils.robot Library ../../lib/gen_robot_valid.py Test Setup Test Setup Execution Test Teardown Test Teardown Execution *** Test Cases *** Verify Redfish Update Service Enabled [Documentation] Verify "ServiceEnabled" is enabled. [Tags] Verify_Update_Service_Enabled # Example: # "HttpPushUri": "/redfish/v1/UpdateService", # "Id": "UpdateService", # "Name": "Update Service", # "ServiceEnabled": true ${resp}= Redfish.Get /redfish/v1/UpdateService Should Be Equal As Strings ${resp.dict["ServiceEnabled"]} ${True} Verify Redfish Software Inventory Collection [Documentation] Verify software inventory collection member and object entries. [Tags] Verify_Redfish_Software_Inventory_Collection # Example: # { # "@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection", # "Members": [ # { # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/a3522998" # }, # { # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/a7c79f71" # }, # { # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/ace821ef" # } # ], # "Members@odata.count": 3, # "Name": "Software Inventory Collection" # } ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory Should Be True ${resp.dict["Members@odata.count"]} >= ${1} Length Should Be ${resp.dict["Members"]} ${resp.dict["Members@odata.count"]} Redfish Software Inventory Status Check [Documentation] Get firmware inventory entries and do health check status. [Tags] Redfish_Software_Inventory_Status_Check ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory # Entries "Members@odata.count": 3, # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a3522998'} # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a7c79f71'} # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/ace821ef'} FOR ${entry} IN RANGE 0 ${resp.dict["Members@odata.count"]} ${resp_resource}= Redfish.Get ${resp.dict["Members"][${entry}]["@odata.id"]} # Example: # "Status": { # "Health": "OK", # "HealthRollup": "OK", # "State": "Enabled" # }, Should Be Equal As Strings ${resp_resource.dict["Status"]["Health"]} OK Should Be Equal As Strings ${resp_resource.dict["Status"]["HealthRollup"]} OK Should Be Equal As Strings ${resp_resource.dict["Status"]["State"]} Enabled END Verify BMC Version Matches With FirmwareInventory [Documentation] Verify BMC version from FirmwareInventory same as in manager. [Tags] Verify_BMC_Version_Matches_With_FirmwareInventory ${bmc_manager}= Redfish.Get /redfish/v1/Managers/bmc ${manager_bmc_version}= Get BMC Version # Check for manager version and cat /etc/os-release. Should Be Equal As Strings ... ${bmc_manager.dict["FirmwareVersion"]} ${manager_bmc_version.strip('"')} ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory # Entries "Members@odata.count": 3, # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a3522998'} # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a7c79f71'} # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/ace821ef'} ${actual_count}= Evaluate ${resp.dict["Members@odata.count"]}-1 FOR ${entry} IN RANGE 0 ${resp.dict["Members@odata.count"]} ${resp_resource}= Redfish.Get ${resp.dict["Members"][${entry}]["@odata.id"]} # 3rd comparison of BMC version and verify FirmwareInventory bmc version. # Example: # "Version": 2.7.0-dev-19-g9b44ea7 Exit For Loop If '${resp_resource.dict["Version"]}' == '${manager_bmc_version.strip('"')}' Run Keyword If '${entry}' == '${actual_count}' Fail BMC version not there in Firmware Inventory END Verify UpdateService Supports TransferProtocol TFTP [Documentation] Verify update service supported values have TFTP protocol. [Tags] Verify_UpdateService_Supports_TransferProtocol_TFTP # Example: # "Actions": { # "#UpdateService.SimpleUpdate": { # "TransferProtocol@Redfish.AllowableValues": [ # "TFTP" # ], # "target": "/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate" # } # }, ${allowable_values}= Redfish.Get Attribute /redfish/v1/UpdateService Actions Valid Value ... allowable_values["#UpdateService.SimpleUpdate"]["TransferProtocol@Redfish.AllowableValues"][0] ... valid_values=['TFTP'] Valid Value allowable_values["#UpdateService.SimpleUpdate"]["target"] ... valid_values=['/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate'] Verify Redfish Software Hex ID [Documentation] Verify BMC images have valid 8-digit hex IDs. [Tags] Verify_Redfish_Software_Hex_ID ${sw_inv_dict}= Get Software Inventory State FOR ${id_key} IN @{sw_inv_dict} ${sw_inv}= Get From Dictionary ${sw_inv_dict} ${id_key} Should Be Equal As Strings ${id_key} ${sw_inv['image_id']} Length Should Be ${sw_inv['image_id']} ${8} Should Match Regexp ${sw_inv['image_id']} [0-9a-f]* END Verify Redfish FirmwareInventory Is Updateable [Documentation] Verify the redfish firmware inventory path is updateable. [Tags] Verify_Redfish_FirmwareInventory_Is_Updateable ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory # sw_member_list: # [0]: /redfish/v1/UpdateService/FirmwareInventory/98744d76 # [1]: /redfish/v1/UpdateService/FirmwareInventory/9a8028ec # [2]: /redfish/v1/UpdateService/FirmwareInventory/acc9e073 FOR ${sw_member} IN @{sw_member_list} ${resp}= Redfish.Get Attribute ${sw_member} Updateable # Example: # "Updateable": true, Should Be Equal As Strings ${resp} True END Verify Redfish Functional Version Is Same [Documentation] Verify the redfish firmware inventory path version is same as redfish managers. [Tags] Verify_Redfish_Functional_Version_Is_Same # User defined state for software objects. # Note: "Functional" term refers to firmware which system is currently booted with. # sw_inv_dict: # [b9101858]: # [image_type]: BMC update # [image_id]: b9101858 # [functional]: True # [version]: 2.8.0-dev-150-g04508dc9f ${sw_inv_dict}= Get Functional Firmware BMC image ${sw_inv_dict}= Get Non Functional Firmware ${sw_inv_dict} True # /redfish/v1/Managers/bmc # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f" ${firmware_version}= Redfish.Get Attribute ... ${REDFISH_BASE_URI}Managers/bmc FirmwareVersion Should Be Equal ${sw_inv_dict['version']} ${firmware_version} Verify Redfish Software Image And Firmware Inventory Are Same [Documentation] Verify the firmware software inventory is same as software images of managers. [Tags] Verify_Redfish_Software_Image_And_Firmware_Inventory_Are_Same # SoftwareImages # /redfish/v1/UpdateService/FirmwareInventory/632c5114 # /redfish/v1/UpdateService/FirmwareInventory/e702a011 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/bmc ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links ${sw_image}= Get From Dictionary ${firmware_inv_path} SoftwareImages ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory FOR ${sw_inv_path} IN @{sw_image} List Should Contain Value ${sw_member_list} ${sw_inv_path['@odata.id']} END ${num_records_sw_image}= Get Length ${sw_image} ${num_records_sw_inv}= Get Length ${sw_member_list} Should Be Equal ${num_records_sw_image} ${num_records_sw_inv} Verify Redfish BIOS Version [Documentation] Get host firmware version from system inventory. [Tags] Verify_Redfish_BIOS_Version ${bios_version}= Redfish.Get Attribute /redfish/v1/Systems/system/ BiosVersion ${pnor_version}= Get PNOR Version Should Be Equal ${pnor_version} ${bios_version} *** Keywords *** Test Setup Execution [Documentation] Do test case setup tasks. Redfish.Login Test Teardown Execution [Documentation] Do the post test teardown. FFDC On Test Case Fail Redfish.Logout