blob: 67efb0e6d91560e49434289817b4de546e19ee61 [file] [log] [blame]
*** Settings ***
Documentation Redfish test to switch image sides and boot.
Resource ../../lib/resource.robot
Resource ../../lib/bmc_redfish_resource.robot
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/redfish_code_update_utils.robot
Library ../../lib/tftp_update_utils.py
Suite Setup Suite Setup Execution
Suite Teardown Redfish.Logout
Test Teardown FFDC On Test Case Fail
Force Tags Test_BMC_Image_Switch
*** Variables ***
# Switch iteration count. By default it does only 2 switch.
# User can input -v LOOP_COUNT:n to drive the switch back and forth for
# nth iteration.
${LOOP_COUNT} ${2}
*** Test Cases ***
Test Firmware Image Switch Without Powering Host
[Documentation] Switch image at host powered off.
[Tags] Test_Firmware_Image_Switch_Without_Powering_Host
[Template] Firmware Switch Loop
# iteration power_on
${LOOP_COUNT} NO
Test Firmware Image Switch And Power On Host
[Documentation] Switch image and power on host and verify that it boots.
[Tags] Test_Firmware_Image_Switch_And_Power_On_Host
[Template] Firmware Switch Loop
# iteration power_on
${LOOP_COUNT} YES
*** Keywords ***
Firmware Switch Loop
[Documentation] Wrapper keyword for iteration for firmware side switch.
[Arguments] ${iteration} ${power_on}
# Description of argument(s):
# iteration Number of switch it needs to perform.
# power_on If YES, boot the system post firmware image switch,
# if NO, do not perform any poweron operation.
FOR ${count} IN RANGE 0 ${iteration}
Log To Console LOOP_COUNT:${count} execution.
Redfish BMC Switch Firmware Side
Continue For Loop If '${power_on}' == 'NO'
Log To Console Power on requested, issuing power on.
Redfish Power On
# Power Off for next iteration. Firmware image switch ideally needs to be
# to be executed when Host is powered off.
Log To Console Power off requested, issuing power off.
Redfish Power Off
END
Suite Setup Execution
[Documentation] Do the suite setup.
Redfish.Login
Run Keyword And Ignore Error Redfish Purge Event Log
Redfish Power Off stack_mode=skip
Redfish BMC Switch Firmware Side
[Documentation] Switch back up image to running and verify.
[Tags] Redfish_BMC_Switch_Firmware_Side
# fw_inv_dict:
# [19a3ef3e]:
# [image_type]: BMC image
# [image_id]: 19a3ef3e
# [functional]: True
# [version]: 2.12.0-dev-1440-g8dada0a1a
# [62d16947]:
# [image_type]: BMC image
# [image_id]: 62d16947
# [functional]: False
# [version]: 2.12.0-dev-1441-g8deadbeef
${fw_inv_dict}= Get Software Inventory State
Rprint Vars fw_inv_dict
# Get the backup firmware version for reference.
FOR ${id} IN @{fw_inv_dict.keys()}
Continue For Loop If '${fw_inv_dict['${id}']['functional']}' == 'True'
# Find the non functional id and fetch the version.
${image_version}= Set Variable ${fw_inv_dict['${id}']['version']}
END
Log To Console Backup firmware version: ${image_version}
Switch Firmware Side ${image_version}
Match BMC Release And Redifsh Firmware Version
Log To Console The backup firmware image ${image_version} is now functional.
Match BMC Release And Redifsh Firmware Version
[Documentation] The /etc/os-release vs Redfish FirmwareVersion attribute value from
... /redfish/v1/Managers/bmc should match.
# Python module: get_bmc_release_info()
${bmc_release_info}= utils.Get BMC Release Info
${bmc_release}= Set Variable ${bmc_release_info['version_id']}
Rprint Vars bmc_release
${firmware_version}= Redfish.Get Attribute /redfish/v1/Managers/bmc FirmwareVersion
Rprint Vars firmware_version
Should Be Equal As Strings ${bmc_release} ${firmware_version}
... msg=${bmc_release} does not match redfish version ${firmware_version}
Switch Firmware Side
[Documentation] Set the backup firmware to functional and verify after BMC rebooted.
[Arguments] ${image_version}
# Description of argument(s):
# image_version Version of image.
${state}= Get Pre Reboot State
Print Timen Switch to back up and rebooting.
Switch Backup Firmware Image To Functional
Wait For Reboot start_boot_seconds=${state['epoch_seconds']}
Print Timen Switch to back up completed.
# Check if the BMC version after rebooted is the same version asked to switch.
${firmware_version}= Redfish.Get Attribute /redfish/v1/Managers/bmc FirmwareVersion
Should Be Equal As Strings ${image_version} ${firmware_version}
... msg=${image_version} does not match redfish version ${firmware_version}