*** Settings ***
Documentation       Test SBE side switching with watchdog errors.

Library             ../lib/state.py
Library             ../lib/utils.py
Variables           ../data/variables.py
Resource            ../lib/boot_utils.robot
Resource            ../lib/state_manager.robot

Test Setup          Test Setup Execution
Test Teardown       Test Teardown Execution

*** Variables ***

${sbe_side_bit_mask}  ${0x00004000}

*** Test Cases ***

Test SBE Side Switch
    [Documentation]  Trigger watchdog errors on the host until it side
    ...  switches.
    [Tags]  Test_SBE_Side_Switch

    REST Power On

    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
    ...  AttemptsLeft
    Should Be Equal As Strings  ${attempts_left}  3
    ...  msg=Expects boot attempts left 3, but got ${attempts_left}.

    # Get which side the SBE is booted with. By default 0.
    ${sbe_val} =  Get SBE
    ${sbe_cur_side} =  Evaluate  ${sbe_side_bit_mask} & ${sbe_val}

    Trigger Watchdog Error To Switch SBE Boot Side

    # Next Power on check if host booting is in progress.
    Wait Until Keyword Succeeds  2 min  30 sec  Watchdog Object Should Exist

    # Verify that the side has switched.
    ${sbe_val} =  Get SBE
    ${sbe_orig_side} =  Evaluate  ${sbe_side_bit_mask} & ${sbe_val}

    Run Keyword If  ${sbe_orig_side} == ${0}
    ...      Should Be True  ${sbe_cur_side} == ${sbe_side_bit_mask}
    ...      msg=SBE seeprom side is 1.
    ...  ELSE
    ...      Should Be True  ${sbe_cur_side} == ${0}
    ...      msg=SBE seeprom side is 0.

    # Verify that host booted on the current SBE side.
    Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running


*** Keywords ***

Test Setup Execution
    [Documentation]  Do the test setup execution.

    Delete All Error Logs
    Set Auto Reboot  ${1}
    Smart Power Off


Test Teardown Execution
    [Documentation]  Do the test teardown execution.
    FFDC On Test Case Fail
    Smart Power Off


Watchdog Object Should Exist
    [Documentation]  Watchdog object should exist.

    ${resp}=  OpenBMC Get Request  ${WATCHDOG_URI}  quiet=${1}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
    ...  msg=Failed to get ${WATCHDOG_URI}, response = ${resp.status_code}.


Trigger Watchdog Error To Switch SBE Boot Side
    [Documentation]  Trigger watchdog error to force SBE boot side switch.

    # 20 second wait is introduced to ensure host boot progress at least
    # crossed the initial istep booting sequence.

    Trigger Host Watchdog Error
    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
    ...  AttemptsLeft
    Should Be Equal As Strings  ${attempts_left}  2
    ...  msg=Expects boot attempts left 2, but got ${attempts_left}.

    Wait Until Keyword Succeeds  2 min  30 sec  Watchdog Object Should Exist
    Sleep  20 s
    Trigger Host Watchdog Error
    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
    ...  AttemptsLeft
    Should Be Equal As Strings  ${attempts_left}  1
    ...  msg=Expects boot attempts left 1, but got ${attempts_left}.

    Wait Until Keyword Succeeds  2 min  30 sec  Watchdog Object Should Exist
    Sleep  20 s
    Trigger Host Watchdog Error
    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
    ...  AttemptsLeft
    Should Be Equal As Strings  ${attempts_left}  0
    ...  msg=Expects boot attempts left 0, but got ${attempts_left}.
