| George Keishing | fc3096a | 2022-07-12 14:55:37 -0500 | [diff] [blame] | 1 | *** Settings *** | 
 | 2 | Documentation            Redfish test to switch image sides and boot. | 
 | 3 |  | 
 | 4 | Resource                 ../../lib/resource.robot | 
 | 5 | Resource                 ../../lib/bmc_redfish_resource.robot | 
 | 6 | Resource                 ../../lib/openbmc_ffdc.robot | 
 | 7 | Resource                 ../../lib/redfish_code_update_utils.robot | 
 | 8 | Library                  ../../lib/tftp_update_utils.py | 
 | 9 |  | 
 | 10 | Suite Setup              Suite Setup Execution | 
| George Keishing | dbd7afb | 2022-08-11 08:34:20 -0500 | [diff] [blame] | 11 | Suite Teardown           Run Keyword And Ignore Error  Redfish.Logout | 
| George Keishing | fc3096a | 2022-07-12 14:55:37 -0500 | [diff] [blame] | 12 | Test Teardown            FFDC On Test Case Fail | 
 | 13 |  | 
| George Keishing | 504a371 | 2022-07-22 09:41:28 -0500 | [diff] [blame] | 14 | Force Tags    Test_BMC_Image_Switch | 
 | 15 |  | 
