*** 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           Run Keyword And Ignore Error  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/${MANAGER_ID} 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/${MANAGER_ID}  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/${MANAGER_ID}  FirmwareVersion
    Should Be Equal As Strings   ${image_version}   ${firmware_version}
    ...  msg=${image_version} does not match redfish version ${firmware_version}
