summaryrefslogtreecommitdiff
path: root/tests/vlog.at
blob: 3e92e70a93c736af467d59a5df300e6fccbed0b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
AT_BANNER([vlog])

AT_SETUP([vlog - Python3])
AT_CAPTURE_FILE([log_file])
AT_CAPTURE_FILE([stderr_log])
AT_CHECK([$PYTHON3 $srcdir/test-vlog.py --log-file log_file \
-v dbg module_1:info module_2:warn syslog:off 2>stderr_log])

AT_CHECK([sed -e 's/.*-.*-.*T..:..:..Z |//' \
-e 's/File ".*", line [[0-9]][[0-9]]*,/File <name>, line <number>,/' \
stderr_log], [0], [dnl
  0  | module_0 | EMER | emergency
  1  | module_0 | ERR | error
  2  | module_0 | WARN | warning
  3  | module_0 | INFO | information
  4  | module_0 | DBG | debug
  5  | module_0 | EMER | emergency exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  6  | module_0 | ERR | error exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  7  | module_0 | WARN | warn exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  8  | module_0 | INFO | information exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  9  | module_0 | DBG | debug exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  10 | module_0 | ERR | exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  11 | module_1 | EMER | emergency
  12 | module_1 | ERR | error
  13 | module_1 | WARN | warning
  14 | module_1 | INFO | information
  16 | module_1 | EMER | emergency exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  17 | module_1 | ERR | error exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  18 | module_1 | WARN | warn exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  19 | module_1 | INFO | information exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  21 | module_1 | ERR | exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  22 | module_2 | EMER | emergency
  23 | module_2 | ERR | error
  24 | module_2 | WARN | warning
  27 | module_2 | EMER | emergency exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  28 | module_2 | ERR | error exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  29 | module_2 | WARN | warn exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
  32 | module_2 | ERR | exception
Traceback (most recent call last):
  File <name>, line <number>, in main
    assert fail
AssertionError
])

AT_CLEANUP

m4_divert_push([PREPARE_TESTS])
vlog_filt () {
    sed 's/.*\(opened log file\).*/\1/
s/.*|//' "$@"
}
m4_divert_pop([PREPARE_TESTS])

AT_SETUP([vlog - vlog/reopen - C])
# This test won't work as-is on Windows because Windows doesn't allow
# files that are open to be renamed.
AT_SKIP_IF([test "$IS_WIN32" = "yes"])
on_exit 'kill `cat test-unixctl.pid`'

AT_CAPTURE_FILE([log])
AT_CAPTURE_FILE([log.old])
AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach --no-chdir],
  [0], [], [stderr])
AT_CHECK([vlog_filt stderr], [0],
  [opened log file
])

AT_CHECK([APPCTL -t test-unixctl log message])
mv log log.old
AT_CHECK([APPCTL -t test-unixctl log message2])
AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl log message3])
AT_CHECK([APPCTL -t test-unixctl exit])

AT_CHECK([vlog_filt log.old], [0], [dnl
opened log file
Entering run loop.
message
message2
closing log file
])
AT_CHECK([vlog_filt log], [0], [dnl
opened log file
message3
])
AT_CLEANUP

AT_SETUP([vlog - vlog/reopen - Python3])
# This test won't work as-is on Windows because Windows doesn't allow
# files that are open to be renamed.
AT_SKIP_IF([test "$IS_WIN32" = "yes"])
on_exit 'kill `cat test-unixctl.py.pid`'

AT_CAPTURE_FILE([log])
AT_CAPTURE_FILE([log.old])
AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach --no-chdir])

AT_CHECK([APPCTL -t test-unixctl.py log message])
mv log log.old
AT_CHECK([APPCTL -t test-unixctl.py log message2])
AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl.py log message3])
AT_CHECK([APPCTL -t test-unixctl.py exit])

AT_CHECK([sed 's/.*|//' log.old], [0], [dnl
 Entering run loop.
 message
 message2
])
AT_CHECK([sed 's/.*|//' log], [0], [dnl
 message3
])
AT_CLEANUP

