*** Settings ***
Documentation          This suite tests HOST watchdog timer in Open BMC.

Resource               ../lib/rest_client.robot
Resource               ../lib/openbmc_ffdc.robot
Resource               ../lib/utils.robot
Resource               ../lib/resource.txt
Resource               ../lib/boot_utils.robot
Resource               ../lib/state_manager.robot

Suite Setup            Suite Setup Execution
Suite Teardown         Suite Teardown Execution
Test Teardown          FFDC On Test Case Fail

*** Variables ***
# "skip" boots that aren't needed to get to desired state.
${stack_mode}  skip

*** Test Cases ***
Verify Watchdog Setting With Watchdog Disabled
    [Documentation]  Disable watchdog timer and verify watchdog settings
    ...              i.e Enabled, Interval, TimeRemaining.
    [Tags]  Verify_Watchdog_Setting_With_Watchdog_Disabled

    ${initial_interval}=  Read Attribute  ${HOST_WATCH_DOG_URI}  Interval
    Set Watchdog Setting Using REST  Enabled  ${False}

    # Check if watchdog has default settings.
    ${properties}=  Read Properties  /xyz/openbmc_project/watchdog/host0
    Should Be Equal As Strings  ${properties["Enabled"]}  0
    Should Be Equal As Strings  ${properties["Interval"]}  ${initial_interval}
    Should Be Equal As Strings  ${properties["TimeRemaining"]}  0

Verify Watchdog Setting With Watchdog Enabled
    [Documentation]  Enable watchdog timer and check if host OS is rebooted
    ...              and verify hostdog settings are reset to default when
    ...              host OS is up.
    [Tags]  Verify_Watchdog_Setting_With_Watchdog_Enabled

    ${initial_interval}=  Read Attribute  ${HOST_WATCHDOG_URI}  Interval

    Trigger Host Watchdog Error  2000  30

    Wait Until Keyword Succeeds  3 min  10 sec  Watchdog Object Should Exist

    # Verify if watchdog settings are enabled and timeremaining is reduced.
    ${properties}=  Read Properties  /xyz/openbmc_project/watchdog/host0
    Should Be Equal As Strings  ${properties["Enabled"]}  1
    Should Not Be Equal As Strings  ${properties["TimeRemaining"]}  0

    Wait Until Keyword Succeeds  120 sec  20 sec  Is Host Rebooted
    Wait For Host To Ping  ${OS_HOST}  5min  10
    Wait for OS

    # Check if watchdog settings are reset when host OS is up.
    ${properties}=  Read Properties  /xyz/openbmc_project/watchdog/host0
    Should Be Equal As Strings  ${properties["Enabled"]}  0
    Should Be Equal As Strings  ${properties["Interval"]}  ${initial_interval}
    Should Be Equal As Strings  ${properties["TimeRemaining"]}  0

Modify And Verify Watchdog Timer Interval
    [Documentation]  Modify and verify watchdog timer interval.
    [Tags]  Modify_And_Verify_Watchdog_Timer_Interval
    [Teardown]  Set Watchdog Setting Using REST  Interval  ${initial_interval}

    ${initial_interval}=  Read Attribute  ${HOST_WATCHDOG_URI}  Interval
    ${random_int}=  Evaluate  random.randint(10000, 20000)  modules=random
    Set Watchdog Setting Using REST  Interval  ${random_int}
    ${modified_time_interval}=  Read Attribute  ${HOST_WATCHDOG_URI}  Interval
    Should Be Equal As Strings  ${modified_time_interval}  ${random_int}

Modify and verify Watchdog TimeRemaining
    [Documentation]  Modify and verify watchdog 'TimeRemaining'.
    [Tags]  Modify_And_Verify_Watchdog_TimeRemaining

    ${random_int}=  Evaluate  random.randint(10000, 20000)  modules=random
    Set Watchdog Setting Using REST  TimeRemaining  ${random_int}
    ${modified_timeremain}=
    ...  Read Attribute  ${HOST_WATCHDOG_URI}  TimeRemaining
    Should Not Be Equal As Strings  ${random_int}  ${modified_timeremain}

Verify Watchdog URL When Host Is On And Off
    [Documentation]  Verify watchdog URL when host is running
    ...              and when host is off.
    [Tags]           Verify_Watchdog_URL_When_Host_Is_On_And_Off

    ${resp}=  OpenBMC Get Request  ${HOST_WATCHDOG_URI}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}

    REST Power Off
    ${resp}=  OpenBMC Get Request  ${HOST_WATCHDOG_URI}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}

*** Keywords ***

Suite Setup Execution
    [Documentation]   Do test initialization setup.
    # Check input parameters & check if host OS is up.

    Should Not Be Empty
    ...   ${OS_HOST}  msg=You must provide the host name/host IP address.
    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.

    # Boot to OS.
    REST Power On

Suite Teardown Execution
    [Documentation]  Restore watchdog Default setting.

    # Boot to OS.
    REST Power On
    Set Watchdog Setting Using REST  Enabled  ${False}

    Close All Connections

Set Watchdog Setting Using REST
    [Documentation]  Set watchdog setting using REST with a given input
    ...              attribute values.
    [Arguments]  ${setting_name}  ${value}

    # Description of argument(s):
    # setting_name  The name of the watchdog setting
    #               (e.g. "Enabled", "Interval", etc.).
    # value         Watchdog setting value(e.g. "Enabled":boolean,
    #               "Interval":Integer, "TimeRemaining":Integer)

    ${valueDict}=  Create Dictionary  data=${value}
    ${resp}=  OpenBMC Put Request  ${HOST_WATCHDOG_URI}/attr/${setting_name}
    ...       data=${valueDict}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}


Watchdog Object Should Exist
    [Documentation]  Check if watchdog object exist.

    ${resp}=  OpenBMC Get Request  ${WATCHDOG_URI}host0
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}

