*** 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}