*** 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

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}.
