3 # Copyright (C) - 2014 David Goulet <dgoulet@efficios.com>
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.
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
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.
18 TEST_DESC
="Java LOG4J support"
21 TESTDIR
=$CURDIR/..
/..
/..
24 TESTAPP_NAME
="JTestLTTng"
25 TESTAPP_BIN
="$TESTAPP_NAME.java"
26 TESTAPP_PATH
="$CURDIR/$TESTAPP_NAME"
28 EVENT_NAME
="log4j-event"
29 EVENT_NAME2
="log4j-event-2"
30 JAVA_CP
="$CURDIR:/usr/local/share/java/liblttng-ust-agent.jar:/usr/share/java/*"
31 OUTPUT_DEST
="/dev/null"
35 source $TESTDIR/utils
/utils.sh
40 local fire_second_tp
=$2
42 java
-cp $JAVA_CP -Djava.library.path
="/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $debug_tp $fire_second_tp >/dev
/null
2>&1
45 function run_app_background
50 function enable_log4j_loglevel_only
()
57 if [ -z $channel_name ]; then
58 # default channel if none specified
61 chan
="-c $channel_name"
64 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel-only $loglevel "$event_name" $chan -s $sess_name -l >/dev
/null
2>&1
65 ok $?
"Enable LOG4J event $event_name for session $sess_name with loglevel-only $loglevel"
68 function enable_log4j_filter
()
74 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" -s $sess_name -l --filter "$filter" >/dev
/null
2>&1
75 ok $?
"Enable event $event_name with filter $filter for session $sess_name"
78 function enable_log4j_filter_loglevel_only
()
85 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel-only $loglevel "$event_name" -s $sess_name -l --filter "$filter" >/dev
/null
2>&1
86 ok $?
"Enable event $event_name with filter \"$filter\" and loglevel-only $loglevel for session $sess_name"
89 # MUST set TESTDIR before calling those functions
91 function test_log4j_before_start
()
93 diag
"Test LOG4J application BEFORE tracing starts"
94 create_lttng_session
$SESSION_NAME $TRACE_PATH
95 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
97 # Run 5 times with a 1 second delay
100 #FIXME: racy missing synchronization
102 start_lttng_tracing
$SESSION_NAME
104 # Wait for the applications started in background
107 stop_lttng_tracing
$SESSION_NAME
108 destroy_lttng_session
$SESSION_NAME
110 # Validate test. Expecting all events.
111 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
112 if [ $?
-ne 0 ]; then
117 function test_log4j_after_start
()
119 diag
"Test LOG4J application AFTER tracing starts"
121 create_lttng_session
$SESSION_NAME $TRACE_PATH
122 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
123 start_lttng_tracing
$SESSION_NAME
125 # Run 5 times with a 1 second delay
128 stop_lttng_tracing
$SESSION_NAME
129 destroy_lttng_session
$SESSION_NAME
131 # Validate test. Expecting all events.
132 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
133 if [ $?
-ne 0 ]; then
138 function test_log4j_loglevel
()
140 diag
"Test LOG4J application with loglevel"
142 create_lttng_session
$SESSION_NAME $TRACE_PATH
143 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_INFO"
144 start_lttng_tracing
$SESSION_NAME
146 # Run 5 times with a 1 second delay
149 stop_lttng_tracing
$SESSION_NAME
150 destroy_lttng_session
$SESSION_NAME
152 # Validate test. Expecting all events.
153 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
154 if [ $?
-ne 0 ]; then
158 diag
"Test LOG4J applications with lower loglevel"
160 create_lttng_session
$SESSION_NAME $TRACE_PATH
161 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_FATAL"
162 start_lttng_tracing
$SESSION_NAME
164 # Run 5 times with a 1 second delay
167 stop_lttng_tracing
$SESSION_NAME
168 destroy_lttng_session
$SESSION_NAME
170 # Validate test. Expecting 0 events.
171 trace_match_only
$EVENT_NAME 0 $TRACE_PATH
172 if [ $?
-ne 0 ]; then
176 diag
"Test LOG4J applications with higher loglevel"
178 create_lttng_session
$SESSION_NAME $TRACE_PATH
179 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_TRACE"
180 start_lttng_tracing
$SESSION_NAME
182 # Run 5 times with a 1 second delay
185 stop_lttng_tracing
$SESSION_NAME
186 destroy_lttng_session
$SESSION_NAME
188 # Validate test. Expecting all events.
189 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
193 function test_log4j_loglevel_multiple
()
195 diag
"Test LOG4J application with multiple loglevel"
197 create_lttng_session
$SESSION_NAME $TRACE_PATH
198 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_INFO"
199 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_DEBUG"
200 start_lttng_tracing
$SESSION_NAME
202 # Run 5 times with a 1 second delay and fire two TP.
205 stop_lttng_tracing
$SESSION_NAME
206 destroy_lttng_session
$SESSION_NAME
208 # Validate test. Expecting all events times two.
209 trace_match_only
$EVENT_NAME $
(($NR_ITER * 2)) $TRACE_PATH
210 if [ $?
-ne 0 ]; then
214 create_lttng_session
$SESSION_NAME $TRACE_PATH
215 enable_log4j_lttng_event_loglevel
$SESSION_NAME '*' "LOG4J_INFO"
216 enable_log4j_lttng_event_loglevel
$SESSION_NAME '*' "LOG4J_DEBUG"
217 start_lttng_tracing
$SESSION_NAME
219 # Run 5 times with a 1 second delay and fire two TP.
222 stop_lttng_tracing
$SESSION_NAME
223 destroy_lttng_session
$SESSION_NAME
225 # Validate test. Expecting all events times two.
226 trace_match_only
$EVENT_NAME $
(($NR_ITER * 2)) $TRACE_PATH
227 if [ $?
-ne 0 ]; then
232 function test_log4j_multi_session_loglevel
()
234 diag
"Test LOG4J with multiple session"
236 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
237 enable_log4j_loglevel_only
$SESSION_NAME-1 '*' "LOG4J_INFO"
238 start_lttng_tracing
$SESSION_NAME-1
240 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
241 enable_log4j_loglevel_only
$SESSION_NAME-2 '*' "LOG4J_DEBUG"
242 start_lttng_tracing
$SESSION_NAME-2
244 # Run 5 times with a 1 second delay and fire second TP.
247 stop_lttng_tracing
$SESSION_NAME-1
248 stop_lttng_tracing
$SESSION_NAME-2
249 destroy_lttng_session
$SESSION_NAME-1
250 destroy_lttng_session
$SESSION_NAME-2
252 # Expecting 6 events being the main event plus the second tp.
253 trace_match_only
$EVENT_NAME $
(($NR_ITER + 1)) $TRACE_PATH/$SESSION_NAME-1
254 if [ $?
-ne 0 ]; then
258 # Expectin 5 events being the debug TP.
259 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
260 if [ $?
-ne 0 ]; then
265 function test_log4j_multi_session_disable
()
267 diag
"Test LOG4J with multiple session with disabled event"
269 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
270 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
271 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME2
272 disable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
273 start_lttng_tracing
$SESSION_NAME-1
275 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
276 enable_log4j_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
277 start_lttng_tracing
$SESSION_NAME-2
279 # Run 5 times with a 1 second delay and fire second TP.
282 stop_lttng_tracing
$SESSION_NAME-1
283 stop_lttng_tracing
$SESSION_NAME-2
284 destroy_lttng_session
$SESSION_NAME-1
285 destroy_lttng_session
$SESSION_NAME-2
287 # Validate test. Expecting one event of the second TP.
288 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
289 if [ $?
-ne 0 ]; then
293 # Validate test. Expecting one event of the second TP.
294 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
295 if [ $?
-ne 0 ]; then
300 function test_log4j_multi_session_disable_wildcard
()
302 diag
"Test LOG4J with multiple session with disabled wildcard event"
304 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
305 enable_log4j_lttng_event
$SESSION_NAME-1 '*'
307 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
308 enable_log4j_lttng_event
$SESSION_NAME-2 '*'
310 disable_log4j_lttng_event
$SESSION_NAME-1 '*'
312 start_lttng_tracing
$SESSION_NAME-1
313 start_lttng_tracing
$SESSION_NAME-2
317 stop_lttng_tracing
$SESSION_NAME-1
318 stop_lttng_tracing
$SESSION_NAME-2
319 destroy_lttng_session
$SESSION_NAME-1
320 destroy_lttng_session
$SESSION_NAME-2
322 # Validate test. Expecting NO event of the first TP.
323 trace_match_only
$EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME-1
324 if [ $?
-ne 0 ]; then
328 # Validate test. Expecting all events of the first TP.
329 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
330 if [ $?
-ne 0 ]; then
335 function test_log4j_disable_all
()
337 diag
"Test LOG4J with multiple session with disabled all event"
339 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
340 enable_log4j_lttng_event
$SESSION_NAME '*'
341 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
342 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
344 disable_log4j_lttng_event
$SESSION_NAME '*'
346 start_lttng_tracing
$SESSION_NAME
350 stop_lttng_tracing
$SESSION_NAME
351 destroy_lttng_session
$SESSION_NAME
353 # Validate test. Expecting NO event of the first TP and second TP.
354 trace_match_only
$EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME
355 trace_match_only
$EVENT_NAME2 0 $TRACE_PATH/$SESSION_NAME
356 if [ $?
-ne 0 ]; then
361 function test_log4j_multi_session
()
363 diag
"Test LOG4J with multiple session"
365 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
366 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
367 start_lttng_tracing
$SESSION_NAME-1
369 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
370 enable_log4j_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
371 start_lttng_tracing
$SESSION_NAME-2
373 # Run 5 times with a 1 second delay and fire second TP.
376 stop_lttng_tracing
$SESSION_NAME-1
377 stop_lttng_tracing
$SESSION_NAME-2
378 destroy_lttng_session
$SESSION_NAME-1
379 destroy_lttng_session
$SESSION_NAME-2
381 # Validate test. Expecting all events of first TP
382 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
383 if [ $?
-ne 0 ]; then
387 # Validate test. Expecting one event of the second TP.
388 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
389 if [ $?
-ne 0 ]; then
394 function test_log4j_destroy_session
()
396 diag
"Test LOG4J two session with destroy"
398 create_lttng_session
$SESSION_NAME $TRACE_PATH/first-sess
399 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
400 start_lttng_tracing
$SESSION_NAME
402 # Run 5 times with a 1 second delay
403 run_app_background
0 1
404 # Wait for the applications started in background
407 stop_lttng_tracing
$SESSION_NAME
408 destroy_lttng_session
$SESSION_NAME
410 # Validate test. Expecting at least one event num 1
411 validate_trace
$EVENT_NAME $TRACE_PATH/first-sess
412 if [ $?
-ne 0 ]; then
416 create_lttng_session
$SESSION_NAME $TRACE_PATH/second-sess
417 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
418 start_lttng_tracing
$SESSION_NAME
420 # Run 5 times with a 1 second delay
421 run_app_background
0 1
422 # Wait for the applications started in background
425 stop_lttng_tracing
$SESSION_NAME
426 destroy_lttng_session
$SESSION_NAME
428 # Validate test. Expecting only one event num 2
429 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/second-sess
430 if [ $?
-ne 0 ]; then
435 function test_log4j_filtering
()
437 diag
"Test LOG4J filtering"
439 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
440 # Enable all event with a filter.
441 enable_log4j_filter
$SESSION_NAME '*' 'msg == "LOG4J second logger fired"'
442 start_lttng_tracing
$SESSION_NAME
444 # Run 5 times with a 1 second delay and fire second TP.
447 stop_lttng_tracing
$SESSION_NAME
448 destroy_lttng_session
$SESSION_NAME
450 # Validate test. Expecting one event of the second TP only.
451 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
452 if [ $?
-ne 0 ]; then
456 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
457 # Enable first Logger but filter msg payload for the INFO one while
458 # triggering the debug and second TP.
459 enable_log4j_filter
$SESSION_NAME $EVENT_NAME 'msg == "LOG4J tp fired!"'
460 start_lttng_tracing
$SESSION_NAME
462 # Run 5 times with a 1 second delay, fire debug and second TP.
465 stop_lttng_tracing
$SESSION_NAME
466 destroy_lttng_session
$SESSION_NAME
468 # Validate test. Expecting NR_ITER event of the main INFO tp.
469 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
470 if [ $?
-ne 0 ]; then
475 function test_log4j_disable
()
477 diag
"Test LOG4J disable event"
479 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
480 # Enable all event with a filter.
481 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
482 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
483 disable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
484 start_lttng_tracing
$SESSION_NAME
486 # Run 5 times with a 1 second delay and fire second TP.
489 stop_lttng_tracing
$SESSION_NAME
490 destroy_lttng_session
$SESSION_NAME
492 # Validate test. Expecting one event of the second TP only.
493 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
494 if [ $?
-ne 0 ]; then
499 function test_log4j_disable_enable
()
501 diag
"Test LOG4J disable event followed by an enable"
503 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
504 # Enable all event with a filter.
505 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
506 disable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
507 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
508 start_lttng_tracing
$SESSION_NAME
510 # Run 5 times with a 1 second delay and fire second TP.
513 stop_lttng_tracing
$SESSION_NAME
514 destroy_lttng_session
$SESSION_NAME
516 # Validate test. Expecting NR_ITER event of the main INFO tp.
517 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
518 if [ $?
-ne 0 ]; then
523 function test_log4j_filter_loglevel
()
525 local BOGUS_EVENT_NAME
="not_a_real_event"
526 local FILTER
="int_loglevel > 700 || int_loglevel < 700"
529 diag
"Test LOG4J a filter with a loglevel"
531 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
532 # Enable an event with a filter and the loglevel-only option.
533 enable_log4j_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" LOG4J_INFO
534 disable_log4j_lttng_event
$SESSION_NAME $BOGUS_EVENT_NAME
535 enable_log4j_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" LOG4J_INFO
536 start_lttng_tracing
$SESSION_NAME
538 # Run 5 times with a 1 second delay and fire second TP.
541 stop_lttng_tracing
$SESSION_NAME
542 destroy_lttng_session
$SESSION_NAME
544 # Validate test. Expecting no events.
545 trace_match_only
$ALL_EVENTS 0 $TRACE_PATH/$SESSION_NAME
546 if [ $?
-ne 0 ]; then
551 plan_tests
$NUM_TESTS
553 print_test_banner
"$TEST_DESC"
555 if [ ! -f "$TESTAPP_PATH.class" ]; then
561 skip
$withapp "LOG4J support is needed. Skipping all tests." $NUM_TESTS ||
566 test_log4j_multi_session_disable_wildcard
567 test_log4j_multi_session_disable
569 test_log4j_disable_enable
570 test_log4j_disable_all
572 test_log4j_multi_session_loglevel
573 test_log4j_destroy_session
575 test_log4j_loglevel_multiple
576 test_log4j_before_start
577 test_log4j_after_start
578 test_log4j_multi_session
579 test_log4j_filter_loglevel
582 for fct_test
in ${tests[@]};
584 TRACE_PATH
=$
(mktemp
-d)
587 if [ $?
-ne 0 ]; then