1*** Settings *** 2 3Documentation Websocket functionality test. 4 5# Test Parameters: 6# OPENBMC_HOST The BMC host name or IP address. 7# OPENBMC_USERNAME The username for the BMC login. 8# OPENBMC_PASSWORD The password for OPENBMC_USERNAME. 9# OS_HOST The OS host name or IP address. 10# OS_USERNAME The username for the OS login. 11# OS_PASSWORD The password for OS_USERNAME. 12 13Resource ../../lib/esel_utils.robot 14Resource ../../lib/bmc_redfish_resource.robot 15Resource ../../lib/logging_utils.robot 16Resource ../../lib/dump_utils.robot 17Resource ../../lib/os_utilities.robot 18Library ../../lib/gen_cmd.py 19Library OperatingSystem 20 21 22Suite Setup Suite Setup Execution 23Suite Teardown Suite Teardown Execution 24Test Teardown Test Teardown Execution 25 26Test Tags Test_Websocket 27 28*** Variables *** 29 30${monitor_pgm} websocket_monitor.py 31${monitor_file} websocket_monitor_out.txt 32${esel_received} eSEL received over websocket interface 33${dump_received} Dump notification received over websocket interface 34${min_number_chars} 22 35${monitor_cmd} ${monitor_pgm} ${OPENBMC_HOST} --openbmc_username ${OPENBMC_USERNAME} 36 37 38*** Test Cases *** 39 40 41Test BMC Websocket ESEL Interface 42 [Documentation] Verify eSELs are reported over the websocket interface. 43 [Tags] Test_BMC_Websocket_ESEL_Interface 44 45 # Check that the ipmitool is available. That tool is used to create an eSEL. 46 Tool Exist ipmitool 47 48 # Spawn the websocket monitor program and then generate an eSEL. 49 # The monitor should asynchronously receive the eSEL through the 50 # websocket interface and report this fact to standard output. 51 52 Start Websocket Monitor logging 53 54 ${initial_esel_count}= Get Number Of Event Logs 55 56 # Generate eSEL (e.g. typically "CPU 1 core 3 has failed"). 57 Create eSEL ${RAW_PREFIX} 58 59 ${current_esel_count}= Get Number Of Event Logs 60 61 IF ${initial_esel_count} == ${current_esel_count} 62 Fail msg=System failed to generate eSEL upon request. 63 END 64 65 ${line}= Grep File ${monitor_file} ${esel_received} 66 # Typical monitor_file contents: 67 # --------------- ON_MESSAGE:begin -------------------- 68 # {"event":"PropertiesChanged","interface":"xyz.openbmc_project.Logging. 69 # Entry","path":"/xyz/openbmc_project/logging/entry/5","properties":{"Id":5}} 70 # eSEL received over websocket interface. 71 72 ${num_chars}= Get Length ${line} 73 IF ${num_chars} < ${min_number_chars} 74 Fail msg=No eSEL notification from websocket_monitor.py. 75 END 76 77 78Test BMC Websocket Dump Interface 79 [Documentation] Verify dumps are reported over the websocket interface. 80 [Tags] Test_BMC_Websocket_Dump_Interface 81 82 Redfish Delete All BMC Dumps 83 Start Websocket Monitor dump 84 ${dump_id}= Create User Initiated BMC Dump Via Redfish 85 Check Existence Of BMC Dump File ${dump_id} 86 87 # Check that the monitor received notification of the dump. 88 ${line}= Grep File ${monitor_file} ${dump_received} 89 # Typical monitor_file contents: 90 # --------------- ON_MESSAGE:begin -------------------- 91 # {"event":"PropertiesChanged","interface":"xyz.openbmc_project.Dump. 92 # Entry","path":"/xyz/openbmc_project/dump/entry/1","properties":{"Size":157888}} 93 # Dump notification received over websocket interface. 94 95 ${num_chars}= Get Length ${line} 96 IF ${num_chars} < ${min_number_chars} 97 Fail msg=No dump notification from websocket_monitor.py. 98 END 99 100 101*** Keywords *** 102 103 104Start Websocket Monitor 105 [Documentation] Fork the monitor to run in the background. 106 [Arguments] ${monitor_type} 107 108 # Description of Argument(s): 109 # monitor_type The type of websocket notifications to monitor, 110 # either "logging" or "dump". 111 112 # Delete the previous output file, if any. 113 Remove File ${monitor_file} 114 115 ${command}= Catenate ${monitor_cmd} --openbmc_password ${OPENBMC_PASSWORD} 116 ... --monitor_type ${monitor_type} 1>${monitor_file} 2>&1 117 118 # Start the monitor. Fork so its a parallel task. 119 Shell Cmd ${command} fork=${1} 120 121 # Allow time for the monitor to initialize. 122 Sleep 5s 123 124 125Find Websocket Monitor 126 [Documentation] Return the process Id(s) of running websocket monitors. 127 128 ${cmd}= Catenate ps -ef | grep '${monitor_cmd}' 129 ... | grep -v grep | grep -v bash | cut -c10-14 130 ${shell_rc} ${pid}= Shell Cmd ${cmd} 131 # There may be more than one pid returned if there is an instance 132 # of a monitory_pgm running from a previous run. 133 @{pid_list}= Split String ${pid} 134 RETURN ${pid_list} 135 136 137Kill Websocket Monitor 138 [Documentation] Terminate running websocket monitor. 139 140 ${pid_list}= Find Websocket Monitor 141 FOR ${pid} IN @{pid_list} 142 Shell Cmd kill -s SIGTERM ${pid} 143 END 144 145 146Print Websocket Monitor Log 147 [Documentation] Show the contents of the monitor output file. 148 149 ${websocket_monitor_log}= OperatingSystem.Get File ${monitor_file} 150 Log to Console websocket_monitor_log: 151 Log to Console ${websocket_monitor_log} 152 153 154Suite Setup Execution 155 [Documentation] Do the suite setup tasks. 156 157 Run Keyword Redfish Power On stack_mode=skip 158 159 Redfish.Login 160 161 Delete All Error Logs 162 Kill Websocket Monitor 163 164 # Allow time for Error Logs to be deleted. 165 Sleep 5s 166 167 168Test Teardown Execution 169 [Documentation] Do teardown tasks after a test. 170 171 FFDC On Test Case Fail 172 IF '${TEST_STATUS}' == 'FAIL' Print Websocket Monitor Log 173 Kill Websocket Monitor 174 175 Redfish Delete All BMC Dumps 176 177 178Suite Teardown Execution 179 [Documentation] Do the post-suite teardown. 180 181 Delete All Error Logs 182 Run Keyword and Return Status Redfish.Logout 183