5 AT_SKIP_IF([test $2 = no])
6 AT_CAPTURE_FILE([log_file])
7 AT_CAPTURE_FILE([stderr_log])
8 AT_CHECK([$3 $srcdir/test-vlog.py --log-file log_file \
9 -v dbg module_1:info module_2:warn syslog:off 2>stderr_log])
11 AT_CHECK([sed -e 's/.*-.*-.*T..:..:..Z |//' \
12 -e 's/File ".*", line [[0-9]][[0-9]]*,/File <name>, line <number>,/' \
13 stderr_log], [0], [dnl
14 0 | module_0 | EMER | emergency
15 1 | module_0 | ERR | error
16 2 | module_0 | WARN | warning
17 3 | module_0 | INFO | information
18 4 | module_0 | DBG | debug
19 5 | module_0 | EMER | emergency exception
20 Traceback (most recent call last):
21 File <name>, line <number>, in main
24 6 | module_0 | ERR | error exception
25 Traceback (most recent call last):
26 File <name>, line <number>, in main
29 7 | module_0 | WARN | warn exception
30 Traceback (most recent call last):
31 File <name>, line <number>, in main
34 8 | module_0 | INFO | information exception
35 Traceback (most recent call last):
36 File <name>, line <number>, in main
39 9 | module_0 | DBG | debug exception
40 Traceback (most recent call last):
41 File <name>, line <number>, in main
44 10 | module_0 | ERR | exception
45 Traceback (most recent call last):
46 File <name>, line <number>, in main
49 11 | module_1 | EMER | emergency
50 12 | module_1 | ERR | error
51 13 | module_1 | WARN | warning
52 14 | module_1 | INFO | information
53 16 | module_1 | EMER | emergency exception
54 Traceback (most recent call last):
55 File <name>, line <number>, in main
58 17 | module_1 | ERR | error exception
59 Traceback (most recent call last):
60 File <name>, line <number>, in main
63 18 | module_1 | WARN | warn exception
64 Traceback (most recent call last):
65 File <name>, line <number>, in main
68 19 | module_1 | INFO | information exception
69 Traceback (most recent call last):
70 File <name>, line <number>, in main
73 21 | module_1 | ERR | exception
74 Traceback (most recent call last):
75 File <name>, line <number>, in main
78 22 | module_2 | EMER | emergency
79 23 | module_2 | ERR | error
80 24 | module_2 | WARN | warning
81 27 | module_2 | EMER | emergency exception
82 Traceback (most recent call last):
83 File <name>, line <number>, in main
86 28 | module_2 | ERR | error exception
87 Traceback (most recent call last):
88 File <name>, line <number>, in main
91 29 | module_2 | WARN | warn exception
92 Traceback (most recent call last):
93 File <name>, line <number>, in main
96 32 | module_2 | ERR | exception
97 Traceback (most recent call last):
98 File <name>, line <number>, in main
105 VLOG_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
106 VLOG_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
108 m4_divert_push([PREPARE_TESTS])
110 sed 's/.*\(opened log file\).*/\1/
113 m4_divert_pop([PREPARE_TESTS])
115 AT_SETUP([vlog - vlog/reopen - C])
116 # This test won't work as-is on Windows because Windows doesn't allow
117 # files that are open to be renamed.
118 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
119 on_exit 'kill `cat test-unixctl.pid`'
121 AT_CAPTURE_FILE([log])
122 AT_CAPTURE_FILE([log.old])
123 AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach],
125 AT_CHECK([vlog_filt stderr], [0],
129 AT_CHECK([APPCTL -t test-unixctl log message])
131 AT_CHECK([APPCTL -t test-unixctl log message2])
132 AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
133 AT_CHECK([APPCTL -t test-unixctl log message3])
134 AT_CHECK([APPCTL -t test-unixctl exit])
136 AT_CHECK([vlog_filt log.old], [0], [dnl
143 AT_CHECK([vlog_filt log], [0], [dnl
149 m4_define([VLOG_REOPEN_PYN],
150 [AT_SETUP([vlog - vlog/reopen - $1])
151 AT_SKIP_IF([test $2 = no])
152 on_exit 'kill `cat test-unixctl.py.pid`'
154 AT_CAPTURE_FILE([log])
155 AT_CAPTURE_FILE([log.old])
156 AT_CHECK([$3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach])
158 AT_CHECK([APPCTL -t test-unixctl.py log message])
160 AT_CHECK([APPCTL -t test-unixctl.py log message2])
161 AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
162 AT_CHECK([APPCTL -t test-unixctl.py log message3])
163 AT_CHECK([APPCTL -t test-unixctl.py exit])
165 AT_CHECK([sed 's/.*|//' log.old], [0], [dnl
170 AT_CHECK([sed 's/.*|//' log], [0], [dnl
175 VLOG_REOPEN_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
176 VLOG_REOPEN_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
178 AT_SETUP([vlog - vlog/reopen without log file - C])
179 on_exit 'kill `cat test-unixctl.pid`'
181 AT_CHECK([ovstest test-unixctl --pidfile --detach])
183 AT_CHECK([APPCTL -t test-unixctl vlog/reopen], [2], [],
184 [Logging to file not configured
185 ovs-appctl: test-unixctl: server returned an error
189 m4_define([VLOG_REOPEN_WITHOUT_FILE_PYN],
190 [AT_SETUP([vlog - vlog/reopen without log file - $1])
191 AT_SKIP_IF([test $2 = no])
192 on_exit 'kill `cat test-unixctl.py.pid`'
194 AT_CHECK([$3 $srcdir/test-unixctl.py --pidfile --detach])
196 AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen], [0],
197 [Logging to file not configured
201 VLOG_REOPEN_WITHOUT_FILE_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
202 VLOG_REOPEN_WITHOUT_FILE_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
204 dnl This checks that if vlog/reopen can't reopen the log file,
205 dnl nothing particularly bad (e.g. a crash) happens.
206 AT_SETUP([vlog - vlog/reopen can't reopen log file - C])
207 # Verify that /dev/full is a character device that fails writes.
208 AT_SKIP_IF([test ! -c /dev/full])
209 AT_SKIP_IF([echo > /dev/full])
211 on_exit 'kill `cat test-unixctl.pid`'
213 AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach],
215 AT_CHECK([vlog_filt stderr], [0], [opened log file
218 AT_CHECK([APPCTL -t test-unixctl log message])
221 AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
222 AT_CHECK([APPCTL -t test-unixctl log message2])
224 AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
225 AT_CHECK([APPCTL -t test-unixctl log message3])
226 AT_CHECK([APPCTL -t test-unixctl exit])
227 AT_CHECK([vlog_filt log.old], [0], [dnl
233 AT_CHECK([vlog_filt log], [0], [dnl
239 dnl This checks that if vlog/reopen can't reopen the log file,
240 dnl nothing particularly bad (e.g. Python throws an exception and
241 dnl aborts the program) happens.
242 m4_define([VLOG_CANT_REOPEN_PYN],
243 [AT_SETUP([vlog - vlog/reopen can't reopen log file - $1])
244 AT_SKIP_IF([test $2 = no])
246 # Verify that /dev/full is a character device that fails writes.
247 AT_SKIP_IF([test ! -c /dev/full])
248 AT_SKIP_IF([echo > /dev/full])
250 on_exit 'kill `cat test-unixctl.py.pid`'
252 AT_CHECK([$3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach])
253 AT_CHECK([APPCTL -t test-unixctl.py log message])
256 AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
257 AT_CHECK([APPCTL -t test-unixctl.py log message2])
259 AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
260 AT_CHECK([APPCTL -t test-unixctl.py log message3])
261 AT_CHECK([APPCTL -t test-unixctl.py exit])
262 AT_CHECK([sed 's/.*|//' log.old], [0], [dnl
266 AT_CHECK([sed 's/.*|//' log], [0], [dnl
271 VLOG_CANT_REOPEN_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
272 VLOG_CANT_REOPEN_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
274 AT_SETUP([vlog - vlog/close - C])
275 on_exit 'kill `cat test-unixctl.pid`'
277 AT_CAPTURE_FILE([log])
278 AT_CAPTURE_FILE([log.old])
279 AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach],
281 AT_CHECK([vlog_filt stderr], [0], [opened log file
284 AT_CHECK([APPCTL -t test-unixctl log message])
285 AT_CHECK([APPCTL -t test-unixctl log message2])
287 # After closing the log file, message3 won't appear anywhere.
288 AT_CHECK([APPCTL -t test-unixctl vlog/close])
290 AT_CHECK([APPCTL -t test-unixctl log message3])
292 # Closing the log file again is harmless.
293 AT_CHECK([APPCTL -t test-unixctl vlog/close])
294 AT_CHECK([APPCTL -t test-unixctl log message4])
296 # After reopening the log file, further messages start appearing again.
297 AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
298 AT_CHECK([APPCTL -t test-unixctl log message5])
299 AT_CHECK([APPCTL -t test-unixctl exit])
301 AT_CHECK([vlog_filt log.old], [0], [dnl
307 AT_CHECK([vlog_filt log], [0], [dnl
313 m4_define([VLOG_CLOSE_PYN],
314 [AT_SETUP([vlog - vlog/close - $1])
315 AT_SKIP_IF([test $2 = no])
316 on_exit 'kill `cat test-unixctl.py.pid`'
318 AT_CAPTURE_FILE([log])
319 AT_CAPTURE_FILE([log.old])
320 AT_CHECK([$3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach])
322 AT_CHECK([APPCTL -t test-unixctl.py log message])
323 AT_CHECK([APPCTL -t test-unixctl.py log message2])
325 # After closing the log file, message3 won't appear anywhere.
326 AT_CHECK([APPCTL -t test-unixctl.py vlog/close])
328 AT_CHECK([APPCTL -t test-unixctl.py log message3])
330 # Closing the log file again is harmless.
331 AT_CHECK([APPCTL -t test-unixctl.py vlog/close])
332 AT_CHECK([APPCTL -t test-unixctl.py log message4])
334 # After reopening the log file, further messages start appearing again.
335 AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
336 AT_CHECK([APPCTL -t test-unixctl.py log message5])
337 AT_CHECK([APPCTL -t test-unixctl.py exit])
339 AT_CHECK([sed 's/.*|//' log.old], [0], [dnl
344 AT_CHECK([sed 's/.*|//' log], [0], [dnl
349 VLOG_CLOSE_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
350 VLOG_CLOSE_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
352 AT_SETUP([vlog - vlog/set and vlog/list - C])
353 on_exit 'kill `cat test-unixctl.pid`'
355 AT_CAPTURE_FILE([log])
356 AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach],
358 AT_CHECK([vlog_filt stderr], [0], [opened log file
361 AT_CHECK([APPCTL -t test-unixctl vlog/list | sed -n '1,2p
362 /\(test_unixctl\|daemon\) /p'], [0], [dnl
364 ------- ------ ------
366 test_unixctl OFF INFO INFO
369 AT_CHECK([APPCTL -t test-unixctl vlog/set daemon:syslog:err])
370 AT_CHECK([APPCTL -t test-unixctl vlog/set file:dbg])
371 AT_CHECK([APPCTL -t test-unixctl vlog/set nonexistent], [2], [],
372 [no destination, level, or module "nonexistent"
373 ovs-appctl: test-unixctl: server returned an error
375 AT_CHECK([APPCTL -t test-unixctl vlog/list | sed -n '1,2p
376 /\(test_unixctl\|daemon\) /p'], [0], [dnl
378 ------- ------ ------
380 test_unixctl OFF INFO DBG
383 AT_CHECK([APPCTL -t test-unixctl vlog/set pattern], [2], [],
385 ovs-appctl: test-unixctl: server returned an error
387 AT_CHECK([APPCTL -t test-unixctl vlog/set pattern:nonexistent], [2], [],
388 [unknown destination "nonexistent"
389 ovs-appctl: test-unixctl: server returned an error
391 AT_CHECK([APPCTL -t test-unixctl vlog/set pattern:file:'I<3OVS|%m'])
392 AT_CHECK([APPCTL -t test-unixctl log patterntest])
393 AT_CHECK([grep -q 'I<3OVS' log])
396 m4_define([VLOG_SET_AND_LIST_PYN],
397 [AT_SETUP([vlog - vlog/set and vlog/list - $1])
398 AT_SKIP_IF([test $2 = no])
399 on_exit 'kill `cat test-unixctl.py.pid`'
401 AT_CAPTURE_FILE([log])
402 AT_CHECK([$3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach])
404 AT_CHECK([APPCTL -t test-unixctl.py vlog/list], [0], [dnl
406 ------- ------ ------
407 daemon info info info
408 fatal-signal info info info
409 jsonrpc info info info
410 poller info info info
411 reconnect info info info
412 socket_util info info info
413 stream info info info
414 test-unixctl info info info
415 unixctl_server info info info
418 AT_CHECK([APPCTL -t test-unixctl.py vlog/set daemon:syslog:err])
419 AT_CHECK([APPCTL -t test-unixctl.py vlog/set file:dbg])
420 AT_CHECK([APPCTL -t test-unixctl.py vlog/set nonexistent], [0],
421 [no destination, level, or module "nonexistent"
423 AT_CHECK([APPCTL -t test-unixctl.py vlog/list], [0], [dnl
425 ------- ------ ------
427 fatal-signal info info dbg
428 jsonrpc info info dbg
430 reconnect info info dbg
431 socket_util info info dbg
433 test-unixctl info info dbg
434 unixctl_server info info dbg
437 AT_CHECK([APPCTL -t test-unixctl.py vlog/set pattern], [0],
438 [Please supply a valid pattern and destination
440 AT_CHECK([APPCTL -t test-unixctl.py vlog/set pattern:nonexistent], [0],
441 [Destination nonexistent does not exist
443 AT_CHECK([APPCTL -t test-unixctl.py vlog/set pattern:file:'I<3OVS|%m'])
444 AT_CHECK([APPCTL -t test-unixctl.py log patterntest])
445 AT_CHECK([grep -q 'I<3OVS' log])
448 VLOG_SET_AND_LIST_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
449 VLOG_SET_AND_LIST_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
451 AT_SETUP([vlog - RFC5424 facility])
452 on_exit 'kill `cat ovsdb-server.pid`'
455 touch .conf.db.~lock~
456 AT_CHECK([ovsdb-tool create conf.db $abs_top_srcdir/vswitchd/vswitch.ovsschema])
458 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile \
459 --remote=punix:$OVS_RUNDIR/db.sock -vPATTERN:file:"<%B>1 %A %m" \
460 --log-file], [0], [], [stderr])
461 AT_CHECK([ovs-appctl -t ovsdb-server exit])
463 # A default facility of LOG_LOCAL0 while writing to file.
464 AT_CHECK([head -1 ovsdb-server.log | awk '{print $1}'], [0], [<133>1
468 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile \
469 --remote=punix:$OVS_RUNDIR/db.sock -vPATTERN:file:"<%B>1 %A %m" \
470 -vFACILITY:daemon --log-file], [0], [], [stderr])
472 AT_CHECK([head -1 ovsdb-server.log | awk '{print $1}'], [0], [<29>1
475 AT_CHECK([ovs-appctl -t ovsdb-server vlog/set FACILITY:invalid], [2], [],
477 ovs-appctl: ovsdb-server: server returned an error
480 AT_CHECK([ovs-appctl -t ovsdb-server vlog/set FACILITY:local7])
481 AT_CHECK([ovs-appctl -t ovsdb-server vlog/set ANY:file:DBG])
482 AT_CHECK([ovs-appctl -t ovsdb-server exit])
484 AT_CHECK([tail -1 ovsdb-server.log | awk '{print $1}'], [0], [<191>1
488 m4_define([VLOG_RFC5424_PYN],
489 [AT_SETUP([vlog - RFC5424 facility - $1])
490 AT_SKIP_IF([test $2 = no])
491 on_exit 'kill `cat test-unixctl.py.pid`'
493 AT_CHECK([$3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile \
494 -vFACILITY:invalid --detach], [1], [], [test-unixctl.py: processing "FACILITY:invalid": Facility invalid is invalid
497 AT_CHECK([$3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile \
498 -vFACILITY:daemon --detach])
500 AT_CHECK([ovs-appctl -t test-unixctl.py vlog/set FACILITY:invalid], [0],
501 [Facility invalid is invalid
504 AT_CHECK([ovs-appctl -t test-unixctl.py vlog/set FACILITY:local0])
507 VLOG_RFC5424_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
508 VLOG_RFC5424_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])