1de9356efSleet*** Settings *** 2de9356efSleet 3de9356efSleetDocumentation Module to test out of band IPMI watchdog functionality. 4de9356efSleetResource ../lib/ipmi_client.robot 5de9356efSleetResource ../lib/openbmc_ffdc.robot 6de9356efSleetResource ../lib/boot_utils.robot 7de9356efSleetLibrary ../lib/ipmi_utils.py 8de9356efSleetLibrary String 9de9356efSleetLibrary Collections 10de9356efSleetVariables ../data/ipmi_raw_cmd_table.py 11de9356efSleet 12*6fb70d98SMatt FischerTest Tags IPMI_Watchdog 1387dc442cSGeorge Keishing 14de9356efSleet*** Variables *** 15de9356efSleet 16de9356efSleet${TIMER_DELAY} 3 17011c5f3bSNagarjun B${POWER_STATE_CHANGE} 3 18de9356efSleet 19de9356efSleet*** Test Cases *** 20de9356efSleet 21de9356efSleetTest IPMI Watchdog Timer Does Not Log Bit 22de9356efSleet [Documentation] Execute out of band set/get do not log bit for watchdog timer. 23de9356efSleet [Tags] Test_IPMI_Watchdog_Timer_Does_Not_Log_Bit 24de9356efSleet [Template] Execute IPMI Raw Command And Verify Response Data 25de9356efSleet 26de9356efSleet # set_raw_cmd get_raw_cmd resp_expect 27de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][0]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 28de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][1]} 29de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][3]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 30de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][3]} 31de9356efSleet 32de9356efSleetTest IPMI Watchdog Timer Stop Bit 33de9356efSleet [Documentation] Execute out of band set/get stop/resume timer stop bit for watchdog timer. 34de9356efSleet [Tags] Test_IPMI_Watchdog_Timer_Stop_Bit 35de9356efSleet [Template] Execute IPMI Raw Command And Verify Response Data After Watchdog Expires 36de9356efSleet 37de9356efSleet # set_raw_cmd get_raw_cmd resp_expect 38de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][6]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 39de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][5]} 40de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][9]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 41de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][7]} 42de9356efSleet 43de9356efSleetTest IPMI Watchdog Timer Use Bits 44de9356efSleet [Documentation] Execute out of band set/get timer use bits for watchdog timer. 45de9356efSleet [Tags] Test_IPMI_Watchdog_Timer_Use_Bits 46de9356efSleet [Template] Execute IPMI Raw Command And Verify Response Data 47de9356efSleet 48de9356efSleet # set_raw_cmd get_raw_cmd resp_expect 49de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][12]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 50de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][9]} 51de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][15]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 52de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][11]} 53de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][18]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 54de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][13]} 55de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][21]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 56de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][15]} 57de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][24]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 58de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][17]} 59de9356efSleet 60de9356efSleetTest IPMI Watchdog Timer Pre-Timeout Interrupt Bits 61de9356efSleet [Documentation] Execute out of band set/get pre-timeout interrupt bits for watchdog timer. 62de9356efSleet [Tags] Test_IPMI_Watchdog_Timer_Pre-Timeout_Interrupt_Bits 63de9356efSleet [Template] Execute IPMI Raw Command And Verify Response Data 64de9356efSleet 65de9356efSleet # set_raw_cmd get_raw_cmd resp_expect 66de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][27]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 67de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][19]} 68de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][30]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 69de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][21]} 70de9356efSleet 71de9356efSleetTest IPMI Watchdog Timer Timeout Action Bits 72de9356efSleet [Documentation] Execute out of band set/get timer timeout bits for watchdog timer. 73de9356efSleet [Tags] Test_IPMI_Watchdog_Timer_Timeout_Action_Bits 74de9356efSleet [Template] Execute IPMI Raw Command And Verify Response Data 75de9356efSleet 76de9356efSleet # set_raw_cmd get_raw_cmd resp_expect 77de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][33]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 78de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][23]} 79de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][36]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 80de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][25]} 81de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][39]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 82de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][27]} 83de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][42]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 84de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][29]} 85de9356efSleet 86de9356efSleetTest IPMI Watchdog Timer Timeout Flag Bits 87de9356efSleet [Documentation] Execute out of band set/get timer timeout flag bits for watchdog timer. 88de9356efSleet [Tags] Test_IPMI_Watchdog_Timer_Timeout_Flag_Bits 89de9356efSleet [Template] Execute IPMI Raw Command And Verify Timer Expiration Data 90de9356efSleet 91de9356efSleet # set_raw_cmd get_raw_cmd resp_expect 92de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][45]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 93de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][31]} 94de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][48]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 95de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][33]} 96de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][51]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 97de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][35]} 98de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][54]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 99de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][37]} 100de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][57]} ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 101de9356efSleet ... ${IPMI_RAW_CMD['Watchdog']['Get'][39]} 102de9356efSleet 103de9356efSleet 104de9356efSleetVerify Timer Action For State Change 105de9356efSleet [Documentation] Set Watchdog via IPMI raw command and verify timer actions. 10671fd671eSGeorge Keishing [Tags] Verify_Timer_Action_For_State_Change 107de9356efSleet [Template] Validate Watchdog Timer Actions And SEL Events 108de9356efSleet 109de9356efSleet # set action command power state SEL event 110df75fea6Sganesanb ${IPMI_RAW_CMD['Watchdog']['Set'][60]} ['off'] Power down 111df75fea6Sganesanb ${IPMI_RAW_CMD['Watchdog']['Set'][63]} ['on'] Hard reset 112de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][66]} ['on'] Power cycle 113de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][69]} ['on'] Timer expired 114de9356efSleet 115de9356efSleet 116de9356efSleetVerify Reset Timer 117de9356efSleet [Documentation] Set Watchdog via IPMI raw command and verify Reset Timer functions as expected. 118de9356efSleet [Tags] Verify_Reset_Timer 119de9356efSleet 120de9356efSleet # Check the chassis status. 121de9356efSleet Power On Host And Verify 122de9356efSleet 123de9356efSleet # Set Watchdog Timer initCount(0x3530). 124372cd862Sishwaryamathim Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Set'][72]} 125de9356efSleet 126de9356efSleet # Get Watchdog Timer. 127372cd862Sishwaryamathim ${resp}= Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 128de9356efSleet Should Contain ${resp} ${IPMI_RAW_CMD['Watchdog']['Get'][41]} 129de9356efSleet 130de9356efSleet @{start_timer_value}= Split String ${resp} 131de9356efSleet 132de9356efSleet # Convert start value to integer. 133de9356efSleet # Example: Get watchdog response is 0x06 0x24 0x05 0x00 0x64 0x00 0x64 0x00. 134de9356efSleet # Start_timer_value is bits 6 - 7; set to 0x64 0x00 (100 ms decimal). 135de9356efSleet # Reverse bits 6 - 7 due to BMC being little endian; new value is 0x00 0x64. 136de9356efSleet # Convert hex value 0x00 0x64 to integer; start_timer_integer = 100. 137de9356efSleet ${value}= Get Slice From List ${start_timer_value} 6 138de9356efSleet Reverse List ${value} 139de9356efSleet ${start_timer_string}= Evaluate "".join(${value}) 140de9356efSleet ${start_timer_integer} = Convert To Integer ${start_timer_string} 16 141de9356efSleet 142de9356efSleet # Delay. 143de9356efSleet Sleep ${TIMER_DELAY} 144de9356efSleet 145de9356efSleet # Get Watchdog Timer before reset watchdog timer. 146372cd862Sishwaryamathim ${resp}= Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 147de9356efSleet Should Contain ${resp} ${IPMI_RAW_CMD['Watchdog']['Get'][41]} 148de9356efSleet 149de9356efSleet FOR ${1} IN ${3} 150de9356efSleet 151de9356efSleet # Reset Watchdog Timer. 152372cd862Sishwaryamathim Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Reset'][0]} 153de9356efSleet # Delay. 154de9356efSleet Sleep ${TIMER_DELAY} 155de9356efSleet Get Watchdog Timer And Compare To Start Value ${start_timer_integer} 156de9356efSleet 157de9356efSleet END 158de9356efSleet 159de9356efSleet 160de9356efSleetVerify Pre-timeout Values 161de9356efSleet [Documentation] Set Watchdog Pre-timeout via IPMI raw command and verify via Get Watchdog Timer. 162de9356efSleet [Tags] Verify_Pre-timeout_Values 163de9356efSleet [Template] Validate Watchdog Pre-timeout 164de9356efSleet 165de9356efSleet # command response 166de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][75]} ${EMPTY} 167de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][81]} ${EMPTY} 168de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Get'][0]} ${IPMI_RAW_CMD['Watchdog']['Get'][43]} 169de9356efSleet 170de9356efSleetVerify Failure For Pre-Timeout Interval Greater Than Initial Count 171de9356efSleet [Documentation] Set Watchdog Pre-timeout via IPMI raw command and verify via Get Watchdog Timer. 172de9356efSleet [Tags] Verify_Failure_For_Pre-Timeout_Interval_Greater_Than_Initial_Count 173de9356efSleet 174de9356efSleet # Expected to fail: pre-timeout interval (4000) > initial count (1000). 175de9356efSleet Run Keyword and Expect Error *Invalid data field* 176372cd862Sishwaryamathim ... Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Set'][78]} 177de9356efSleet 178de9356efSleetVerify Invalid Request Data Length 179de9356efSleet [Documentation] Set Watchdog via IPMI raw command and verify via Get Watchdog Timer. 180de9356efSleet [Tags] Verify_Invalid_Request_Data_Length 181de9356efSleet [Template] Watchdog Invalid Request Data Length 182de9356efSleet 183de9356efSleet # command 184de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][84]} 185de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Set'][87]} 186de9356efSleet ${IPMI_RAW_CMD['Watchdog']['Get'][45]} 187de9356efSleet 188de9356efSleetVerify Invalid Reset Timer Request Data 189de9356efSleet [Documentation] Set Watchdog via IPMI raw command and verify via Get Watchdog Timer. 190de9356efSleet [Tags] Verify_Invalid_Reset_Timer_Request_Data 191de9356efSleet 192de9356efSleet # Reset Watchdog Timer with one extra byte. 193de9356efSleet Run Keyword and Expect Error *Request data length* 194372cd862Sishwaryamathim ... Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Reset'][3]} 195de9356efSleet 196de9356efSleet # Reset BMC. 197372cd862Sishwaryamathim Run IPMI Standard Command mc reset cold -N 10 -R 1 198011c5f3bSNagarjun B Wait Until Keyword Succeeds ${OPENBMC_REBOOT_TIMEOUT} min 10 sec 199011c5f3bSNagarjun B ... Is BMC Operational 200de9356efSleet 201de9356efSleet # Reset Watchdog Timer without initialized watchdog. 202de9356efSleet Run Keyword and Expect Error *Unknown* 203372cd862Sishwaryamathim ... Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Reset'][6]} 204de9356efSleet 205de9356efSleet*** Keywords *** 206de9356efSleet 207de9356efSleetExecute IPMI Raw Command And Verify Response Data After Watchdog Expires 208de9356efSleet [Documentation] Execute out of band IPMI raw command and verify response data after watchdog expires. 209de9356efSleet [Arguments] ${set_raw_cmd} ${get_raw_cmd} ${resp_expect} 210de9356efSleet # Description of argument(s): 211de9356efSleet # set_raw_cmd The request bytes for the command. 212de9356efSleet # get_raw_cmd The response bytes for the command. 213de9356efSleet # resp_expect The expected response bytes for the command. 214de9356efSleet 215372cd862Sishwaryamathim Run IPMI Command ${set_raw_cmd} 216372cd862Sishwaryamathim Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Reset'][0]} 217372cd862Sishwaryamathim Run IPMI Command ${set_raw_cmd} 218372cd862Sishwaryamathim ${resp}= Run IPMI Command ${get_raw_cmd} 219de9356efSleet Should Contain ${resp} ${resp_expect} msg=Expecting ${resp_expect} but got ${resp}. 220de9356efSleet 221de9356efSleetExecute IPMI Raw Command And Verify Response Data 222de9356efSleet [Documentation] Execute out of band IPMI raw command and verify response data. 223de9356efSleet [Arguments] ${set_raw_cmd} ${get_raw_cmd} ${resp_expect} 224de9356efSleet 225de9356efSleet # Description of argument(s): 226de9356efSleet # set_raw_cmd The request bytes for the command. 227de9356efSleet # get_raw_cmd The response bytes for the command. 228de9356efSleet # resp_expect The expected response bytes for the command. 229de9356efSleet 230372cd862Sishwaryamathim Run IPMI Command ${set_raw_cmd} 231372cd862Sishwaryamathim ${resp}= Run IPMI Command ${get_raw_cmd} 232de9356efSleet Should Contain ${resp} ${resp_expect} msg=Expecting ${resp_expect} but got ${resp}. 233de9356efSleet 234de9356efSleetExecute IPMI Raw Command And Verify Timer Expiration Data 235de9356efSleet [Documentation] Execute out of band IPMI raw command and verify timer expiration response data. 236de9356efSleet [Arguments] ${set_raw_cmd} ${get_raw_cmd} ${resp_expect} 237de9356efSleet 238de9356efSleet # Description of argument(s): 239de9356efSleet # set_raw_cmd The request bytes for the command. 240de9356efSleet # get_raw_cmd The response bytes for the command. 241de9356efSleet # resp_expect The expected response bytes for the command. 242de9356efSleet 243372cd862Sishwaryamathim Run IPMI Command ${set_raw_cmd} 244372cd862Sishwaryamathim Run IPMI Command ${get_raw_cmd} 245372cd862Sishwaryamathim Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Reset'][0]} 246372cd862Sishwaryamathim ${resp}= Run IPMI Command ${get_raw_cmd} 247de9356efSleet Should Contain ${resp} ${resp_expect} msg=Expecting ${resp_expect} but got ${resp}. 248de9356efSleet 249de9356efSleetValidate Watchdog Timer Actions And SEL Events 250de9356efSleet [Documentation] Verify the watchdog timer actions and the associated SEL events. 251de9356efSleet [Arguments] ${set_raw_cmd} ${power_state} ${sel_event} 252de9356efSleet 253de9356efSleet # Description of argument(s): 254de9356efSleet # set_raw_cmd The set timeout action request bytes for the command. 255de9356efSleet # power_state The expected power state of the host. 256de9356efSleet # sel_event The response bytes for the command. 257de9356efSleet 258de9356efSleet # Check the chassis status. 259de9356efSleet Power On Host And Verify 260de9356efSleet 261de9356efSleet # Clear SEL. 262de9356efSleet Run IPMI Standard Command sel clear 263de9356efSleet 264de9356efSleet # Set watchdog timer action to perform action. 265372cd862Sishwaryamathim Run IPMI Command ${set_raw_cmd} 266de9356efSleet 267de9356efSleet # Reset Watchdog Timer. 268372cd862Sishwaryamathim Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Reset'][0]} 269de9356efSleet 270de9356efSleet # Delay for power state. 271de9356efSleet Sleep ${POWER_STATE_CHANGE} 272de9356efSleet 273011c5f3bSNagarjun B IF '${sel_event}' == 'Hard reset' or '${sel_event}' == 'Power cycle' 274011c5f3bSNagarjun B # If timer expire action is 'Hard Reset' then the host/chassis immediately powering on after 275011c5f3bSNagarjun B # timer expires. So, verify host is rebooting by expecting that host is unpingable. 276011c5f3bSNagarjun B Run Keyword If '${sel_event}' == 'Power cycle' 277011c5f3bSNagarjun B ... Wait Until Keyword Succeeds 1 min 10 sec Verify Host Power State ['off'] 278011c5f3bSNagarjun B ... ELSE 279011c5f3bSNagarjun B ... Wait Until Keyword Succeeds 20 sec 5 sec Is Host Unpingable ${OS_HOST} 280011c5f3bSNagarjun B Wait Until Keyword Succeeds 5 min 30 sec Verify Host Power State ['on'] 281011c5f3bSNagarjun B Wait Until Keyword Succeeds 7 min 30 sec OS Execute Command uptime 282011c5f3bSNagarjun B ELSE 283011c5f3bSNagarjun B Wait Until Keyword Succeeds 1 min 20 sec Verify Host Power State ${power_state} 284011c5f3bSNagarjun B END 285011c5f3bSNagarjun B 286de9356efSleet Verify Watchdog Timer Action SEL Event ${sel_event} 287de9356efSleet 288de9356efSleet 289de9356efSleetVerify Host Power State 290de9356efSleet [Documentation] Get host power state using external IPMI command and verify. 291de9356efSleet [Arguments] ${power_state} 292de9356efSleet 293de9356efSleet # Description of argument(s): 294de9356efSleet # power_state Value of Host power state: "on" or "off". 295de9356efSleet 296de9356efSleet ${ipmi_state}= Get Host State Via External IPMI 297de9356efSleet Valid Value ipmi_state ${power_state} 298de9356efSleet 299de9356efSleetVerify Watchdog Timer Action SEL Event 300de9356efSleet [Documentation] Verify_Watchdog_Timer_Action_SEL_Event. 301de9356efSleet [Arguments] ${sel_event} 302de9356efSleet 303de9356efSleet # Description of argument(s): 304de9356efSleet # sel_event Text of SEL event after timer action. 305de9356efSleet 306de9356efSleet ${resp}= Run IPMI Standard Command sel elist 307de9356efSleet ${power_status}= Get Lines Containing String ${resp} Watchdog 308de9356efSleet Should Contain ${power_status} ${sel_event} 309de9356efSleet 310de9356efSleetPower On Host And Verify 311de9356efSleet [Documentation] Power the host on and verify. 312de9356efSleet 313de9356efSleet IPMI Power On stack_mode=skip quiet=1 314de9356efSleet ${ipmi_state}= Get Host State Via External IPMI 315de9356efSleet Valid Value ipmi_state ['on'] 316de9356efSleet 317de9356efSleetWatchdog Invalid Request Data Length 318de9356efSleet [Documentation] Verify invalid request bytes for set watchdog returns correct error. 319de9356efSleet [Arguments] ${watchdog_command} 320de9356efSleet 321de9356efSleet # Description of argument(s): 322de9356efSleet # watchdog_command The raw watchdog IPMI command request bytes. 323de9356efSleet 324de9356efSleet Run Keyword and Expect Error *Request data length* 325372cd862Sishwaryamathim ... Run IPMI Command ${watchdog_command} 326de9356efSleet 327de9356efSleetValidate Watchdog Pre-timeout 328de9356efSleet [Documentation] Verify watchdog pre-timeout valid request bytes. 329de9356efSleet [Arguments] ${watchdog_command} ${response} 330de9356efSleet 331de9356efSleet # Description of argument(s): 332de9356efSleet # watchdog_command The raw watchdog IPMI command request bytes. 333de9356efSleet # response The expected response bytes. 334de9356efSleet 335372cd862Sishwaryamathim ${resp}= Run IPMI Command ${watchdog_command} 336de9356efSleet Should Contain ${resp} ${response} 337de9356efSleet 338de9356efSleetGet Watchdog Timer And Compare To Start Value 339de9356efSleet [Documentation] Get watchdog value, convert to integer, and compare to original start value. 340de9356efSleet [Arguments] ${start_timer_integer} 341de9356efSleet 342de9356efSleet # Description of argument(s): 343de9356efSleet # start_timer_integer The initial value for the watchdog timer. 344de9356efSleet 345de9356efSleet # Get Watchdog Timer. 346372cd862Sishwaryamathim ${resp}= Run IPMI Command ${IPMI_RAW_CMD['Watchdog']['Get'][0]} 347de9356efSleet @{timer_value}= Split String ${resp} 348de9356efSleet 349de9356efSleet # Convert to integer and compare with start value. 350de9356efSleet # Example: Get watchdog response is 0x06 0x24 0x05 0x00 0x64 0x00 0x64 0x00. 351de9356efSleet # Start_timer_value is bits 6 - 7; set to 0x64 0x00 (100 ms decimal). 352de9356efSleet # Reverse bits 6 - 7 due to BMC being little endian; new value is 0x00 0x64. 353de9356efSleet # Convert hex value 0x00 0x64 to integer; start_timer_integer = 100. 354de9356efSleet ${value}= Get Slice From List ${timer_value} 6 355de9356efSleet Reverse List ${value} 356de9356efSleet ${timer_string}= Evaluate "".join(${value}) 357de9356efSleet ${current_timer_integer}= Convert To Integer ${timer_string} 16 358de9356efSleet Should Be True ${current_timer_integer} < ${start_timer_integer} 359