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