Test suite for firmware side switch
Added:
- Test case to switch sides without powering on
- Test case to switch sides and power on host
Tested:
robot -v OPENBMC_HOST:xx.xx.xx.xx redfish/update_service/test_bmc_image_switch.robot
------------------------------------------------------------------------------
Test Bmc Image Switch :: Redfish test to switch image sides and boot. | PASS |
2 tests, 2 passed, 0 failed
==============================================================================
Change-Id: I5e8e1f85852f802f920ad77d754170252406353c
Signed-off-by: George Keishing <gkeishin@in.ibm.com>
diff --git a/redfish/update_service/test_bmc_image_switch.robot b/redfish/update_service/test_bmc_image_switch.robot
new file mode 100644
index 0000000..0ad9cf3
--- /dev/null
+++ b/redfish/update_service/test_bmc_image_switch.robot
@@ -0,0 +1,142 @@
+*** 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
+
+*** 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}