blob: ddfc3ff05735a6f7b27ef1901565e95e0f35ab26 [file] [log] [blame]
George Keishing6a514ef2018-08-27 05:19:19 -05001*** Settings ***
2Documentation Remote logging test for rsyslog.
3
4# Program arguments:
5# REMOTE_LOG_SERVER_HOST The host name or IP address of the remote
George Keishing67133672018-08-31 10:23:15 -05006# logging server.
George Keishing6a514ef2018-08-27 05:19:19 -05007# REMOTE_LOG_SERVER_PORT The port number for the remote logging server.
George Keishing67133672018-08-31 10:23:15 -05008# REMOTE_USERNAME The username for the remote logging server.
9# REMOTE_PASSWORD The password for the remote logging server.
George Keishing6a514ef2018-08-27 05:19:19 -050010
George Keishing76a5daf2018-09-14 06:00:01 -050011Library String
George Keishing6a514ef2018-08-27 05:19:19 -050012Resource ../lib/openbmc_ffdc.robot
George Keishing76a5daf2018-09-14 06:00:01 -050013Resource ../lib/boot_utils.robot
George Keishingbbfc3942018-09-19 10:15:48 -050014Resource ../lib/remote_logging_utils.robot
George Keishing9a0d4802018-08-31 13:29:40 -050015Library ../lib/gen_misc.py
George Keishing6a514ef2018-08-27 05:19:19 -050016
17Suite Setup Suite Setup Execution
George Keishing216e5842018-08-31 14:58:15 -050018Test Setup Test Setup Execution
George Keishing6a514ef2018-08-27 05:19:19 -050019Test Teardown FFDC On Test Case Fail
20
George Keishing2cec1862018-09-03 12:59:25 -050021*** Variables ***
22
George Keishingc1ca5e92018-09-03 11:19:23 -050023# Strings to check from journald.
George Keishing13451ed2018-09-06 12:46:16 -050024${BMC_STOP_MSG} Stopping Phosphor IPMI BT DBus Bridge
25${BMC_START_MSG} Starting Flush Journal to Persistent Storage
26${BMC_BOOT_MSG} Startup finished in
27${BMC_SYSLOG_REGEX} dropbear|vrm-control.sh
George Keishingeacb1882018-09-20 00:11:00 -050028${RSYSLOG_REGEX} start|exiting on signal 15|there are no active actions configured
George Keishing13451ed2018-09-06 12:46:16 -050029${RSYSLOG_RETRY_REGEX} suspended, next retry
George Keishingc1ca5e92018-09-03 11:19:23 -050030
George Keishing6a514ef2018-08-27 05:19:19 -050031*** Test Cases ***
32
George Keishingeb9fc592018-09-18 07:58:17 -050033Test BMC Hostname Service And Verify
34 [Documentation] Write to hostname interface and verify via REST and
35 ... 'hostname' command.
36 [Tags] Test_BMC_Hostname_Service_And_Verify
37
38 ${openbmc_host_name} ${openbmc_ip} ${openbmc_short_name}=
39 ... Get Host Name IP host=${OPENBMC_HOST} short_name=1
40
41 ${host_name_dict}= Create Dictionary data=${openbmc_short_name}
42 Write Attribute ${NETWORK_MANAGER}config HostName data=${host_name_dict}
43 ... verify=${TRUE} expected_value=${openbmc_short_name}
44
45 ${hostname} ${stderr} ${rc}= BMC Execute Command hostname
46
47 Should Be Equal As Strings ${hostname} ${openbmc_short_name}
48 ... msg=The hostname interface ${openbmc_short_name} and command value ${hostname} do not match.
49
50 # Override the suite hostname variable if this test is executed.
51 Set Suite Variable ${bmc_hostname} ${openbmc_short_name}
52
53
George Keishing13a64e62018-09-10 13:07:36 -050054Verify REST Logging On BMC Journal When Disabled
55 [Documentation] Enable REST logging and verify from journald.
George Keishingb77a3572018-09-13 23:26:28 -050056 [Tags] Verify_REST_Logging_On_BMC_Journal_When_Disabled
George Keishing13a64e62018-09-10 13:07:36 -050057
58 ${log_dict}= Create Dictionary data=${False}
59 Write Attribute ${BMC_LOGGING_URI}${/}rest_api_logs Enabled data=${log_dict}
60 ... verify=${True} expected_value=${False}
61
George Keishingeacb1882018-09-20 00:11:00 -050062 # If it was enabled prior, this REST footprint will show up.
63 # Takes around 5 seconds for the REST to restart service when policy is changed.
64 Sleep 10s
65
George Keishing6218e762018-10-06 13:14:36 -050066 ${login_footprint}= Catenate login json:None 200 OK
George Keishing4df837f2018-09-19 14:06:01 -050067 # Example: Just get the message part of the syslog
George Keishing6218e762018-10-06 13:14:36 -050068 # user:root POST http://xx.xx.xx.xx/login json:None 200 OK
George Keishing4df837f2018-09-19 14:06:01 -050069 ${cmd}= Catenate SEPARATOR= --no-pager | egrep '${login_footprint}'
70 ... | awk -F': ' '{print $2}'
71
72 Start Journal Log filter=${cmd}
George Keishing13a64e62018-09-10 13:07:36 -050073 Initialize OpenBMC
George Keishing4df837f2018-09-19 14:06:01 -050074 Sleep 5s
75 ${bmc_journald}= Stop Journal Log
George Keishing13a64e62018-09-10 13:07:36 -050076
George Keishing4df837f2018-09-19 14:06:01 -050077 Should Be Empty ${bmc_journald}
George Keishing13a64e62018-09-10 13:07:36 -050078 ... msg=${bmc_journald} contains unexpected REST entries.
79
80
George Keishingb77a3572018-09-13 23:26:28 -050081Verify REST Logging On BMC Journal When Enabled
George Keishing13a64e62018-09-10 13:07:36 -050082 [Documentation] Enable REST logging and verify from journald.
George Keishingb77a3572018-09-13 23:26:28 -050083 [Tags] Verify_REST_Logging_On_BMC_Journal_When_Enabled
George Keishing13a64e62018-09-10 13:07:36 -050084
85 ${log_dict}= Create Dictionary data=${True}
86 Write Attribute ${BMC_LOGGING_URI}${/}rest_api_logs Enabled data=${log_dict}
87 ... verify=${True} expected_value=${True}
88
George Keishing13a64e62018-09-10 13:07:36 -050089 Initialize OpenBMC
George Keishing6218e762018-10-06 13:14:36 -050090 Log Out OpenBMC
George Keishing13a64e62018-09-10 13:07:36 -050091
92 ${bmc_journald} ${stderr} ${rc}= BMC Execute Command
93 ... journalctl --no-pager
94
George Keishing6218e762018-10-06 13:14:36 -050095 Should Contain ${bmc_journald} login json:None 200 OK
George Keishing13a64e62018-09-10 13:07:36 -050096 ... msg=${bmc_journald} doesn't contains REST entries.
97
98
George Keishing38733f32018-09-20 05:56:50 -050099Test Remote API Valid Config Combination
100 [Documentation] Verify valid combination of address and port.
101 [Tags] Test_Remote_API_Valid_Config_Combination
102 [Template] Verify Configure Remote Logging Server
103 # Forego normal test setup:
104 [Setup] No Operation
105
106 # Address Port Expected result
107 ${EMPTY} ${REMOTE_LOG_SERVER_PORT} ${True}
108 ${REMOTE_LOG_SERVER_HOST} ${REMOTE_LOG_SERVER_PORT} ${True}
George Keishing38733f32018-09-20 05:56:50 -0500109 ${REMOTE_LOG_SERVER_HOST} ${0} ${True}
110
111
112Test Remote API Invalid Config Combination
113 [Documentation] Verify invalid combination of address and port.
114 [Tags] Test_Remote_API_Invalid_Config_Combination
115 [Template] Verify Configure Remote Logging Server
116 # Forego normal test setup:
117 [Setup] No Operation
118
119 # Address Port Expected result
120 ${0} ${REMOTE_LOG_SERVER_PORT} ${False}
121 "0" ${REMOTE_LOG_SERVER_PORT} ${False}
122 ${REMOTE_LOG_SERVER_HOST} ${EMPTY} ${False}
123 ${REMOTE_LOG_SERVER_HOST} "0" ${False}
124
125
George Keishing6a514ef2018-08-27 05:19:19 -0500126Test Remote Logging REST Interface And Verify Config
127 [Documentation] Test remote logging interface and configuration.
128 [Tags] Test_Remote_Logging_REST_Interface_And_Verify_Config
129
George Keishing6a514ef2018-08-27 05:19:19 -0500130 Verify Rsyslog Config On BMC
131
George Keishingbbfc3942018-09-19 10:15:48 -0500132 Configure Remote Log Server With Parameters remote_host=${EMPTY} remote_port=0
George Keishing6a514ef2018-08-27 05:19:19 -0500133 Verify Rsyslog Config On BMC remote_host=remote-host remote_port=port
134
135
George Keishing13451ed2018-09-06 12:46:16 -0500136Test Remote Logging Invalid Port Config And Verify BMC Journald
137 [Documentation] Test remote logging interface and configuration.
138 [Tags] Test_Remote_Logging_Invalid_Port_Config_And_Verify_BMC_Journald
139
140 # Invalid port derived by (REMOTE_LOG_SERVER_PORT + 1) port config setting.
141 ${INVALID_PORT}= Evaluate ${REMOTE_LOG_SERVER_PORT} + ${1}
George Keishingbbfc3942018-09-19 10:15:48 -0500142 Configure Remote Log Server With Parameters
George Keishing13451ed2018-09-06 12:46:16 -0500143 ... remote_host=${REMOTE_LOG_SERVER_HOST} remote_port=${INVALID_PORT}
144
145 Sleep 3s
George Keishing96904c42018-09-20 09:25:30 -0500146 # rsyslogd[1870]: action 'action 0' suspended, next retry is Fri Sep 14 05:47:39 2018 [v8.29.0 try http://www.rsyslog.com/e/2007 ]
George Keishing13451ed2018-09-06 12:46:16 -0500147 ${bmc_journald} ${stderr} ${rc}= BMC Execute Command
148 ... journalctl -b --no-pager | egrep 'rsyslog.*${RSYSLOG_RETRY_REGEX}'
149
150 Should Contain ${bmc_journald} ${RSYSLOG_RETRY_REGEX}
151 ... msg=${bmc_journald} doesn't contain rsyslog retry entries.
152
153
George Keishing67133672018-08-31 10:23:15 -0500154Verfiy BMC Journald Synced To Remote Logging Server
155 [Documentation] Check that BMC journald is sync to remote rsyslog.
156 [Tags] Verfiy_BMC_Journald_Synced_To_Remote_Logging_Server
157
George Keishing67133672018-08-31 10:23:15 -0500158 # Restart BMC dump service and get the last entry of the journald.
159 # Example:
George Keishing96904c42018-09-20 09:25:30 -0500160 # systemd[1]: Started Phosphor Dump Manager.
George Keishing67133672018-08-31 10:23:15 -0500161 BMC Execute Command
162 ... systemctl restart xyz.openbmc_project.Dump.Manager.service
163
164 ${bmc_journald} ${stderr} ${rc}= BMC Execute Command
George Keishing82ea1d42018-09-11 13:45:36 -0500165 ... journalctl --no-pager | grep 'Started Phosphor Dump Manager'
George Keishing67133672018-08-31 10:23:15 -0500166
George Keishing96904c42018-09-20 09:25:30 -0500167 # systemd[1]: Started Phosphor Dump Manager.
George Keishing82ea1d42018-09-11 13:45:36 -0500168 ${cmd}= Catenate SEPARATOR= egrep '${bmc_hostname}.*Started Phosphor Dump Manager' /var/log/syslog
George Keishing67133672018-08-31 10:23:15 -0500169 ${remote_journald}= Remote Logging Server Execute Command command=${cmd}
170
George Keishing216e5842018-08-31 14:58:15 -0500171 # TODO: rsyslog configuration and time date template to match BMC journald.
172 # Compare the BMC journlad log. Example:
173 # systemd[1]: Started Phosphor Dump Manager.
George Keishing82ea1d42018-09-11 13:45:36 -0500174 Should Contain ${remote_journald} ${bmc_journald.split('${bmc_hostname}')[1][0]}
George Keishing216e5842018-08-31 14:58:15 -0500175 ... msg= ${bmc_journald} doesn't match remote rsyslog:${remote_journald}.
George Keishing67133672018-08-31 10:23:15 -0500176
177
George Keishing2cec1862018-09-03 12:59:25 -0500178Verify Journald Post BMC Reset
179 [Documentation] Check that BMC journald is sync'ed to remote rsyslog after
180 ... BMC reset.
181 [Tags] Verify_Journald_Post_BMC_Reset
182
183 ${hostname} ${stderr} ${rc}= BMC Execute Command hostname
184 OBMC Reboot (off)
185
186 ${cmd}= Catenate grep ${hostname} /var/log/syslog |
187 ... egrep '${BMC_STOP_MSG}|${BMC_START_MSG}|${BMC_BOOT_MSG}'
188 ${remote_journald}= Remote Logging Server Execute Command command=${cmd}
189
190 # 1. Last reboot message to verify.
191 Should Contain ${remote_journald} ${BMC_STOP_MSG}
192 ... msg=The remote journald doesn't contain the IPMI shutdown message: ${BMC_STOP_MSG}.
193
194 # 2. Earliest booting message on journald.
195 Should Contain ${remote_journald} ${BMC_START_MSG}
196 ... msg=The remote journald doesn't contain the start message: ${BMC_START_MSG}.
197
198 # 3. Unique boot to standby message.
199 # Startup finished in 9.961s (kernel) + 1min 59.039s (userspace) = 2min 9.000s
200 ${bmc_journald} ${stderr} ${rc}= BMC Execute Command
George Keishing6218e762018-10-06 13:14:36 -0500201 ... journalctl -b --no-pager | egrep '${BMC_BOOT_MSG}'
George Keishing2cec1862018-09-03 12:59:25 -0500202
203 Should Contain ${remote_journald}
204 ... ${bmc_journald.split('${hostname}')[1]}
205 ... msg=The remote journald doesn't contain the boot message: ${BMC_BOOT_MSG}.
206
207
George Keishingcc18f7c2018-09-03 09:40:11 -0500208Verify BMC Journald Contains No Credential Data
George Keishingcb3b9b62018-09-14 12:11:19 -0500209 [Documentation] Check that BMC journald doesn't log any credential data.
George Keishingcc18f7c2018-09-03 09:40:11 -0500210 [Tags] Verify_BMC_Journald_Contains_No_Credential_Data
211
212 Open Connection And Log In
213 ${bmc_journald} ${stderr} ${rc}= BMC Execute Command
214 ... journalctl -o json-pretty | cat
215
216 Should Not Contain Any ${bmc_journald} ${OPENBMC_PASSWORD}
217 ... msg=Journald logs BMC credentials/password ${OPENBMC_PASSWORD}.
218
219
George Keishing9a0d4802018-08-31 13:29:40 -0500220Audit BMC SSH Login And Remote Logging
221 [Documentation] Check that the SSH login to BMC is logged and synced to
222 ... remote logging server.
223 [Tags] Audit_BMC_SSH_Login_And_Remote_Logging
224
George Keishingaef483e2018-09-19 07:57:22 -0500225 ${login_footprint}= Catenate Started SSH Per-Connection Server
226 # Example: Just get the message part of the syslog
227 # Started SSH Per-Connection Server (xx.xx.xx.xx:51292)
228 ${cmd}= Catenate SEPARATOR= --no-pager | egrep '${login_footprint}'
229 ... | awk -F': ' '{print $2}'
George Keishing9a0d4802018-08-31 13:29:40 -0500230
George Keishingaef483e2018-09-19 07:57:22 -0500231 Start Journal Log filter=${cmd}
George Keishing9a0d4802018-08-31 13:29:40 -0500232 Open Connection And Log In
George Keishingaef483e2018-09-19 07:57:22 -0500233 Sleep 5s
234 ${bmc_journald}= Stop Journal Log
235 @{ssh_entry}= Split To Lines ${bmc_journald}
George Keishing9a0d4802018-08-31 13:29:40 -0500236
George Keishingaef483e2018-09-19 07:57:22 -0500237 ${cmd}= Catenate SEPARATOR= egrep -E '*${bmc_hostname}.*${login_footprint}' /var/log/syslog
George Keishing9a0d4802018-08-31 13:29:40 -0500238
239 ${remote_journald}= Remote Logging Server Execute Command command=${cmd}
240
George Keishingaef483e2018-09-19 07:57:22 -0500241 Should Contain ${remote_journald} ${ssh_entry[0]}
George Keishing9a0d4802018-08-31 13:29:40 -0500242 ... msg=${remote_journald} don't contain ${bmc_journald} entry.
243
244
George Keishing6218e762018-10-06 13:14:36 -0500245Verify Rsyslog Does Not Log On BMC
246 [Documentation] Check that rsyslog journald doesn't log on BMC.
247 [Tags] Verify_Rsyslog_Does_Not_Log_On_BMC
248
249 # Expected filter rsyslog entries.
250 # Example:
251 # syslogd[3356]: [origin software="rsyslogd" swVersion="8.29.0" x-pid="3356" x-info="http://www.rsyslog.com"] exiting on signal 15.
252 # rsyslogd[3364]: [origin software="rsyslogd" swVersion="8.29.0" x-pid="3364" x-info="http://www.rsyslog.com"] start
253 ${bmc_journald} ${stderr} ${rc}= BMC Execute Command
254 ... journalctl -b --no-pager | egrep 'rsyslog' | egrep -Ev '${RSYSLOG_REGEX}|${RSYSLOG_RETRY_REGEX}'
255 ... ignore_err=${1}
256
257 Should Be Empty ${bmc_journald}
258 ... msg=${bmc_journald} contains unexpected rsyslog entries.
259
260
George Keishing76a5daf2018-09-14 06:00:01 -0500261Boot Host And Verify Data Is Synced To Remote Server
262 [Documentation] Boot host and verify the power on sequence logs are synced
263 ... to remote logging server.
264 [Tags] Boot_Host_And_Verify_Data_Is_Synced_To_Remote_Server
265
George Keishing307c3fa2018-10-25 11:43:23 -0500266 # Filter kernel dmesg from the journald log.
267 # Example: xx.xx.xx kernel:
268
269 ${openbmc_host_name} ${openbmc_ip} ${openbmc_short_name}=
270 ... Get Host Name IP host=${OPENBMC_HOST} short_name=1
271
272 ${cmd}= Catenate SEPARATOR= --no-pager | egrep -Ev '${BMC_SYSLOG_REGEX}
273 ... |${openbmc_short_name} kernel' | awk -F': ' '{print $2}'
George Keishing76a5daf2018-09-14 06:00:01 -0500274
275 # Example: Just get the message part of the syslog
276 # Started OpenPOWER OCC Active Disable.
277 Start Journal Log filter=${cmd}
278
279 # Irrespective of the outcome, the journald should be synced.
280 Run Keyword And Ignore Error REST Power On
281 ${bmc_journald}= Stop Journal Log
282
283 ${cmd}= Catenate SEPARATOR= egrep '${bmc_hostname}' /var/log/syslog
284 ${remote_journald}= Remote Logging Server Execute Command command=${cmd}
285
286 @{lines}= Split To Lines ${bmc_journald}
George Keishing307c3fa2018-10-25 11:43:23 -0500287
George Keishing76a5daf2018-09-14 06:00:01 -0500288 :FOR ${line} IN @{lines}
289 \ Log To Console \n ${line}
290 \ Should Contain ${remote_journald} ${line}
291 ... mgs=${line} line doesn't contain in ${remote_journald}.
292
293
George Keishing6a514ef2018-08-27 05:19:19 -0500294*** Keywords ***
295
296Suite Setup Execution
297 [Documentation] Do the suite setup.
298
299 Should Not Be Empty ${REMOTE_LOG_SERVER_HOST}
300 Should Not Be Empty ${REMOTE_LOG_SERVER_PORT}
George Keishing67133672018-08-31 10:23:15 -0500301 Should Not Be Empty ${REMOTE_USERNAME}
302 Should Not Be Empty ${REMOTE_PASSWORD}
George Keishing6a514ef2018-08-27 05:19:19 -0500303 Ping Host ${REMOTE_LOG_SERVER_HOST}
George Keishing67133672018-08-31 10:23:15 -0500304 Remote Logging Server Execute Command true
George Keishing6a514ef2018-08-27 05:19:19 -0500305 Remote Logging Interface Should Exist
306
George Keishing216e5842018-08-31 14:58:15 -0500307 ${hostname} ${stderr} ${rc}= BMC Execute Command /bin/hostname
308 Set Suite Variable ${bmc_hostname} ${hostname}
George Keishingbbfc3942018-09-19 10:15:48 -0500309 Configure Remote Log Server With Parameters
George Keishing216e5842018-08-31 14:58:15 -0500310
311
312Test Setup Execution
313 [Documentation] Do the test setup.
314
George Keishingb77a3572018-09-13 23:26:28 -0500315 # Retain only the past 1 second log:
316 BMC Execute Command journalctl --vacuum-time=1s
George Keishing13a64e62018-09-10 13:07:36 -0500317
318 ${config_status}= Run Keyword And Return Status
George Keishing216e5842018-08-31 14:58:15 -0500319 ... Get Remote Log Server Configured
320
George Keishingbbfc3942018-09-19 10:15:48 -0500321 Run Keyword If ${config_status}==${FALSE}
322 ... Configure Remote Log Server With Parameters
George Keishing216e5842018-08-31 14:58:15 -0500323
324 ${ActiveState}= Get Service Attribute ActiveState rsyslog.service
325 Should Be Equal active ${ActiveState}
326 ... msg=rsyslog logging service not in active state.
327
George Keishing6a514ef2018-08-27 05:19:19 -0500328
329Remote Logging Interface Should Exist
330 [Documentation] Check that the remote logging URI exist.
331
332 ${resp}= OpenBMC Get Request ${REMOTE_LOGGING_URI}
333 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
George Keishing38733f32018-09-20 05:56:50 -0500334
335
336Verify Configure Remote Logging Server
337 [Documentation] Configure the remote logging REST interface on BMC.
338 [Arguments] ${remote_host} ${remote_port} ${expectation}
339
340 # Description of argument(s):
341 # remote_host The host name or IP address of the remote logging server
342 # (e.g. "xx.xx.xx.xx").
343 # remote_port Remote ryslog server port number (e.g. "514").
344 # expectation Expect boolean True/False.
345
346
347 ${status}= Run Keyword And Return Status
George Keishingccd6d092018-09-21 00:39:43 -0500348 ... Configure Remote Log Server With Parameters remote_host=${remote_host} remote_port=${remote_port}
George Keishing38733f32018-09-20 05:56:50 -0500349
350 Should Be Equal ${status} ${expectation}
351 ... msg=Test result ${status} and expectation ${expectation} do not match.