blob: 517ae42937d3b94f6e6ce986f886be375a3771b4 [file] [log] [blame]
Steven Sombar3468df52019-06-29 11:01:47 -05001*** 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
Steven Sombar69b87c12019-11-07 15:28:42 -060016Resource ../../lib/dump_utils.robot
George Keishinga28061a2023-12-15 14:46:54 +053017Resource ../../lib/os_utilities.robot
Steven Sombar3468df52019-06-29 11:01:47 -050018Library ../../lib/gen_cmd.py
19Library OperatingSystem
20
21
22Suite Setup Suite Setup Execution
23Suite Teardown Suite Teardown Execution
24Test Teardown Test Teardown Execution
25
Sridevi Ramesh208e2582025-09-07 01:43:30 -050026Test Tags Test_Websocket
Steven Sombar3468df52019-06-29 11:01:47 -050027
28*** Variables ***
29
Steven Sombar9686b762019-09-19 12:22:13 -050030${monitor_pgm} websocket_monitor.py
Steven Sombar3468df52019-06-29 11:01:47 -050031${monitor_file} websocket_monitor_out.txt
Steven Sombar69b87c12019-11-07 15:28:42 -060032${esel_received} eSEL received over websocket interface
33${dump_received} Dump notification received over websocket interface
Steven Sombar3468df52019-06-29 11:01:47 -050034${min_number_chars} 22
35${monitor_cmd} ${monitor_pgm} ${OPENBMC_HOST} --openbmc_username ${OPENBMC_USERNAME}
36
37
38*** Test Cases ***
39
40
Steven Sombar69b87c12019-11-07 15:28:42 -060041Test 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
Steven Sombar3468df52019-06-29 11:01:47 -050047
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
Steven Sombar69b87c12019-11-07 15:28:42 -060052 Start Websocket Monitor logging
Steven Sombar3468df52019-06-29 11:01:47 -050053
54 ${initial_esel_count}= Get Number Of Event Logs
55
56 # Generate eSEL (e.g. typically "CPU 1 core 3 has failed").
George Keishing3a5ce062025-04-03 09:37:16 +053057 Create eSEL ${RAW_PREFIX}
Steven Sombar3468df52019-06-29 11:01:47 -050058
59 ${current_esel_count}= Get Number Of Event Logs
60
George Keishing7dc48472025-05-07 20:23:47 +053061 IF ${initial_esel_count} == ${current_esel_count}
62 Fail msg=System failed to generate eSEL upon request.
63 END
Steven Sombar3468df52019-06-29 11:01:47 -050064
Steven Sombar69b87c12019-11-07 15:28:42 -060065 ${line}= Grep File ${monitor_file} ${esel_received}
Steven Sombar3468df52019-06-29 11:01:47 -050066 # 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}
George Keishing7dc48472025-05-07 20:23:47 +053073 IF ${num_chars} < ${min_number_chars}
74 Fail msg=No eSEL notification from websocket_monitor.py.
75 END
Steven Sombar3468df52019-06-29 11:01:47 -050076
77
Steven Sombar69b87c12019-11-07 15:28:42 -060078Test BMC Websocket Dump Interface
79 [Documentation] Verify dumps are reported over the websocket interface.
80 [Tags] Test_BMC_Websocket_Dump_Interface
81
Tim Lee4aff2d02021-06-08 13:26:25 +080082 Redfish Delete All BMC Dumps
Steven Sombar69b87c12019-11-07 15:28:42 -060083 Start Websocket Monitor dump
Tim Lee792e31e2021-12-10 14:10:46 +080084 ${dump_id}= Create User Initiated BMC Dump Via Redfish
Steven Sombar69b87c12019-11-07 15:28:42 -060085 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}
George Keishing7dc48472025-05-07 20:23:47 +053096 IF ${num_chars} < ${min_number_chars}
97 Fail msg=No dump notification from websocket_monitor.py.
98 END
Steven Sombar69b87c12019-11-07 15:28:42 -060099
100
Steven Sombar3468df52019-06-29 11:01:47 -0500101*** Keywords ***
102
103
104Start Websocket Monitor
105 [Documentation] Fork the monitor to run in the background.
Steven Sombar69b87c12019-11-07 15:28:42 -0600106 [Arguments] ${monitor_type}
107
108 # Description of Argument(s):
109 # monitor_type The type of websocket notifications to monitor,
110 # either "logging" or "dump".
Steven Sombar3468df52019-06-29 11:01:47 -0500111
112 # Delete the previous output file, if any.
113 Remove File ${monitor_file}
114
Steven Sombar69b87c12019-11-07 15:28:42 -0600115 ${command}= Catenate ${monitor_cmd} --openbmc_password ${OPENBMC_PASSWORD}
116 ... --monitor_type ${monitor_type} 1>${monitor_file} 2>&1
117
Steven Sombar3468df52019-06-29 11:01:47 -0500118 # Start the monitor. Fork so its a parallel task.
Steven Sombar69b87c12019-11-07 15:28:42 -0600119 Shell Cmd ${command} fork=${1}
Steven Sombar3468df52019-06-29 11:01:47 -0500120
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}
George Keishing409df052024-01-17 22:36:14 +0530134 RETURN ${pid_list}
Steven Sombar3468df52019-06-29 11:01:47 -0500135
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
George Keishing7dc48472025-05-07 20:23:47 +0530172 IF '${TEST_STATUS}' == 'FAIL' Print Websocket Monitor Log
Steven Sombar3468df52019-06-29 11:01:47 -0500173 Kill Websocket Monitor
174
Tim Lee4aff2d02021-06-08 13:26:25 +0800175 Redfish Delete All BMC Dumps
Steven Sombar69b87c12019-11-07 15:28:42 -0600176
Steven Sombar3468df52019-06-29 11:01:47 -0500177
178Suite Teardown Execution
179 [Documentation] Do the post-suite teardown.
180
181 Delete All Error Logs
182 Run Keyword and Return Status Redfish.Logout