Fix: tests: add missing wait, document missing synchro
[lttng-tools.git] / tests / regression / ust / java-jul / test_java_jul
1 #!/bin/bash
2 #
3 # Copyright (C) - 2013 David Goulet <dgoulet@efficios.com>
4 #
5 # This program is free software; you can redistribute it and/or modify it under
6 # the terms of the GNU General Public License, version 2 only, as published by
7 # the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12 # details.
13 #
14 # You should have received a copy of the GNU General Public License along with
15 # this program; if not, write to the Free Software Foundation, Inc., 51
16 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
18 TEST_DESC="Java JUL support"
19
20 CURDIR=$(dirname $0)/
21 TESTDIR=$CURDIR/../../..
22 NR_ITER=6
23 NR_MSEC_WAIT=1000
24 TESTAPP_NAME="JTestLTTng"
25 TESTAPP_BIN="$TESTAPP_NAME.java"
26 TESTAPP_PATH="$CURDIR/$TESTAPP_NAME"
27 SESSION_NAME="jul"
28 EVENT_NAME="JTestLTTng"
29 EVENT_NAME2="JTestLTTng2"
30 JAVA_CP="$CURDIR:/usr/local/share/java/liblttng-ust-agent.jar:/usr/share/java/liblttng-ust-agent.jar"
31
32 NUM_TESTS=155
33
34 source $TESTDIR/utils/utils.sh
35
36 function run_app
37 {
38 local finest_tp=$1
39 local fire_second_tp=$2
40
41 java -cp $JAVA_CP -Djava.library.path="/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $finest_tp $fire_second_tp >/dev/null 2>&1
42 }
43
44 function run_app_background
45 {
46 run_app $@ &
47 }
48
49 function enable_jul_loglevel_only()
50 {
51 sess_name=$1
52 event_name="$2"
53 loglevel=$3
54 channel_name=$4
55
56 if [ -z $channel_name ]; then
57 # default channel if none specified
58 chan=""
59 else
60 chan="-c $channel_name"
61 fi
62
63 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" $chan -s $sess_name -j >/dev/null 2>&1
64 ok $? "Enable JUL event $event_name for session $sess_name with loglevel-only $loglevel"
65 }
66
67 function enable_jul_filter()
68 {
69 local sess_name="$1"
70 local event_name="$2"
71 local filter="$3"
72
73 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -j --filter "$filter" >/dev/null 2>&1
74 ok $? "Enable event $event_name with filter $filter for session $sess_name"
75 }
76
77 function enable_jul_filter_loglevel_only()
78 {
79 local sess_name="$1"
80 local event_name="$2"
81 local filter="$3"
82 local loglevel="$4"
83
84 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" -s $sess_name -j --filter "$filter" >/dev/null 2>&1
85 ok $? "Enable event $event_name with filter \"$filter\" and loglevel-only $loglevel for session $sess_name"
86 }
87
88 # MUST set TESTDIR before calling those functions
89
90 function test_jul_before_start ()
91 {
92 diag "Test JUL application BEFORE tracing starts"
93 create_lttng_session $SESSION_NAME $TRACE_PATH
94 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
95
96 # Run 5 times with a 1 second delay
97 run_app_background
98
99 #FIXME: racy missing synchronization
100
101 start_lttng_tracing $SESSION_NAME
102
103 # Wait for the applications started in background
104 wait
105
106 stop_lttng_tracing $SESSION_NAME
107 destroy_lttng_session $SESSION_NAME
108
109 # Validate test. Expecting all events.
110 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
111 if [ $? -ne 0 ]; then
112 return $?
113 fi
114 }
115
116 function test_jul_after_start ()
117 {
118 diag "Test JUL application AFTER tracing starts"
119
120 create_lttng_session $SESSION_NAME $TRACE_PATH
121 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
122 start_lttng_tracing $SESSION_NAME
123
124 # Run 5 times with a 1 second delay
125 run_app
126
127 stop_lttng_tracing $SESSION_NAME
128 destroy_lttng_session $SESSION_NAME
129
130 # Validate test. Expecting all events.
131 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
132 if [ $? -ne 0 ]; then
133 return $?
134 fi
135 }
136
137 function test_jul_loglevel ()
138 {
139 diag "Test JUL application with loglevel"
140
141 create_lttng_session $SESSION_NAME $TRACE_PATH
142 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_INFO"
143 start_lttng_tracing $SESSION_NAME
144
145 # Run 5 times with a 1 second delay
146 run_app
147
148 stop_lttng_tracing $SESSION_NAME
149 destroy_lttng_session $SESSION_NAME
150
151 # Validate test. Expecting all events.
152 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
153 if [ $? -ne 0 ]; then
154 return $?
155 fi
156
157 diag "Test JUL applications with lower loglevel"
158
159 create_lttng_session $SESSION_NAME $TRACE_PATH
160 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_SEVERE"
161 start_lttng_tracing $SESSION_NAME
162
163 # Run 5 times with a 1 second delay
164 run_app
165
166 stop_lttng_tracing $SESSION_NAME
167 destroy_lttng_session $SESSION_NAME
168
169 # Validate test. Expecting 0 events.
170 trace_match_only $EVENT_NAME 0 $TRACE_PATH
171 if [ $? -ne 0 ]; then
172 return $?
173 fi
174
175 diag "Test JUL applications with higher loglevel"
176
177 create_lttng_session $SESSION_NAME $TRACE_PATH
178 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_FINER"
179 start_lttng_tracing $SESSION_NAME
180
181 # Run 5 times with a 1 second delay
182 run_app
183
184 stop_lttng_tracing $SESSION_NAME
185 destroy_lttng_session $SESSION_NAME
186
187 # Validate test. Expecting all events.
188 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
189 return $?
190 }
191
192 function test_jul_loglevel_multiple ()
193 {
194 diag "Test JUL application with multiple loglevel"
195
196 create_lttng_session $SESSION_NAME $TRACE_PATH
197 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_INFO"
198 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_FINEST"
199 start_lttng_tracing $SESSION_NAME
200
201 # Run 5 times with a 1 second delay and fire two TP.
202 run_app 1
203
204 stop_lttng_tracing $SESSION_NAME
205 destroy_lttng_session $SESSION_NAME
206
207 # Validate test. Expecting all events times two.
208 trace_match_only $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
209 if [ $? -ne 0 ]; then
210 return $?
211 fi
212
213 create_lttng_session $SESSION_NAME $TRACE_PATH
214 enable_jul_lttng_event_loglevel $SESSION_NAME '*' "JUL_INFO"
215 enable_jul_lttng_event_loglevel $SESSION_NAME '*' "JUL_FINEST"
216 start_lttng_tracing $SESSION_NAME
217
218 # Run 5 times with a 1 second delay and fire two TP.
219 run_app 1
220
221 stop_lttng_tracing $SESSION_NAME
222 destroy_lttng_session $SESSION_NAME
223
224 # Validate test. Expecting all events times two.
225 trace_match_only $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
226 if [ $? -ne 0 ]; then
227 return $?
228 fi
229 }
230
231 function test_jul_multi_session_loglevel()
232 {
233 diag "Test JUL with multiple session"
234
235 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
236 enable_jul_loglevel_only $SESSION_NAME-1 '*' "JUL_INFO"
237 start_lttng_tracing $SESSION_NAME-1
238
239 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
240 enable_jul_loglevel_only $SESSION_NAME-2 '*' "JUL_FINEST"
241 start_lttng_tracing $SESSION_NAME-2
242
243 # Run 5 times with a 1 second delay and fire second TP.
244 run_app 1 1
245
246 stop_lttng_tracing $SESSION_NAME-1
247 stop_lttng_tracing $SESSION_NAME-2
248 destroy_lttng_session $SESSION_NAME-1
249 destroy_lttng_session $SESSION_NAME-2
250
251 # Expecting 6 events being the main event plus the second tp.
252 trace_match_only $EVENT_NAME $(($NR_ITER + 1)) $TRACE_PATH/$SESSION_NAME-1
253 if [ $? -ne 0 ]; then
254 return $?
255 fi
256
257 # Expectin 5 events being the finest TP.
258 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
259 if [ $? -ne 0 ]; then
260 return $?
261 fi
262 }
263
264 function test_jul_multi_session_disable()
265 {
266 diag "Test JUL with multiple session with disabled event"
267
268 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
269 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
270 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME2
271 disable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
272 start_lttng_tracing $SESSION_NAME-1
273
274 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
275 enable_jul_lttng_event $SESSION_NAME-2 $EVENT_NAME2
276 start_lttng_tracing $SESSION_NAME-2
277
278 # Run 5 times with a 1 second delay and fire second TP.
279 run_app 0 1
280
281 stop_lttng_tracing $SESSION_NAME-1
282 stop_lttng_tracing $SESSION_NAME-2
283 destroy_lttng_session $SESSION_NAME-1
284 destroy_lttng_session $SESSION_NAME-2
285
286 # Validate test. Expecting one event of the second TP.
287 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
288 if [ $? -ne 0 ]; then
289 return $?
290 fi
291
292 # Validate test. Expecting one event of the second TP.
293 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
294 if [ $? -ne 0 ]; then
295 return $?
296 fi
297 }
298
299 function test_jul_multi_session_disable_wildcard()
300 {
301 diag "Test JUL with multiple session with disabled wildcard event"
302
303 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
304 enable_jul_lttng_event $SESSION_NAME-1 '*'
305
306 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
307 enable_jul_lttng_event $SESSION_NAME-2 '*'
308
309 disable_jul_lttng_event $SESSION_NAME-1 '*'
310
311 start_lttng_tracing $SESSION_NAME-1
312 start_lttng_tracing $SESSION_NAME-2
313
314 run_app
315
316 stop_lttng_tracing $SESSION_NAME-1
317 stop_lttng_tracing $SESSION_NAME-2
318 destroy_lttng_session $SESSION_NAME-1
319 destroy_lttng_session $SESSION_NAME-2
320
321 # Validate test. Expecting NO event of the first TP.
322 trace_match_only $EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME-1
323 if [ $? -ne 0 ]; then
324 return $?
325 fi
326
327 # Validate test. Expecting all events of the first TP.
328 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
329 if [ $? -ne 0 ]; then
330 return $?
331 fi
332 }
333
334 function test_jul_disable_all()
335 {
336 diag "Test JUL with multiple session with disabled all event"
337
338 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
339 enable_jul_lttng_event $SESSION_NAME '*'
340 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
341 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
342
343 disable_jul_lttng_event $SESSION_NAME '*'
344
345 start_lttng_tracing $SESSION_NAME
346
347 run_app 0 1
348
349 stop_lttng_tracing $SESSION_NAME
350 destroy_lttng_session $SESSION_NAME
351
352 # Validate test. Expecting NO event of the first TP and second TP.
353 trace_match_only $EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME
354 trace_match_only $EVENT_NAME2 0 $TRACE_PATH/$SESSION_NAME
355 if [ $? -ne 0 ]; then
356 return $?
357 fi
358 }
359
360 function test_jul_multi_session()
361 {
362 diag "Test JUL with multiple session"
363
364 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
365 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
366 start_lttng_tracing $SESSION_NAME-1
367
368 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
369 enable_jul_lttng_event $SESSION_NAME-2 $EVENT_NAME2
370 start_lttng_tracing $SESSION_NAME-2
371
372 # Run 5 times with a 1 second delay and fire second TP.
373 run_app 0 1
374
375 stop_lttng_tracing $SESSION_NAME-1
376 stop_lttng_tracing $SESSION_NAME-2
377 destroy_lttng_session $SESSION_NAME-1
378 destroy_lttng_session $SESSION_NAME-2
379
380 # Validate test. Expecting all events of first TP
381 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
382 if [ $? -ne 0 ]; then
383 return $?
384 fi
385
386 # Validate test. Expecting one event of the second TP.
387 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
388 if [ $? -ne 0 ]; then
389 return $?
390 fi
391 }
392
393 function test_jul_destroy_session()
394 {
395 diag "Test JUL two session with destroy"
396
397 create_lttng_session $SESSION_NAME $TRACE_PATH/first-sess
398 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
399 start_lttng_tracing $SESSION_NAME
400
401 # Run 5 times with a 1 second delay
402 run_app_background 0 1
403
404 # Wait for the applications started in background
405 wait
406
407 stop_lttng_tracing $SESSION_NAME
408 destroy_lttng_session $SESSION_NAME
409
410 # Validate test. Expecting at least one event num 1
411 validate_trace $EVENT_NAME $TRACE_PATH/first-sess
412 if [ $? -ne 0 ]; then
413 return $?
414 fi
415
416 create_lttng_session $SESSION_NAME $TRACE_PATH/second-sess
417 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
418 start_lttng_tracing $SESSION_NAME
419
420 # Run 5 times with a 1 second delay
421 run_app_background 0 1
422
423 # Wait for the applications started in background
424 wait
425
426 stop_lttng_tracing $SESSION_NAME
427 destroy_lttng_session $SESSION_NAME
428
429 # Validate test. Expecting only one event num 2
430 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/second-sess
431 if [ $? -ne 0 ]; then
432 return $?
433 fi
434 }
435
436 function test_jul_filtering()
437 {
438 diag "Test JUL filtering"
439
440 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
441 # Enable all event with a filter.
442 enable_jul_filter $SESSION_NAME '*' 'msg == "JUL second logger fired"'
443 start_lttng_tracing $SESSION_NAME
444
445 # Run 5 times with a 1 second delay and fire second TP.
446 run_app 0 1
447
448 stop_lttng_tracing $SESSION_NAME
449 destroy_lttng_session $SESSION_NAME
450
451 # Validate test. Expecting one event of the second TP only.
452 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
453 if [ $? -ne 0 ]; then
454 return $?
455 fi
456
457 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
458 # Enable first Logger but filter msg payload for the INFO one while
459 # triggering the finest and second TP.
460 enable_jul_filter $SESSION_NAME $EVENT_NAME 'msg == "JUL tp fired!"'
461 start_lttng_tracing $SESSION_NAME
462
463 # Run 5 times with a 1 second delay, fire finest and second TP.
464 run_app 1 1
465
466 stop_lttng_tracing $SESSION_NAME
467 destroy_lttng_session $SESSION_NAME
468
469 # Validate test. Expecting NR_ITER event of the main INFO tp.
470 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
471 if [ $? -ne 0 ]; then
472 return $?
473 fi
474 }
475
476 function test_jul_disable()
477 {
478 diag "Test JUL disable event"
479
480 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
481 # Enable all event with a filter.
482 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
483 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
484 disable_jul_lttng_event $SESSION_NAME $EVENT_NAME
485 start_lttng_tracing $SESSION_NAME
486
487 # Run 5 times with a 1 second delay and fire second TP.
488 run_app 0 1
489
490 stop_lttng_tracing $SESSION_NAME
491 destroy_lttng_session $SESSION_NAME
492
493 # Validate test. Expecting one event of the second TP only.
494 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
495 if [ $? -ne 0 ]; then
496 return $?
497 fi
498 }
499
500 function test_jul_disable_enable()
501 {
502 diag "Test JUL disable event followed by an enable"
503
504 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
505 # Enable all event with a filter.
506 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
507 disable_jul_lttng_event $SESSION_NAME $EVENT_NAME
508 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
509 start_lttng_tracing $SESSION_NAME
510
511 # Run 5 times with a 1 second delay and fire second TP.
512 run_app 0 1
513
514 stop_lttng_tracing $SESSION_NAME
515 destroy_lttng_session $SESSION_NAME
516
517 # Validate test. Expecting NR_ITER event of the main INFO tp.
518 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
519 if [ $? -ne 0 ]; then
520 return $?
521 fi
522 }
523
524 function test_jul_filter_loglevel()
525 {
526 local BOGUS_EVENT_NAME="not_a_real_event"
527 local FILTER="int_loglevel > 700 || int_loglevel < 700"
528 local ALL_EVENTS="."
529
530 diag "Test JUL a filter with a loglevel"
531
532 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
533 # Enable an event with a filter and the loglevel-only option.
534 enable_jul_filter_loglevel_only $SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" JUL_CONFIG
535 disable_jul_lttng_event $SESSION_NAME $BOGUS_EVENT_NAME
536 enable_jul_filter_loglevel_only $SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" JUL_CONFIG
537 start_lttng_tracing $SESSION_NAME
538
539 # Run 5 times with a 1 second delay and fire second TP.
540 run_app 0 1
541
542 stop_lttng_tracing $SESSION_NAME
543 destroy_lttng_session $SESSION_NAME
544
545 # Validate test. Expecting no events.
546 trace_match_only $ALL_EVENTS 0 $TRACE_PATH/$SESSION_NAME
547 if [ $? -ne 0 ]; then
548 return $?
549 fi
550 }
551
552 plan_tests $NUM_TESTS
553
554 print_test_banner "$TEST_DESC"
555
556 if [ ! -f "$TESTAPP_PATH.class" ]; then
557 withapp=0
558 else
559 withapp=1
560 fi
561
562 skip $withapp "JUL support is needed. Skipping all tests." $NUM_TESTS ||
563 {
564 start_lttng_sessiond
565
566 tests=(
567 test_jul_multi_session_disable_wildcard
568 test_jul_multi_session_disable
569 test_jul_disable
570 test_jul_disable_enable
571 test_jul_disable_all
572 test_jul_filtering
573 test_jul_multi_session_loglevel
574 test_jul_destroy_session
575 test_jul_loglevel
576 test_jul_loglevel_multiple
577 test_jul_before_start
578 test_jul_after_start
579 test_jul_multi_session
580 test_jul_filter_loglevel
581 )
582
583 for fct_test in ${tests[@]};
584 do
585 TRACE_PATH=$(mktemp -d)
586
587 ${fct_test}
588 if [ $? -ne 0 ]; then
589 break;
590 fi
591 rm -rf $TRACE_PATH
592 done
593
594 stop_lttng_sessiond
595 }
This page took 0.041634 seconds and 5 git commands to generate.