blob: 996939fbc29e1c1a0b7e42761203d09c44104cb0 [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
*** 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