blob: b50c319bc5d49ab3811dc545b40646ffa9b92e3b [file] [log] [blame]
*** 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
Force Tags Firmware_Inventory
*** Test Cases ***
Verify Redfish Update Service Enabled
[Documentation] Verify "ServiceEnabled" is enabled.
[Tags] Verify_Redfish_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/${MANAGER_ID}
${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
Check Redfish Functional Image Version Is Same
[Documentation] Verify functional image version is same as in Redfish managers.
[Tags] Check_Redfish_Functional_Image_Version_Is_Same
[Template] Verify Redfish Functional Image Version Is Same
# image
functional_image
backup_image
Check Redfish Backup Image Version Is Same
[Documentation] Switch to backup image and then verify functional image version
... is same as in Redfish managers..
[Tags] Check_Redfish_Backup_Image_Version_Is_Same
[Template] Verify Redfish Functional Image Version Is Same
# image
switch_backup_image
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/${MANAGER_ID}
${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}
Check If Firmware Image Is Same In Firmware Inventory And Redfish Read Operation
[Documentation] Check the Redfish firmware inventory path is same as in
... active software image of Redfish managers and firmware inventory of update service.
[Tags] Check_If_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation
Verify Active Software Image And Firmware Inventory Is Same
Check If Backup Firmware Image Is Same In Firmware Inventory And Redfish Read Operation
[Documentation] Check the Redfish backup image firmware inventory path is same as in
... active software image of Redfish managers and firmware inventory of update service.
[Tags] Check_If_Backup_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation
Verify Active Software Image And Firmware Inventory Is Same
Set Backup Firmware Image As Functional
Verify Active Software Image And Firmware Inventory Is Same
Set Backup Firmware Image As Functional
Verify Active Software Image And Firmware Inventory Is Same
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_ID}/ 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
Redfish Power Off stack_mode=skip
Test Teardown Execution
[Documentation] Do the post test teardown.
FFDC On Test Case Fail
Redfish.Logout
Verify Firmware Version Same In Firmware Inventory And Managers
[Documentation] Verify the Redfish firmware inventory path version is same as Redfish managers.
# 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_list}= Get Functional Firmware BMC image
${sw_inv_dict}= Get Non Functional Firmware ${sw_inv_list} True
# /redfish/v1/Managers/${MANAGER_ID}
# "FirmwareVersion": "2.8.0-dev-150-g04508dc9f"
${firmware_version}= Redfish.Get Attribute
... ${REDFISH_BASE_URI}Managers/${MANAGER_ID} FirmwareVersion
Should Be Equal ${sw_inv_dict['version']} ${firmware_version}
Verify Firmware Version Is Not Same In Firmware Inventory And Managers
[Documentation] Verify the Redfish firmware inventory path version is not same as
... Redfish managers for backup image.
# 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_list}= Get Functional Firmware BMC image
${sw_inv_list}= Get Non Functional Firmware List ${sw_inv_list} False
# /redfish/v1/Managers/${MANAGER_ID}
# "FirmwareVersion": "2.8.0-dev-150-g04508dc9f"
${firmware_version}= Redfish.Get Attribute
... ${REDFISH_BASE_URI}Managers/${MANAGER_ID} FirmwareVersion
FOR ${sw_inv} IN @{sw_inv_list}
Should Not Be Equal ${sw_inv['version']} ${firmware_version}
END
Set Backup Firmware Image As Functional
[Documentation] Switch to the backup firmware image to make functional.
${state}= Get Pre Reboot State
Rprint Vars state
Switch Backup Firmware Image To Functional
Wait For Reboot start_boot_seconds=${state['epoch_seconds']}
Verify Redfish Functional Image Version Is Same
[Documentation] Verify the functional image version is same as in firmware inventory and managers.
[Arguments] ${image}
# Description of argument(s):
# image Functional Image or Backup Image
Verify Firmware Version Same In Firmware Inventory And Managers
Run Keyword If 'backup_image' == '${image}'
... Verify Firmware Version Is Not Same In Firmware Inventory And Managers
Run Keyword If 'switch_backup_image' == '${image}'
... Run Keywords Set Backup Firmware Image As Functional AND
... Verify Firmware Version Same In Firmware Inventory And Managers AND
... Set Backup Firmware Image As Functional AND
... Verify Firmware Version Same In Firmware Inventory And Managers
Verify Active Software Image And Firmware Inventory Is Same
[Documentation] Verify Redfish firmware inventory path and active software image is same.
# ActiveSoftwareImage
# /redfish/v1/UpdateService/FirmwareInventory/632c5114
# Firmware Inventory
# /redfish/v1/UpdateService/FirmwareInventory
# /redfish/v1/UpdateService/FirmwareInventory/632c5114
# /redfish/v1/UpdateService/FirmwareInventory/632c5444
${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/${MANAGER_ID}
${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links
${active_sw_image}= Get From Dictionary ${firmware_inv_path} ActiveSoftwareImage
${active_sw_image}= Get From Dictionary ${active_sw_image} @odata.id
${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory
List Should Contain Value ${sw_member_list} ${active_sw_image}