3 # Copyright (C) 2014 David Goulet <dgoulet@efficios.com>
5 # SPDX-License-Identifier: GPL-2.0-only
7 TEST_DESC
="Java LOG4J support"
9 CURDIR
=$
(dirname "$0")/
10 TESTDIR
=$CURDIR/..
/..
/..
15 TESTAPP_NAME
="JTestLTTngLog4j"
16 TESTAPP_PATH
="$CURDIR/$TESTAPP_NAME"
19 EVENT_NAME
="log4j-event"
20 EVENT_NAME2
="log4j-event-2"
22 JAVA_CP
="$CURDIR:$CLASSPATH"
26 # shellcheck source=../../../utils/utils.sh
27 source "$TESTDIR/utils/utils.sh"
32 local fire_second_tp
=$2
34 if [ "$debug_tp" = "" ]; then
38 if [ "$fire_second_tp" = "" ]; then
42 # FIXME: test app should have synchro.
43 diag
"java -cp $JAVA_CP -Djava.library.path=\"$LD_LIBRARY_PATH:/usr/local/lib:/usr/lib\" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $debug_tp $fire_second_tp"
44 java
-cp "$JAVA_CP" -Djava.library.path
="$LD_LIBRARY_PATH:/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT "$debug_tp" "$fire_second_tp" >"$OUTPUT_DEST" 2>"$ERROR_OUTPUT_DEST"
47 function run_app_background
53 # MUST set TESTDIR before calling those functions
55 function test_log4j_before_start
()
57 local file_sync_after_first
58 local file_sync_before_last
60 file_sync_after_first
=$
(mktemp
--tmpdir -u "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX")
61 file_sync_before_last
=$
(mktemp
--tmpdir -u "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX")
63 diag
"Test LOG4J application BEFORE tracing starts"
64 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
65 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
67 # Run 5 times with a 1 second delay
70 start_lttng_tracing_ok
$SESSION_NAME
72 touch "${file_sync_before_last}"
74 # Wait for the applications started in background
77 stop_lttng_tracing_ok
$SESSION_NAME
78 destroy_lttng_session_ok
$SESSION_NAME
80 rm -f "${file_sync_after_first}"
81 rm -f "${file_sync_before_last}"
83 # Validate test. Expecting all events.
84 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"
87 function test_log4j_after_start
()
89 diag
"Test LOG4J application AFTER tracing starts"
91 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
92 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
93 start_lttng_tracing_ok
$SESSION_NAME
95 # Run 5 times with a 1 second delay
98 stop_lttng_tracing_ok
$SESSION_NAME
99 destroy_lttng_session_ok
$SESSION_NAME
101 # Validate test. Expecting all events.
102 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"
105 function test_log4j_loglevel
()
107 diag
"Test LOG4J application with loglevel"
109 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
110 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_INFO"
111 start_lttng_tracing_ok
$SESSION_NAME
113 # Run 5 times with a 1 second delay
116 stop_lttng_tracing_ok
$SESSION_NAME
117 destroy_lttng_session_ok
$SESSION_NAME
119 # Validate test. Expecting all events.
120 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"
122 diag
"Test LOG4J applications with lower loglevel"
124 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
125 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_FATAL"
126 start_lttng_tracing_ok
$SESSION_NAME
128 # Run 5 times with a 1 second delay
131 stop_lttng_tracing_ok
$SESSION_NAME
132 destroy_lttng_session_ok
$SESSION_NAME
134 # Validate test. Expecting 0 events.
135 trace_match_only
$EVENT_NAME 0 "$TRACE_PATH"
137 diag
"Test LOG4J applications with higher loglevel"
139 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
140 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_TRACE"
141 start_lttng_tracing_ok
$SESSION_NAME
143 # Run 5 times with a 1 second delay
146 stop_lttng_tracing_ok
$SESSION_NAME
147 destroy_lttng_session_ok
$SESSION_NAME
149 # Validate test. Expecting all events.
150 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"
153 function test_log4j_loglevel_multiple
()
155 diag
"Test LOG4J application with multiple loglevel"
157 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
158 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_INFO"
159 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_DEBUG"
160 start_lttng_tracing_ok
$SESSION_NAME
162 # Run 5 times with a 1 second delay and fire two TP.
165 stop_lttng_tracing_ok
$SESSION_NAME
166 destroy_lttng_session_ok
$SESSION_NAME
168 # Validate test. Expecting all events times two.
169 trace_match_only
$EVENT_NAME $
((NR_ITER
* 2)) "$TRACE_PATH"
171 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
172 enable_log4j_lttng_event_loglevel
$SESSION_NAME '*' "LOG4J_INFO"
173 enable_log4j_lttng_event_loglevel
$SESSION_NAME '*' "LOG4J_DEBUG"
174 start_lttng_tracing_ok
$SESSION_NAME
176 # Run 5 times with a 1 second delay and fire two TP.
179 stop_lttng_tracing_ok
$SESSION_NAME
180 destroy_lttng_session_ok
$SESSION_NAME
182 # Validate test. Expecting all events times two.
183 trace_match_only
$EVENT_NAME $
((NR_ITER
* 2)) "$TRACE_PATH"
186 function test_log4j_multi_session_loglevel
()
188 diag
"Test LOG4J with multiple session"
190 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
191 enable_log4j_lttng_event_loglevel_only
$SESSION_NAME-1 '*' "LOG4J_INFO"
192 start_lttng_tracing_ok
$SESSION_NAME-1
194 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
195 enable_log4j_lttng_event_loglevel_only
$SESSION_NAME-2 '*' "LOG4J_DEBUG"
196 start_lttng_tracing_ok
$SESSION_NAME-2
198 # Run 5 times with a 1 second delay and fire second TP.
201 stop_lttng_tracing_ok
$SESSION_NAME-1
202 stop_lttng_tracing_ok
$SESSION_NAME-2
203 destroy_lttng_session_ok
$SESSION_NAME-1
204 destroy_lttng_session_ok
$SESSION_NAME-2
206 # Expecting 6 events being the main event plus the second tp.
207 trace_match_only
$EVENT_NAME $
((NR_ITER
+ 1)) "$TRACE_PATH"/$SESSION_NAME-1
209 # Expectin 5 events being the debug TP.
210 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME-2
213 function test_log4j_multi_session_disable
()
215 diag
"Test LOG4J with multiple session with disabled event"
217 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
218 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
219 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME2
220 disable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
221 start_lttng_tracing_ok
$SESSION_NAME-1
223 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
224 enable_log4j_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
225 start_lttng_tracing_ok
$SESSION_NAME-2
227 # Run 5 times with a 1 second delay and fire second TP.
230 stop_lttng_tracing_ok
$SESSION_NAME-1
231 stop_lttng_tracing_ok
$SESSION_NAME-2
232 destroy_lttng_session_ok
$SESSION_NAME-1
233 destroy_lttng_session_ok
$SESSION_NAME-2
235 # Validate test. Expecting one event of the second TP.
236 trace_match_only
$EVENT_NAME2 1 "$TRACE_PATH"/$SESSION_NAME-1
238 # Validate test. Expecting one event of the second TP.
239 trace_match_only
$EVENT_NAME2 1 "$TRACE_PATH"/$SESSION_NAME-2
242 function test_log4j_multi_session_disable_wildcard
()
244 diag
"Test LOG4J with multiple session with disabled wildcard event"
246 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
247 enable_log4j_lttng_event
$SESSION_NAME-1 '*'
249 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
250 enable_log4j_lttng_event
$SESSION_NAME-2 '*'
252 disable_log4j_lttng_event
$SESSION_NAME-1 '*'
254 start_lttng_tracing_ok
$SESSION_NAME-1
255 start_lttng_tracing_ok
$SESSION_NAME-2
259 stop_lttng_tracing_ok
$SESSION_NAME-1
260 stop_lttng_tracing_ok
$SESSION_NAME-2
261 destroy_lttng_session_ok
$SESSION_NAME-1
262 destroy_lttng_session_ok
$SESSION_NAME-2
264 # Validate test. Expecting NO event of the first TP.
265 trace_match_only
$EVENT_NAME 0 "$TRACE_PATH"/$SESSION_NAME-1
267 # Validate test. Expecting all events of the first TP.
268 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME-2
271 function test_log4j_multi_session_disable_wildcard_begin
()
274 diag
"Test LOG4J with multiple session with disabled wildcard (at the beginning) event"
276 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
277 enable_log4j_lttng_event
$SESSION_NAME-1 "$ev_name"
279 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
280 enable_log4j_lttng_event
$SESSION_NAME-2 "$ev_name"
282 disable_log4j_lttng_event
$SESSION_NAME-1 "$ev_name"
284 start_lttng_tracing_ok
$SESSION_NAME-1
285 start_lttng_tracing_ok
$SESSION_NAME-2
289 stop_lttng_tracing_ok
$SESSION_NAME-1
290 stop_lttng_tracing_ok
$SESSION_NAME-2
291 destroy_lttng_session_ok
$SESSION_NAME-1
292 destroy_lttng_session_ok
$SESSION_NAME-2
294 # Validate test. Expecting NO event of the first TP.
295 trace_match_only
$EVENT_NAME 0 "$TRACE_PATH"/$SESSION_NAME-1
297 # Validate test. Expecting all events of the first TP.
298 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME-2
301 function test_log4j_multi_session_disable_wildcard_middle
()
304 diag
"Test LOG4J with multiple session with disabled wildcard (at the middle) event"
306 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
307 enable_log4j_lttng_event
$SESSION_NAME-1 "$ev_name"
309 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
310 enable_log4j_lttng_event
$SESSION_NAME-2 "$ev_name"
312 disable_log4j_lttng_event
$SESSION_NAME-1 "$ev_name"
314 start_lttng_tracing_ok
$SESSION_NAME-1
315 start_lttng_tracing_ok
$SESSION_NAME-2
319 stop_lttng_tracing_ok
$SESSION_NAME-1
320 stop_lttng_tracing_ok
$SESSION_NAME-2
321 destroy_lttng_session_ok
$SESSION_NAME-1
322 destroy_lttng_session_ok
$SESSION_NAME-2
324 # Validate test. Expecting NO event of the first TP.
325 trace_match_only
$EVENT_NAME 0 "$TRACE_PATH"/$SESSION_NAME-1
327 # Validate test. Expecting all events of the first TP.
328 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME-2
331 function test_log4j_multi_session_disable_wildcard_end
()
334 diag
"Test LOG4J with multiple session with disabled wildcard (at the end) event"
336 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
337 enable_log4j_lttng_event
$SESSION_NAME-1 "$ev_name"
339 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
340 enable_log4j_lttng_event
$SESSION_NAME-2 "$ev_name"
342 disable_log4j_lttng_event
$SESSION_NAME-1 "$ev_name"
344 start_lttng_tracing_ok
$SESSION_NAME-1
345 start_lttng_tracing_ok
$SESSION_NAME-2
349 stop_lttng_tracing_ok
$SESSION_NAME-1
350 stop_lttng_tracing_ok
$SESSION_NAME-2
351 destroy_lttng_session_ok
$SESSION_NAME-1
352 destroy_lttng_session_ok
$SESSION_NAME-2
354 # Validate test. Expecting NO event of the first TP.
355 trace_match_only
$EVENT_NAME 0 "$TRACE_PATH"/$SESSION_NAME-1
357 # Validate test. Expecting all events of the first TP.
358 trace_matches
$EVENT_NAME $
(( NR_ITER
+ 1 )) "$TRACE_PATH"/$SESSION_NAME-2
360 trace_matches
$EVENT_NAME2 1 "$TRACE_PATH"/$SESSION_NAME-2
363 function test_log4j_disable_all
()
365 diag
"Test LOG4J with multiple session with disabled all event"
367 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/$SESSION_NAME
368 enable_log4j_lttng_event
$SESSION_NAME '*'
369 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
370 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
372 disable_log4j_lttng_event
$SESSION_NAME -a
374 start_lttng_tracing_ok
$SESSION_NAME
378 stop_lttng_tracing_ok
$SESSION_NAME
379 destroy_lttng_session_ok
$SESSION_NAME
381 # Validate test. Expecting NO event of the first TP and second TP.
382 trace_match_only
$EVENT_NAME 0 "$TRACE_PATH"/$SESSION_NAME
383 trace_match_only
$EVENT_NAME2 0 "$TRACE_PATH"/$SESSION_NAME
386 function test_log4j_multi_session
()
388 diag
"Test LOG4J with multiple session"
390 create_lttng_session_ok
$SESSION_NAME-1 "$TRACE_PATH"/$SESSION_NAME-1
391 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
392 start_lttng_tracing_ok
$SESSION_NAME-1
394 create_lttng_session_ok
$SESSION_NAME-2 "$TRACE_PATH"/$SESSION_NAME-2
395 enable_log4j_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
396 start_lttng_tracing_ok
$SESSION_NAME-2
398 # Run 5 times with a 1 second delay and fire second TP.
401 stop_lttng_tracing_ok
$SESSION_NAME-1
402 stop_lttng_tracing_ok
$SESSION_NAME-2
403 destroy_lttng_session_ok
$SESSION_NAME-1
404 destroy_lttng_session_ok
$SESSION_NAME-2
406 # Validate test. Expecting all events of first TP
407 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME-1
409 # Validate test. Expecting one event of the second TP.
410 trace_match_only
$EVENT_NAME2 1 "$TRACE_PATH"/$SESSION_NAME-2
413 function test_log4j_destroy_session
()
415 diag
"Test LOG4J two session with destroy"
417 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/first-sess
418 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
419 start_lttng_tracing_ok
$SESSION_NAME
421 # Run 5 times with a 1 second delay
422 run_app_background
0 1
423 # Wait for the applications started in background
426 stop_lttng_tracing_ok
$SESSION_NAME
427 destroy_lttng_session_ok
$SESSION_NAME
429 # Validate test. Expecting at least one event num 1
430 validate_trace
$EVENT_NAME "$TRACE_PATH"/first-sess
432 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/second-sess
433 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
434 start_lttng_tracing_ok
$SESSION_NAME
436 # Run 5 times with a 1 second delay
437 run_app_background
0 1
438 # Wait for the applications started in background
441 stop_lttng_tracing_ok
$SESSION_NAME
442 destroy_lttng_session_ok
$SESSION_NAME
444 # Validate test. Expecting only one event num 2
445 trace_match_only
$EVENT_NAME2 1 "$TRACE_PATH"/second-sess
448 function test_log4j_filtering
()
450 diag
"Test LOG4J filtering"
452 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/$SESSION_NAME
453 # Enable all event with a filter.
454 enable_log4j_lttng_event_filter
$SESSION_NAME '*' 'msg == "LOG4J second logger fired"'
455 start_lttng_tracing_ok
$SESSION_NAME
457 # Run 5 times with a 1 second delay and fire second TP.
460 stop_lttng_tracing_ok
$SESSION_NAME
461 destroy_lttng_session_ok
$SESSION_NAME
463 # Validate test. Expecting one event of the second TP only.
464 trace_match_only
$EVENT_NAME2 1 "$TRACE_PATH"/$SESSION_NAME
466 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/$SESSION_NAME
467 # Enable first Logger but filter msg payload for the INFO one while
468 # triggering the debug and second TP.
469 enable_log4j_lttng_event_filter
$SESSION_NAME $EVENT_NAME 'msg == "LOG4J tp fired!"'
470 start_lttng_tracing_ok
$SESSION_NAME
472 # Run 5 times with a 1 second delay, fire debug and second TP.
475 stop_lttng_tracing_ok
$SESSION_NAME
476 destroy_lttng_session_ok
$SESSION_NAME
478 # Validate test. Expecting NR_ITER event of the main INFO tp.
479 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME
482 function test_log4j_disable
()
484 diag
"Test LOG4J disable event"
486 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/$SESSION_NAME
487 # Enable all event with a filter.
488 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
489 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
490 disable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
491 start_lttng_tracing_ok
$SESSION_NAME
493 # Run 5 times with a 1 second delay and fire second TP.
496 stop_lttng_tracing_ok
$SESSION_NAME
497 destroy_lttng_session_ok
$SESSION_NAME
499 # Validate test. Expecting one event of the second TP only.
500 trace_match_only
$EVENT_NAME2 1 "$TRACE_PATH"/$SESSION_NAME
503 function test_log4j_disable_enable
()
505 diag
"Test LOG4J disable event followed by an enable"
507 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/$SESSION_NAME
508 # Enable all event with a filter.
509 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
510 disable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
511 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
512 start_lttng_tracing_ok
$SESSION_NAME
514 # Run 5 times with a 1 second delay and fire second TP.
517 stop_lttng_tracing_ok
$SESSION_NAME
518 destroy_lttng_session_ok
$SESSION_NAME
520 # Validate test. Expecting NR_ITER event of the main INFO tp.
521 trace_match_only
$EVENT_NAME $NR_ITER "$TRACE_PATH"/$SESSION_NAME
524 function test_log4j_filter_loglevel
()
526 local BOGUS_EVENT_NAME
="not_a_real_event"
527 local FILTER
="int_loglevel > 700 || int_loglevel < 700"
530 diag
"Test LOG4J a filter with a loglevel"
532 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"/$SESSION_NAME
533 # Enable an event with a filter and the loglevel-only option.
534 enable_log4j_lttng_event_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" LOG4J_INFO
535 disable_log4j_lttng_event
$SESSION_NAME $BOGUS_EVENT_NAME
536 enable_log4j_lttng_event_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" LOG4J_INFO
537 start_lttng_tracing_ok
$SESSION_NAME
539 # Run 5 times with a 1 second delay and fire second TP.
542 stop_lttng_tracing_ok
$SESSION_NAME
543 destroy_lttng_session_ok
$SESSION_NAME
545 # Validate test. Expecting no events.
546 trace_match_only
$ALL_EVENTS 0 "$TRACE_PATH"/$SESSION_NAME
549 plan_tests
$NUM_TESTS
551 print_test_banner
"$TEST_DESC"
553 bail_out_if_no_babeltrace
555 test -f "$TESTAPP_PATH.class"
556 ok $?
"Testapp '$TESTAPP_NAME' present"
561 test_log4j_multi_session_disable_wildcard
562 test_log4j_multi_session_disable_wildcard_begin
563 test_log4j_multi_session_disable_wildcard_middle
564 test_log4j_multi_session_disable_wildcard_end
565 test_log4j_multi_session_disable
567 test_log4j_disable_enable
568 test_log4j_disable_all
570 test_log4j_multi_session_loglevel
571 test_log4j_destroy_session
573 test_log4j_loglevel_multiple
574 test_log4j_before_start
575 test_log4j_after_start
576 test_log4j_multi_session
577 test_log4j_filter_loglevel
580 for fct_test
in "${tests[@]}";
582 TRACE_PATH
=$
(mktemp
--tmpdir -d tmp.test_java_log4j_trace_path.XXXXXX
)