AT_SETUP([vlog - vlog/reopen without log file - C])
on_exit 'kill `cat test-unixctl.pid`'

AT_CHECK([ovstest test-unixctl --pidfile --detach --no-chdir])

AT_CHECK([APPCTL -t test-unixctl vlog/reopen], [2], [],
  [Logging to file not configured
ovs-appctl: test-unixctl: server returned an error
])
OVS_APP_EXIT_AND_WAIT([test-unixctl])
AT_CLEANUP

AT_SETUP([vlog - vlog/reopen without log file - Python3])
on_exit 'kill `cat test-unixctl.py.pid`'

AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --pidfile --detach --no-chdir])

AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen], [0],
  [Logging to file not configured
])
AT_CLEANUP

dnl This checks that if vlog/reopen can't reopen the log file,
dnl nothing particularly bad (e.g. a crash) happens.
AT_SETUP([vlog - vlog/reopen can't reopen log file - C])
# Verify that /dev/full is a character device that fails writes.
AT_SKIP_IF([test ! -c /dev/full])
AT_SKIP_IF([echo > /dev/full])

on_exit 'kill `cat test-unixctl.pid`'

AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach --no-chdir],
  [0], [], [stderr])
AT_CHECK([vlog_filt stderr], [0], [opened log file
])

AT_CHECK([APPCTL -t test-unixctl log message])
mv log log.old
ln -s /dev/full log
AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl log message2])
rm log
AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl log message3])
AT_CHECK([APPCTL -t test-unixctl exit])
AT_CHECK([vlog_filt log.old], [0], [dnl
opened log file
Entering run loop.
message
closing log file
])
AT_CHECK([vlog_filt log], [0], [dnl
opened log file
message3
])
AT_CLEANUP

dnl This checks that if vlog/reopen can't reopen the log file,
dnl nothing particularly bad (e.g. Python throws an exception and
dnl aborts the program) happens.
AT_SETUP([vlog - vlog/reopen can't reopen log file - Python3])

# Verify that /dev/full is a character device that fails writes.
AT_SKIP_IF([test ! -c /dev/full])
AT_SKIP_IF([echo > /dev/full])

on_exit 'kill `cat test-unixctl.py.pid`'

AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach --no-chdir])
AT_CHECK([APPCTL -t test-unixctl.py log message])
mv log log.old
ln -s /dev/full log
AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl.py log message2])
rm log
AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl.py log message3])
AT_CHECK([APPCTL -t test-unixctl.py exit])
AT_CHECK([sed 's/.*|//' log.old], [0], [dnl
 Entering run loop.
 message
])
AT_CHECK([sed 's/.*|//' log], [0], [dnl
 message3
])
AT_CLEANUP

AT_SETUP([vlog - vlog/close - C])
on_exit 'kill `cat test-unixctl.pid`'

AT_CAPTURE_FILE([log])
AT_CAPTURE_FILE([log.old])
AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach --no-chdir],
  [0], [], [ignore])
AT_CHECK([vlog_filt log], [0], [opened log file
Entering run loop.
])

AT_CHECK([APPCTL -t test-unixctl log message])
AT_CHECK([APPCTL -t test-unixctl log message2])

# After closing the log file, message3 won't appear anywhere.
AT_CHECK([APPCTL -t test-unixctl vlog/close])
mv log log.old
AT_CHECK([APPCTL -t test-unixctl log message3])

# Closing the log file again is harmless.
AT_CHECK([APPCTL -t test-unixctl vlog/close])
AT_CHECK([APPCTL -t test-unixctl log message4])

# After reopening the log file, further messages start appearing again.
AT_CHECK([APPCTL -t test-unixctl vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl log message5])
AT_CHECK([APPCTL -t test-unixctl exit])

AT_CHECK([vlog_filt log.old], [0], [dnl
opened log file
Entering run loop.
message
message2
])
AT_CHECK([vlog_filt log], [0], [dnl
opened log file
message5
])
AT_CLEANUP