| George Keishing | fc3096a | 2022-07-12 14:55:37 -0500 | [diff] [blame] | 16 | *** Variables *** | 
 | 17 |  | 
 | 18 | # Switch iteration count. By default it does only 2 switch. | 
 | 19 | # User can input -v LOOP_COUNT:n  to drive the switch back and forth for | 
 | 20 | # nth iteration. | 
 | 21 | ${LOOP_COUNT}    ${2} | 
 | 22 |  | 
 | 23 | *** Test Cases *** | 
 | 24 |  | 
 | 25 | Test Firmware Image Switch Without Powering Host | 
 | 26 |     [Documentation]  Switch image at host powered off. | 
 | 27 |     [Tags]  Test_Firmware_Image_Switch_Without_Powering_Host | 
 | 28 |     [Template]  Firmware Switch Loop | 
 | 29 |  | 
 | 30 |     # iteration          power_on | 
 | 31 |     ${LOOP_COUNT}        NO | 
 | 32 |  | 
 | 33 |  | 
 | 34 | Test Firmware Image Switch And Power On Host | 
 | 35 |     [Documentation]  Switch image and power on host and verify that it boots. | 
 | 36 |     [Tags]  Test_Firmware_Image_Switch_And_Power_On_Host | 
 | 37 |     [Template]  Firmware Switch Loop | 
 | 38 |  | 
 | 39 |     # iteration          power_on | 
 | 40 |     ${LOOP_COUNT}        YES | 
 | 41 |  | 
 | 42 |  | 
 | 43 | *** Keywords *** | 
 | 44 |  | 
 | 45 | Firmware Switch Loop | 
 | 46 |     [Documentation]  Wrapper keyword for iteration for firmware side switch. | 
 | 47 |     [Arguments]  ${iteration}  ${power_on} | 
 | 48 |  | 
 | 49 |     # Description of argument(s): | 
 | 50 |     # iteration      Number of switch it needs to perform. | 
 | 51 |     # power_on       If YES, boot the system post firmware image switch, | 
 | 52 |     #                if NO, do not perform any poweron operation. | 
 | 53 |  | 
 | 54 |     FOR  ${count}  IN RANGE  0  ${iteration} | 
 | 55 |         Log To Console   LOOP_COUNT:${count} execution. | 
 | 56 |         Redfish BMC Switch Firmware Side | 
 | 57 |  | 
 | 58 |         Continue For Loop If  '${power_on}' == 'NO' | 
 | 59 |  | 
 | 60 |         Log To Console   Power on requested, issuing power on. | 
 | 61 |         Redfish Power On | 
 | 62 |  | 
 | 63 |         # Power Off for next iteration. Firmware image switch ideally needs to be | 
 | 64 |         # to be executed when Host is powered off. | 
 | 65 |         Log To Console   Power off requested, issuing power off. | 
 | 66 |         Redfish Power Off | 
 | 67 |     END | 
 | 68 |  | 
 | 69 |  | 
 | 70 | Suite Setup Execution | 
 | 71 |     [Documentation]  Do the suite setup. | 
 | 72 |  | 
 | 73 |     Redfish.Login | 
 | 74 |     Run Keyword And Ignore Error  Redfish Purge Event Log | 
 | 75 |     Redfish Power Off  stack_mode=skip | 
 | 76 |  | 
 | 77 |  | 
 | 78 | Redfish BMC Switch Firmware Side | 
 | 79 |     [Documentation]  Switch back up image to running and verify. | 
 | 80 |     [Tags]  Redfish_BMC_Switch_Firmware_Side | 
 | 81 |  | 
 | 82 |     # fw_inv_dict: | 
 | 83 |     #  [19a3ef3e]: | 
 | 84 |     #    [image_type]:                                 BMC image | 
 | 85 |     #    [image_id]:                                   19a3ef3e | 
 | 86 |     #    [functional]:                                 True | 
 | 87 |     #    [version]:                                    2.12.0-dev-1440-g8dada0a1a | 
 | 88 |     #  [62d16947]: | 
 | 89 |     #    [image_type]:                                 BMC image | 
 | 90 |     #    [image_id]:                                   62d16947 | 
 | 91 |     #    [functional]:                                 False | 
 | 92 |     #    [version]:                                    2.12.0-dev-1441-g8deadbeef | 
 | 93 |     ${fw_inv_dict}=  Get Software Inventory State | 
 | 94 |     Rprint Vars  fw_inv_dict | 
 | 95 |  | 
 | 96 |     # Get the backup firmware version for reference. | 
 | 97 |     FOR  ${id}  IN  @{fw_inv_dict.keys()} | 
 | 98 |         Continue For Loop If  '${fw_inv_dict['${id}']['functional']}' == 'True' | 
 | 99 |         # Find the non functional id and fetch the version. | 
 | 100 |         ${image_version}=  Set Variable  ${fw_inv_dict['${id}']['version']} | 
 | 101 |     END | 
 | 102 |  | 
 | 103 |     Log To Console  Backup firmware version: ${image_version} | 
 | 104 |  | 
 | 105 |     Switch Firmware Side  ${image_version} | 
 | 106 |  | 
 | 107 |     Match BMC Release And Redifsh Firmware Version | 
 | 108 |     Log To Console  The backup firmware image ${image_version} is now functional. | 
 | 109 |  | 
 | 110 |  | 
 | 111 | Match BMC Release And Redifsh Firmware Version | 
 | 112 |     [Documentation]  The /etc/os-release vs Redfish FirmwareVersion attribute value from | 
 | 113 |     ...             /redfish/v1/Managers/bmc should match. | 
 | 114 |  | 
 | 115 |     # Python module: get_bmc_release_info() | 
 | 116 |     ${bmc_release_info}=  utils.Get BMC Release Info | 
 | 117 |     ${bmc_release}=  Set Variable  ${bmc_release_info['version_id']} | 
 | 118 |     Rprint Vars  bmc_release | 
 | 119 |  | 
 | 120 |     ${firmware_version}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  FirmwareVersion | 
 | 121 |     Rprint Vars  firmware_version | 
 | 122 |  | 
 | 123 |     Should Be Equal As Strings   ${bmc_release}   ${firmware_version} | 
 | 124 |     ...  msg=${bmc_release} does not match redfish version ${firmware_version} | 
 | 125 |  | 
 | 126 |  | 
 | 127 | Switch Firmware Side | 
 | 128 |     [Documentation]  Set the backup firmware to functional and verify after BMC rebooted. | 
 | 129 |     [Arguments]  ${image_version} | 
 | 130 |  | 
 | 131 |     # Description of argument(s): | 
 | 132 |     # image_version     Version of image. | 
 | 133 |  | 
 | 134 |     ${state}=  Get Pre Reboot State | 
 | 135 |  | 
 | 136 |     Print Timen  Switch to back up and rebooting. | 
 | 137 |     Switch Backup Firmware Image To Functional | 
 | 138 |     Wait For Reboot  start_boot_seconds=${state['epoch_seconds']} | 
 | 139 |     Print Timen  Switch to back up completed. | 
 | 140 |  | 
 | 141 |     # Check if the BMC version after rebooted is the same version asked to switch. | 
 | 142 |     ${firmware_version}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  FirmwareVersion | 
 | 143 |     Should Be Equal As Strings   ${image_version}   ${firmware_version} | 
 | 144 |     ...  msg=${image_version} does not match redfish version ${firmware_version} |