13468df56SSteven Sombar*** Settings *** 23468df56SSteven Sombar 33468df56SSteven SombarDocumentation Websocket functionality test. 43468df56SSteven Sombar 53468df56SSteven Sombar# Test Parameters: 63468df56SSteven Sombar# OPENBMC_HOST The BMC host name or IP address. 73468df56SSteven Sombar# OPENBMC_USERNAME The username for the BMC login. 83468df56SSteven Sombar# OPENBMC_PASSWORD The password for OPENBMC_USERNAME. 93468df56SSteven Sombar# OS_HOST The OS host name or IP address. 103468df56SSteven Sombar# OS_USERNAME The username for the OS login. 113468df56SSteven Sombar# OS_PASSWORD The password for OS_USERNAME. 123468df56SSteven Sombar 133468df56SSteven SombarResource ../../lib/esel_utils.robot 143468df56SSteven SombarResource ../../lib/bmc_redfish_resource.robot 153468df56SSteven SombarResource ../../lib/logging_utils.robot 163468df56SSteven SombarLibrary ../../lib/gen_cmd.py 173468df56SSteven SombarLibrary OperatingSystem 183468df56SSteven Sombar 193468df56SSteven Sombar 203468df56SSteven SombarSuite Setup Suite Setup Execution 213468df56SSteven SombarSuite Teardown Suite Teardown Execution 223468df56SSteven SombarTest Teardown Test Teardown Execution 233468df56SSteven Sombar 243468df56SSteven Sombar 253468df56SSteven Sombar*** Variables *** 263468df56SSteven Sombar 27*9686b769SSteven Sombar${monitor_pgm} websocket_monitor.py 283468df56SSteven Sombar${monitor_file} websocket_monitor_out.txt 293468df56SSteven Sombar${expected_string} eSEL received over websocket interface 303468df56SSteven Sombar${min_number_chars} 22 313468df56SSteven Sombar${monitor_cmd} ${monitor_pgm} ${OPENBMC_HOST} --openbmc_username ${OPENBMC_USERNAME} 323468df56SSteven Sombar 333468df56SSteven Sombar 343468df56SSteven Sombar*** Test Cases *** 353468df56SSteven Sombar 363468df56SSteven Sombar 373468df56SSteven SombarTest BMC Websocket Interface 383468df56SSteven Sombar [Documentation] Verify eSELs are seen over the websocket interface. 393468df56SSteven Sombar [Tags] Test_BMC_Websocket_Interface 403468df56SSteven Sombar 413468df56SSteven Sombar # Spawn the websocket monitor program and then generate an eSEL. 423468df56SSteven Sombar # The monitor should asynchronously receive the eSEL through the 433468df56SSteven Sombar # websocket interface and report this fact to standard output. 443468df56SSteven Sombar 453468df56SSteven Sombar Start Websocket Monitor 463468df56SSteven Sombar 473468df56SSteven Sombar ${initial_esel_count}= Get Number Of Event Logs 483468df56SSteven Sombar 493468df56SSteven Sombar # Generate eSEL (e.g. typically "CPU 1 core 3 has failed"). 503468df56SSteven Sombar Create eSEL 513468df56SSteven Sombar 523468df56SSteven Sombar ${current_esel_count}= Get Number Of Event Logs 533468df56SSteven Sombar 543468df56SSteven Sombar Run Keyword If ${initial_esel_count} == ${current_esel_count} 553468df56SSteven Sombar ... Fail msg=System failed to generate eSEL upon request. 563468df56SSteven Sombar 573468df56SSteven Sombar ${line}= Grep File ${monitor_file} ${expected_string} 583468df56SSteven Sombar # Typical monitor_file contents: 593468df56SSteven Sombar # --------------- ON_MESSAGE:begin -------------------- 603468df56SSteven Sombar # {"event":"PropertiesChanged","interface":"xyz.openbmc_project.Logging. 613468df56SSteven Sombar # Entry","path":"/xyz/openbmc_project/logging/entry/5","properties":{"Id":5}} 623468df56SSteven Sombar # eSEL received over websocket interface. 633468df56SSteven Sombar 643468df56SSteven Sombar ${num_chars}= Get Length ${line} 653468df56SSteven Sombar Run Keyword If ${num_chars} < ${min_number_chars} Fail 663468df56SSteven Sombar ... msg=No eSEL notification from websocket_monitor.py. 673468df56SSteven Sombar 683468df56SSteven Sombar 693468df56SSteven Sombar*** Keywords *** 703468df56SSteven Sombar 713468df56SSteven Sombar 723468df56SSteven SombarStart Websocket Monitor 733468df56SSteven Sombar [Documentation] Fork the monitor to run in the background. 743468df56SSteven Sombar 753468df56SSteven Sombar # Delete the previous output file, if any. 763468df56SSteven Sombar Remove File ${monitor_file} 773468df56SSteven Sombar 783468df56SSteven Sombar # Start the monitor. Fork so its a parallel task. 793468df56SSteven Sombar Shell Cmd 803468df56SSteven Sombar ... ${monitor_cmd} --openbmc_password ${OPENBMC_PASSWORD} 1>${monitor_file} 2>&1 fork=${1} 813468df56SSteven Sombar 823468df56SSteven Sombar # Allow time for the monitor to initialize. 833468df56SSteven Sombar Sleep 5s 843468df56SSteven Sombar 853468df56SSteven Sombar 863468df56SSteven SombarFind Websocket Monitor 873468df56SSteven Sombar [Documentation] Return the process Id(s) of running websocket monitors. 883468df56SSteven Sombar 893468df56SSteven Sombar ${cmd}= Catenate ps -ef | grep '${monitor_cmd}' 903468df56SSteven Sombar ... | grep -v grep | grep -v bash | cut -c10-14 913468df56SSteven Sombar ${shell_rc} ${pid}= Shell Cmd ${cmd} 923468df56SSteven Sombar # There may be more than one pid returned if there is an instance 933468df56SSteven Sombar # of a monitory_pgm running from a previous run. 943468df56SSteven Sombar @{pid_list}= Split String ${pid} 953468df56SSteven Sombar [Return] ${pid_list} 963468df56SSteven Sombar 973468df56SSteven Sombar 983468df56SSteven SombarKill Websocket Monitor 993468df56SSteven Sombar [Documentation] Terminate running websocket monitor. 1003468df56SSteven Sombar 1013468df56SSteven Sombar ${pid_list}= Find Websocket Monitor 1023468df56SSteven Sombar FOR ${pid} IN @{pid_list} 1033468df56SSteven Sombar Shell Cmd kill -s SIGTERM ${pid} 1043468df56SSteven Sombar END 1053468df56SSteven Sombar 1063468df56SSteven Sombar 1073468df56SSteven SombarPrint Websocket Monitor Log 1083468df56SSteven Sombar [Documentation] Show the contents of the monitor output file. 1093468df56SSteven Sombar 1103468df56SSteven Sombar ${websocket_monitor_log}= OperatingSystem.Get File ${monitor_file} 1113468df56SSteven Sombar Log to Console websocket_monitor_log: 1123468df56SSteven Sombar Log to Console ${websocket_monitor_log} 1133468df56SSteven Sombar 1143468df56SSteven Sombar 1153468df56SSteven SombarSuite Setup Execution 1163468df56SSteven Sombar [Documentation] Do the suite setup tasks. 1173468df56SSteven Sombar 1183468df56SSteven Sombar Run Keyword Redfish Power On stack_mode=skip 1193468df56SSteven Sombar 1203468df56SSteven Sombar Redfish.Login 1213468df56SSteven Sombar 1223468df56SSteven Sombar Delete All Error Logs 1233468df56SSteven Sombar Kill Websocket Monitor 1243468df56SSteven Sombar 1253468df56SSteven Sombar # Allow time for Error Logs to be deleted. 1263468df56SSteven Sombar Sleep 5s 1273468df56SSteven Sombar 1283468df56SSteven Sombar 1293468df56SSteven SombarTest Teardown Execution 1303468df56SSteven Sombar [Documentation] Do teardown tasks after a test. 1313468df56SSteven Sombar 1323468df56SSteven Sombar FFDC On Test Case Fail 1333468df56SSteven Sombar Run Keyword If '${TEST_STATUS}' == 'FAIL' Print Websocket Monitor Log 1343468df56SSteven Sombar Kill Websocket Monitor 1353468df56SSteven Sombar 1363468df56SSteven Sombar 1373468df56SSteven SombarSuite Teardown Execution 1383468df56SSteven Sombar [Documentation] Do the post-suite teardown. 1393468df56SSteven Sombar 1403468df56SSteven Sombar Delete All Error Logs 1413468df56SSteven Sombar Run Keyword and Return Status Redfish.Logout 142