*** Settings ***

Documentation    Test firmware boot side switch using pldmtool.

# Test Procedure:
# 1. Power off the host or post firmware is updated.
# 2. Check the firmware boot side ( login to BMC and execute )
#    Example:
#    pldmtool bios GetBIOSAttributeCurrentValueByHandle -a fw_boot_side
#
#    It should return response either Temp or Perm
# 3. Set the firmware boot side to Temp or Perm accordingly
#    Example:
#    pldmtool bios SetBIOSAttributeCurrentValue -a fw_boot_side -d Temp
#
# 4. Power on
# 5. BMC take reset during power on ( expected )
# 6. Check the system booted to Runtime
# 7. Verify the boot side is still same which was set.

Library          Collections
Library          ../lib/tftp_update_utils.py
Resource         ../lib/bmc_redfish_resource.robot
Resource         ../lib/openbmc_ffdc.robot

Test Setup       Printn
Test Teardown    FFDC On Test Case Fail

Force Tags       Firmware_Boot_Side

*** Variables ***

# By default 2, to ensure, it performs both Perm and Temp side switch and boot.
${LOOP_COUNT}     2

# This dictionary is for Temp -> Perm or vice versa in the test code.
&{FW_BOOT_SIDE_DICT}  Perm=Temp  Temp=Perm

*** Test Cases ***

Test Firmware Boot Side Using Pldmtool
    [Documentation]   Power off the host , set the firmware boot side via pldmtool,
    ...               power on the host and confirm the fw_boot_side attribute is
    ...               still set.
    [Tags]  Test_Firmware_Boot_Side_Using_Pldmtool
    [Template]  Firmware Side Switch Power On Loop

    # iteration
    ${LOOP_COUNT}


*** Keywords ***

Firmware Side Switch Power On Loop
    [Documentation]   Number of iteration, test should perform switch side and boot.
    [Arguments]  ${iteration}

    # Description of argument(s):
    # iteration      Number of switch it needs to perform.

    FOR  ${count}  IN RANGE  0  ${iteration}
        Print Timen  The Current Loop Count is ${count} of ${iteration}

        # Get the current system state before BMC reset.
        ${state}=  Get Pre Reboot State

        Redfish Power Off  stack_mode=skip

        ${cur_boot_side}=  PLDM Get BIOS Attribute  fw_boot_side
        Print Timen  Current BIOS attribute fw_boot_side: ${cur_boot_side}

        ${next_boot_side}=  Set Variable  ${FW_BOOT_SIDE_DICT["${cur_boot_side["CurrentValue"]}"]}
        Print Timen  Set BIOS attribute fw_boot_side: ${next_boot_side}
        PLDM Set BIOS Attribute  fw_boot_side  ${next_boot_side}

        ${cur_boot_side}=  PLDM Get BIOS Attribute  fw_boot_side
        Print Timen   Next boot will apply BIOS attribute fw_boot_side: ${cur_boot_side}

        Print Timen  Perform power on operation and expect BMC to take reset.
        Redfish Power Operation  On
        Print Timen  Wait for the BMC to take reset and come back online.
        Wait For Reboot  start_boot_seconds=${state['epoch_seconds']}  wait_state_check=0

        Print Timen  BMC rebooted, wait for host to boot to Runtime.
        # Post BMC reset, host should auto power on back to runtime.
        Wait Until Keyword Succeeds  10 min  20 sec  Is Boot Progress Runtime Matched

        # Verify the system is booting up with the new fw_boot_side set.
        ${cur_boot_side}=  PLDM Get BIOS Attribute  fw_boot_side
        Should Be Equal As Strings  ${cur_boot_side["CurrentValue"]}  ${next_boot_side}
        Print Timen  Current: ${cur_boot_side["CurrentValue"]} and set side: ${next_boot_side} are same.
    END


Is Boot Progress Runtime Matched
    [Documentation]  Get BootProgress state and expect boot state mismatch.

    # Match any of the BootProgress state SystemHardwareInitializationComplete|OSBootStarted|OSRunning
    ${boot_progress}  ${host_state}=  Redfish Get Boot Progress
    Should Contain Any  ${boot_progress}  SystemHardwareInitializationComplete  OSBootStarted  OSRunning
