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

Suite Setup            Watchdog Timer Test Setup
Suite Teardown         Restore Watchdog Default Setting
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  60

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

Watchdog Timer Test Setup
    [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

Restore Watchdog Default Setting
    [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}