AT_SETUP([vlog - vlog/close - Python3])
on_exit 'kill `cat test-unixctl.py.pid`'

AT_CAPTURE_FILE([log])
AT_CAPTURE_FILE([log.old])
AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach --no-chdir])

AT_CHECK([APPCTL -t test-unixctl.py log message])
AT_CHECK([APPCTL -t test-unixctl.py log message2])

# After closing the log file, message3 won't appear anywhere.
AT_CHECK([APPCTL -t test-unixctl.py vlog/close])
mv log log.old
AT_CHECK([APPCTL -t test-unixctl.py log message3])

# Closing the log file again is harmless.
AT_CHECK([APPCTL -t test-unixctl.py vlog/close])
AT_CHECK([APPCTL -t test-unixctl.py log message4])

# After reopening the log file, further messages start appearing again.
AT_CHECK([APPCTL -t test-unixctl.py vlog/reopen])
AT_CHECK([APPCTL -t test-unixctl.py log message5])
AT_CHECK([APPCTL -t test-unixctl.py exit])

AT_CHECK([sed 's/.*|//' log.old], [0], [dnl
 Entering run loop.
 message
 message2
])
AT_CHECK([sed 's/.*|//' log], [0], [dnl
 message5
])
AT_CLEANUP

AT_SETUP([vlog - vlog/set and vlog/list - C])
on_exit 'kill `cat test-unixctl.pid`'

AT_CAPTURE_FILE([log])
AT_CHECK([ovstest test-unixctl --log-file=`pwd`/log --pidfile --detach --no-chdir],
  [0], [], [ignore])
AT_CHECK([vlog_filt log], [0], [opened log file
Entering run loop.
])

AT_CHECK([APPCTL -t test-unixctl vlog/list | sed -n '1,2p
/test_unixctl /p; /daemon /p'], [0], [dnl
                 console    syslog    file
                 -------    ------    ------
daemon             OFF       INFO       INFO
test_unixctl       OFF       INFO       INFO
])

AT_CHECK([APPCTL -t test-unixctl vlog/set daemon:syslog:err])
AT_CHECK([APPCTL -t test-unixctl vlog/set file:dbg])
AT_CHECK([APPCTL -t test-unixctl vlog/set nonexistent], [2], [],
  [no destination, level, or module "nonexistent"
ovs-appctl: test-unixctl: server returned an error
])
AT_CHECK([APPCTL -t test-unixctl vlog/list | sed -n '1,2p
/test_unixctl /p; /daemon /p'], [0], [dnl
                 console    syslog    file
                 -------    ------    ------
daemon             OFF        ERR        DBG
test_unixctl       OFF       INFO        DBG
])

AT_CHECK([APPCTL -t test-unixctl vlog/set pattern], [2], [],
  [missing destination
ovs-appctl: test-unixctl: server returned an error
])
AT_CHECK([APPCTL -t test-unixctl vlog/set pattern:nonexistent], [2], [],
  [unknown destination "nonexistent"
ovs-appctl: test-unixctl: server returned an error
])
AT_CHECK([APPCTL -t test-unixctl vlog/set pattern:file:'I<3OVS|%m'])
AT_CHECK([APPCTL -t test-unixctl log patterntest])
AT_CHECK([grep -q 'I<3OVS' log])
OVS_APP_EXIT_AND_WAIT([test-unixctl])
AT_CLEANUP

AT_SETUP([vlog - vlog/set and vlog/list - Python3])
on_exit 'kill `cat test-unixctl.py.pid`'

AT_CAPTURE_FILE([log])
AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile --detach --no-chdir])

