*** Settings ***
Documentation       This suite tests checkstop operations through OS.
Resource            ../lib/utils.robot
Resource            ../lib/openbmc_ffdc.robot
Resource            ../lib/ras/host_utils.robot
Resource            ../lib/resource.txt
Resource            ../lib/state_manager.robot
Test Setup          RAS Test Setup
Test Teardown       FFDC On Test Case Fail

*** Variables ***
${HOST_SETTINGS}    ${SETTINGS_URI}host0

*** Test Cases ***

Verify Channel Checkstop Through OS With Auto Reboot

    [Documentation]  Verify Channel Checkstop (MBS FIR REG INT PROTOCOL ERROR)
    ...              through OS With Auto Reboot settings enabled.
    [Tags]           Verify_Channel_Checkstop_Through_OS_With_Auto_Reboot

    Verify Checkstop Insertion With Auto Reboot
    ...  Centaur  2011400  4000000000000000

*** Keywords ***
Inject Checkstop Through OS
    [Documentation]  Inject checkstop on processor/centaur through OS.
    ...              Test sequence:
    ...              1. Boot To OS
    ...              2. Clear any existing gard records
    ...              3. Inject Checkstop on processor/centaur
    [Arguments]      ${chip_type}  ${fru}  ${address}
    # Description of arguments:
    # chip_type      The chip type (Processor/Centaur).
    # fru            FRU value (e.g. 2011400).
    # address        chip address (e.g 4000000000000000).


    Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD}
    # Get core values are present through OS.
    Get Cores Values From OS

    Gard Operations On OS  clear all

    # Fetch Processor/Centaur chip value based on the input chip_type.
    ${output}=  Get ChipID From OS  ${chip_type}
    ${chip_values}=  Split String  ${output}
    ${chip_value}=  Get From List  ${chip_values}  0

    Putscom Through OS  ${chip_value}  ${fru}  ${address}

Verify And Clear Gard Records On OS
    [Documentation]  Verify And Clear gard records on OS.

    Login To OS Host  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD}
    ${output}=  Gard Operations On OS  list
    Should Not Contain  ${output}  'No GARD entries to display'
    Gard Operations On OS  clear all

Verify Checkstop Insertion With Auto Reboot
    [Documentation]  Inject and verify checkstop on processor/centaur through
    ...              OS with auto reboot.
    ...              Test sequence:
    ...              1. Enable Auto Reboot Setting
    ...              2. Inject Checkstop on processor/centaur
    ...              3. Check If HOST rebooted and OS is up
    ...              4. Verify & clear gard records
    [Arguments]      ${chip_type}  ${fru}  ${address}
    # Description of arguments:
    # chip_type      The chip type (Processor/Centaur).
    # fru            FRU value (e.g. 2011400).
    # address        chip address (e.g 4000000000000000).

    Set Auto Reboot  yes
    Inject Checkstop Through OS  ${chip_type}  ${fru}  ${address}
    Wait Until Keyword Succeeds  120 sec  20 sec  Is Host Rebooted
    Wait for OS  ${OS_HOST}  ${OS_USERNAME}  ${OS_PASSWORD}
    Verify And Clear Gard Records On OS

RAS Test SetUp
    [Documentation]  Validates input parameters.

    Should Not Be Empty
    ...   ${OS_HOST}  msg=You must provide DNS name/IP of the OS host.
    Should Not Be Empty
    ...   ${OS_USERNAME}  msg=You must provide OS host user name.
    Should Not Be Empty
    ...   ${OS_PASSWORD}  msg=You must provide OS host user password.
