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 start_lttng_tracing
$SESSION_NAME
102 # Wait for the applications started in background
105 stop_lttng_tracing
$SESSION_NAME
106 destroy_lttng_session
$SESSION_NAME
108 # Validate test. Expecting all events.
109 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
110 if [ $?
-ne 0 ]; then
115 function test_log4j_after_start
()
117 diag
"Test LOG4J application AFTER tracing starts"
119 create_lttng_session
$SESSION_NAME $TRACE_PATH
120 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
121 start_lttng_tracing
$SESSION_NAME
123 # Run 5 times with a 1 second delay
126 stop_lttng_tracing
$SESSION_NAME
127 destroy_lttng_session
$SESSION_NAME
129 # Validate test. Expecting all events.
130 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
131 if [ $?
-ne 0 ]; then
136 function test_log4j_loglevel
()
138 diag
"Test LOG4J application with loglevel"
140 create_lttng_session
$SESSION_NAME $TRACE_PATH
141 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_INFO"
142 start_lttng_tracing
$SESSION_NAME
144 # Run 5 times with a 1 second delay
147 stop_lttng_tracing
$SESSION_NAME
148 destroy_lttng_session
$SESSION_NAME
150 # Validate test. Expecting all events.
151 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
152 if [ $?
-ne 0 ]; then
156 diag
"Test LOG4J applications with lower loglevel"
158 create_lttng_session
$SESSION_NAME $TRACE_PATH
159 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_FATAL"
160 start_lttng_tracing
$SESSION_NAME
162 # Run 5 times with a 1 second delay
165 stop_lttng_tracing
$SESSION_NAME
166 destroy_lttng_session
$SESSION_NAME
168 # Validate test. Expecting 0 events.
169 trace_match_only
$EVENT_NAME 0 $TRACE_PATH
170 if [ $?
-ne 0 ]; then
174 diag
"Test LOG4J applications with higher loglevel"
176 create_lttng_session
$SESSION_NAME $TRACE_PATH
177 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_TRACE"
178 start_lttng_tracing
$SESSION_NAME
180 # Run 5 times with a 1 second delay
183 stop_lttng_tracing
$SESSION_NAME
184 destroy_lttng_session
$SESSION_NAME
186 # Validate test. Expecting all events.
187 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
191 function test_log4j_loglevel_multiple
()
193 diag
"Test LOG4J application with multiple loglevel"
195 create_lttng_session
$SESSION_NAME $TRACE_PATH
196 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_INFO"
197 enable_log4j_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "LOG4J_DEBUG"
198 start_lttng_tracing
$SESSION_NAME
200 # Run 5 times with a 1 second delay and fire two TP.
203 stop_lttng_tracing
$SESSION_NAME
204 destroy_lttng_session
$SESSION_NAME
206 # Validate test. Expecting all events times two.
207 trace_match_only
$EVENT_NAME $
(($NR_ITER * 2)) $TRACE_PATH
208 if [ $?
-ne 0 ]; then
212 create_lttng_session
$SESSION_NAME $TRACE_PATH
213 enable_log4j_lttng_event_loglevel
$SESSION_NAME '*' "LOG4J_INFO"
214 enable_log4j_lttng_event_loglevel
$SESSION_NAME '*' "LOG4J_DEBUG"
215 start_lttng_tracing
$SESSION_NAME
217 # Run 5 times with a 1 second delay and fire two TP.
220 stop_lttng_tracing
$SESSION_NAME
221 destroy_lttng_session
$SESSION_NAME
223 # Validate test. Expecting all events times two.
224 trace_match_only
$EVENT_NAME $
(($NR_ITER * 2)) $TRACE_PATH
225 if [ $?
-ne 0 ]; then
230 function test_log4j_multi_session_loglevel
()
232 diag
"Test LOG4J with multiple session"
234 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
235 enable_log4j_loglevel_only
$SESSION_NAME-1 '*' "LOG4J_INFO"
236 start_lttng_tracing
$SESSION_NAME-1
238 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
239 enable_log4j_loglevel_only
$SESSION_NAME-2 '*' "LOG4J_DEBUG"
240 start_lttng_tracing
$SESSION_NAME-2
242 # Run 5 times with a 1 second delay and fire second TP.
245 stop_lttng_tracing
$SESSION_NAME-1
246 stop_lttng_tracing
$SESSION_NAME-2
247 destroy_lttng_session
$SESSION_NAME-1
248 destroy_lttng_session
$SESSION_NAME-2
250 # Expecting 6 events being the main event plus the second tp.
251 trace_match_only
$EVENT_NAME $
(($NR_ITER + 1)) $TRACE_PATH/$SESSION_NAME-1
252 if [ $?
-ne 0 ]; then
256 # Expectin 5 events being the debug TP.
257 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
258 if [ $?
-ne 0 ]; then
263 function test_log4j_multi_session_disable
()
265 diag
"Test LOG4J with multiple session with disabled event"
267 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
268 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
269 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME2
270 disable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
271 start_lttng_tracing
$SESSION_NAME-1
273 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
274 enable_log4j_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
275 start_lttng_tracing
$SESSION_NAME-2
277 # Run 5 times with a 1 second delay and fire second TP.
280 stop_lttng_tracing
$SESSION_NAME-1
281 stop_lttng_tracing
$SESSION_NAME-2
282 destroy_lttng_session
$SESSION_NAME-1
283 destroy_lttng_session
$SESSION_NAME-2
285 # Validate test. Expecting one event of the second TP.
286 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
287 if [ $?
-ne 0 ]; then
291 # Validate test. Expecting one event of the second TP.
292 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
293 if [ $?
-ne 0 ]; then
298 function test_log4j_multi_session_disable_wildcard
()
300 diag
"Test LOG4J with multiple session with disabled wildcard event"
302 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
303 enable_log4j_lttng_event
$SESSION_NAME-1 '*'
305 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
306 enable_log4j_lttng_event
$SESSION_NAME-2 '*'
308 disable_log4j_lttng_event
$SESSION_NAME-1 '*'
310 start_lttng_tracing
$SESSION_NAME-1
311 start_lttng_tracing
$SESSION_NAME-2
315 stop_lttng_tracing
$SESSION_NAME-1
316 stop_lttng_tracing
$SESSION_NAME-2
317 destroy_lttng_session
$SESSION_NAME-1
318 destroy_lttng_session
$SESSION_NAME-2
320 # Validate test. Expecting NO event of the first TP.
321 trace_match_only
$EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME-1
322 if [ $?
-ne 0 ]; then
326 # Validate test. Expecting all events of the first TP.
327 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
328 if [ $?
-ne 0 ]; then
333 function test_log4j_disable_all
()
335 diag
"Test LOG4J with multiple session with disabled all event"
337 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
338 enable_log4j_lttng_event
$SESSION_NAME '*'
339 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
340 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
342 disable_log4j_lttng_event
$SESSION_NAME '*'
344 start_lttng_tracing
$SESSION_NAME
348 stop_lttng_tracing
$SESSION_NAME
349 destroy_lttng_session
$SESSION_NAME
351 # Validate test. Expecting NO event of the first TP and second TP.
352 trace_match_only
$EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME
353 trace_match_only
$EVENT_NAME2 0 $TRACE_PATH/$SESSION_NAME
354 if [ $?
-ne 0 ]; then
359 function test_log4j_multi_session
()
361 diag
"Test LOG4J with multiple session"
363 create_lttng_session
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
364 enable_log4j_lttng_event
$SESSION_NAME-1 $EVENT_NAME
365 start_lttng_tracing
$SESSION_NAME-1
367 create_lttng_session
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
368 enable_log4j_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
369 start_lttng_tracing
$SESSION_NAME-2
371 # Run 5 times with a 1 second delay and fire second TP.
374 stop_lttng_tracing
$SESSION_NAME-1
375 stop_lttng_tracing
$SESSION_NAME-2
376 destroy_lttng_session
$SESSION_NAME-1
377 destroy_lttng_session
$SESSION_NAME-2
379 # Validate test. Expecting all events of first TP
380 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
381 if [ $?
-ne 0 ]; then
385 # Validate test. Expecting one event of the second TP.
386 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
387 if [ $?
-ne 0 ]; then
392 function test_log4j_destroy_session
()
394 diag
"Test LOG4J two session with destroy"
396 create_lttng_session
$SESSION_NAME $TRACE_PATH/first-sess
397 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
398 start_lttng_tracing
$SESSION_NAME
400 # Run 5 times with a 1 second delay
401 run_app_background
0 1
405 stop_lttng_tracing
$SESSION_NAME
406 destroy_lttng_session
$SESSION_NAME
408 # Validate test. Expecting at least one event num 1
409 validate_trace
$EVENT_NAME $TRACE_PATH/first-sess
410 if [ $?
-ne 0 ]; then
414 create_lttng_session
$SESSION_NAME $TRACE_PATH/second-sess
415 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
416 start_lttng_tracing
$SESSION_NAME
418 # Wait for the applications started in background
421 stop_lttng_tracing
$SESSION_NAME
422 destroy_lttng_session
$SESSION_NAME
424 # Validate test. Expecting only one event num 2
425 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/second-sess
426 if [ $?
-ne 0 ]; then
431 function test_log4j_filtering
()
433 diag
"Test LOG4J filtering"
435 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
436 # Enable all event with a filter.
437 enable_log4j_filter
$SESSION_NAME '*' 'msg == "LOG4J second logger fired"'
438 start_lttng_tracing
$SESSION_NAME
440 # Run 5 times with a 1 second delay and fire second TP.
443 stop_lttng_tracing
$SESSION_NAME
444 destroy_lttng_session
$SESSION_NAME
446 # Validate test. Expecting one event of the second TP only.
447 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
448 if [ $?
-ne 0 ]; then
452 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
453 # Enable first Logger but filter msg payload for the INFO one while
454 # triggering the debug and second TP.
455 enable_log4j_filter
$SESSION_NAME $EVENT_NAME 'msg == "LOG4J tp fired!"'
456 start_lttng_tracing
$SESSION_NAME
458 # Run 5 times with a 1 second delay, fire debug and second TP.
461 stop_lttng_tracing
$SESSION_NAME
462 destroy_lttng_session
$SESSION_NAME
464 # Validate test. Expecting NR_ITER event of the main INFO tp.
465 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
466 if [ $?
-ne 0 ]; then
471 function test_log4j_disable
()
473 diag
"Test LOG4J disable event"
475 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
476 # Enable all event with a filter.
477 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
478 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME2
479 disable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
480 start_lttng_tracing
$SESSION_NAME
482 # Run 5 times with a 1 second delay and fire second TP.
485 stop_lttng_tracing
$SESSION_NAME
486 destroy_lttng_session
$SESSION_NAME
488 # Validate test. Expecting one event of the second TP only.
489 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
490 if [ $?
-ne 0 ]; then
495 function test_log4j_disable_enable
()
497 diag
"Test LOG4J disable event followed by an enable"
499 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
500 # Enable all event with a filter.
501 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
502 disable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
503 enable_log4j_lttng_event
$SESSION_NAME $EVENT_NAME
504 start_lttng_tracing
$SESSION_NAME
506 # Run 5 times with a 1 second delay and fire second TP.
509 stop_lttng_tracing
$SESSION_NAME
510 destroy_lttng_session
$SESSION_NAME
512 # Validate test. Expecting NR_ITER event of the main INFO tp.
513 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
514 if [ $?
-ne 0 ]; then
519 function test_log4j_filter_loglevel
()
521 local BOGUS_EVENT_NAME
="not_a_real_event"
522 local FILTER
="int_loglevel > 700 || int_loglevel < 700"
525 diag
"Test LOG4J a filter with a loglevel"
527 create_lttng_session
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
528 # Enable an event with a filter and the loglevel-only option.
529 enable_log4j_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" LOG4J_INFO
530 disable_log4j_lttng_event
$SESSION_NAME $BOGUS_EVENT_NAME
531 enable_log4j_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" LOG4J_INFO
532 start_lttng_tracing
$SESSION_NAME
534 # Run 5 times with a 1 second delay and fire second TP.
537 stop_lttng_tracing
$SESSION_NAME
538 destroy_lttng_session
$SESSION_NAME
540 # Validate test. Expecting no events.
541 trace_match_only
$ALL_EVENTS 0 $TRACE_PATH/$SESSION_NAME
542 if [ $?
-ne 0 ]; then
547 plan_tests
$NUM_TESTS
549 print_test_banner
"$TEST_DESC"
551 if [ ! -f "$TESTAPP_PATH.class" ]; then
557 skip
$withapp "LOG4J support is needed. Skipping all tests." $NUM_TESTS ||
562 test_log4j_multi_session_disable_wildcard
563 test_log4j_multi_session_disable
565 test_log4j_disable_enable
566 test_log4j_disable_all
568 test_log4j_multi_session_loglevel
569 test_log4j_destroy_session
571 test_log4j_loglevel_multiple
572 test_log4j_before_start
573 test_log4j_after_start
574 test_log4j_multi_session
575 test_log4j_filter_loglevel
578 for fct_test
in ${tests[@]};
580 TRACE_PATH
=$
(mktemp
-d)
583 if [ $?
-ne 0 ]; then