AT_CHECK([APPCTL -t test-unixctl.py vlog/list], [0], [dnl
                 console    syslog    file
                 -------    ------    ------
daemon            info       info       info
fatal-signal      info       info       info
jsonrpc           info       info       info
poller            info       info       info
reconnect         info       info       info
socket_util       info       info       info
stream            info       info       info
test-unixctl      info       info       info
unixctl_server    info       info       info
])

   AT_CHECK([APPCTL -t test-unixctl.py vlog/set daemon:syslog:err])
   AT_CHECK([APPCTL -t test-unixctl.py vlog/set file:dbg])
   AT_CHECK([APPCTL -t test-unixctl.py vlog/set nonexistent], [0],
  [no destination, level, or module "nonexistent"
])
   AT_CHECK([APPCTL -t test-unixctl.py vlog/list], [0], [dnl
                 console    syslog    file
                 -------    ------    ------
daemon            info        err        dbg
fatal-signal      info       info        dbg
jsonrpc           info       info        dbg
poller            info       info        dbg
reconnect         info       info        dbg
socket_util       info       info        dbg
stream            info       info        dbg
test-unixctl      info       info        dbg
unixctl_server    info       info        dbg
])

AT_CHECK([APPCTL -t test-unixctl.py vlog/set pattern], [0],
  [Please supply a valid pattern and destination
])
AT_CHECK([APPCTL -t test-unixctl.py vlog/set pattern:nonexistent], [0],
  [Destination nonexistent does not exist
])
AT_CHECK([APPCTL -t test-unixctl.py vlog/set pattern:file:'I<3OVS|%m'])
AT_CHECK([APPCTL -t test-unixctl.py log patterntest])
AT_CHECK([grep -q 'I<3OVS' log])
AT_CLEANUP

AT_SETUP([vlog - RFC5424 facility])
on_exit 'kill `cat ovsdb-server.pid`'

dnl Create database.
touch .conf.db.~lock~
AT_CHECK([ovsdb-tool create conf.db $abs_top_srcdir/vswitchd/vswitch.ovsschema])

AT_CHECK([ovsdb-server --detach --no-chdir --pidfile \
          --remote=punix:$OVS_RUNDIR/db.sock -vPATTERN:file:"<%B>1 %A %m" \
          --log-file], [0], [], [stderr])
OVS_APP_EXIT_AND_WAIT([ovsdb-server])

# A default facility of LOG_LOCAL0 while writing to file.
AT_CHECK([head -1 ovsdb-server.log | awk '{print $1}'], [0], [<133>1
])
rm ovsdb-server.log

AT_CHECK([ovsdb-server --detach --no-chdir --pidfile \
          --remote=punix:$OVS_RUNDIR/db.sock -vPATTERN:file:"<%B>1 %A %m" \
          -vFACILITY:daemon --log-file], [0], [], [stderr])

AT_CHECK([head -1 ovsdb-server.log | awk '{print $1}'], [0], [<29>1
])

AT_CHECK([ovs-appctl -t ovsdb-server vlog/set FACILITY:invalid], [2], [],
[invalid facility
ovs-appctl: ovsdb-server: server returned an error
])

AT_CHECK([ovs-appctl -t ovsdb-server vlog/set FACILITY:local7])
AT_CHECK([ovs-appctl -t ovsdb-server vlog/set ANY:file:DBG])
OVS_APP_EXIT_AND_WAIT([ovsdb-server])

AT_CHECK([tail -1 ovsdb-server.log | awk '{print $1}'], [0], [<191>1
])
AT_CLEANUP

AT_SETUP([vlog - RFC5424 facility - Python3])
on_exit 'kill `cat test-unixctl.py.pid`'

AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile \
-vFACILITY:invalid --detach --no-chdir], [1], [], [test-unixctl.py: processing "FACILITY:invalid": Facility invalid is invalid
])

AT_CHECK([$PYTHON3 $srcdir/test-unixctl.py --log-file=`pwd`/log --pidfile \
-vFACILITY:daemon --detach --no-chdir])

AT_CHECK([ovs-appctl -t test-unixctl.py vlog/set FACILITY:invalid], [0],
[Facility invalid is invalid
])

AT_CHECK([ovs-appctl -t test-unixctl.py vlog/set FACILITY:local0])
AT_CLEANUP