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/lib/lttng/java/liblttng-ust-jul.jar:/usr/lib/lttng/java/liblttng-ust-jul.jar"
31
32 NUM_TESTS=139
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 wait_apps
45 {
46 while [ -n "$(pidof java)" ]; do
47 sleep 0.5
48 done
49 pass "Wait for applications to end"
50 }
51
52 function enable_jul_loglevel_only()
53 {
54 sess_name=$1
55 event_name="$2"
56 loglevel=$3
57 channel_name=$4
58
59 if [ -z $channel_name ]; then
60 # default channel if none specified
61 chan=""
62 else
63 chan="-c $channel_name"
64 fi
65
66 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" $chan -s $sess_name -j >/dev/null 2>&1
67 ok $? "Enable JUL event $event_name for session $sess_name with loglevel-only $loglevel"
68 }
69
70 function enable_jul_filter()
71 {
72 local sess_name="$1"
73 local event_name="$2"
74 local filter="$3"
75
76 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -j --filter "$filter" >/dev/null 2>&1
77 ok $? "Enable event $event_name with filter $filter for session $sess_name"
78 }
79
80 # MUST set TESTDIR before calling those functions
81
82 function test_jul_before_start ()
83 {
84 diag "Test JUL application BEFORE tracing starts"
85 create_lttng_session $SESSION_NAME $TRACE_PATH
86 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
87
88 # Run 5 times with a 1 second delay
89 run_app
90
91 #FIXME: racy missing synchronization
92
93 start_lttng_tracing $SESSION_NAME
94
95 # Wait for the applications started in background
96 wait
97
98 stop_lttng_tracing $SESSION_NAME
99 destroy_lttng_session $SESSION_NAME
100
101 # Validate test. Expecting all events.
102 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
103 if [ $? -ne 0 ]; then
104 return $?
105 fi
106 }
107
108 function test_jul_after_start ()
109 {
110 diag "Test JUL application AFTER tracing starts"
111
112 create_lttng_session $SESSION_NAME $TRACE_PATH
113 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
114 start_lttng_tracing $SESSION_NAME
115
116 # Run 5 times with a 1 second delay
117 run_app
118
119 wait_apps
120
121 stop_lttng_tracing $SESSION_NAME
122 destroy_lttng_session $SESSION_NAME
123
124 # Validate test. Expecting all events.
125 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
126 if [ $? -ne 0 ]; then
127 return $?
128 fi
129 }
130
131 function test_jul_loglevel ()
132 {
133 diag "Test JUL application with loglevel"
134
135 create_lttng_session $SESSION_NAME $TRACE_PATH
136 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_INFO"
137 start_lttng_tracing $SESSION_NAME
138
139 # Run 5 times with a 1 second delay
140 run_app
141
142 wait_apps
143
144 stop_lttng_tracing $SESSION_NAME
145 destroy_lttng_session $SESSION_NAME
146
147 # Validate test. Expecting all events.
148 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
149 if [ $? -ne 0 ]; then
150 return $?
151 fi
152
153 diag "Test JUL applications with lower loglevel"
154
155 create_lttng_session $SESSION_NAME $TRACE_PATH
156 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_SEVERE"
157 start_lttng_tracing $SESSION_NAME
158
159 # Run 5 times with a 1 second delay
160 run_app
161
162 wait_apps
163
164 stop_lttng_tracing $SESSION_NAME
165 destroy_lttng_session $SESSION_NAME
166
167 # Validate test. Expecting 0 events.
168 trace_matches $EVENT_NAME 0 $TRACE_PATH
169 if [ $? -ne 0 ]; then
170 return $?
171 fi
172
173 diag "Test JUL applications with higher loglevel"
174
175 create_lttng_session $SESSION_NAME $TRACE_PATH
176 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_FINER"
177 start_lttng_tracing $SESSION_NAME
178
179 # Run 5 times with a 1 second delay
180 run_app
181
182 wait_apps
183
184 stop_lttng_tracing $SESSION_NAME
185 destroy_lttng_session $SESSION_NAME
186
187 # Validate test. Expecting all events.
188 trace_matches $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 wait_apps
204
205 stop_lttng_tracing $SESSION_NAME
206 destroy_lttng_session $SESSION_NAME
207
208 # Validate test. Expecting all events times two.
209 trace_matches $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
210 if [ $? -ne 0 ]; then
211 return $?
212 fi
213
214 create_lttng_session $SESSION_NAME $TRACE_PATH
215 enable_jul_lttng_event_loglevel $SESSION_NAME '*' "JUL_INFO"
216 enable_jul_lttng_event_loglevel $SESSION_NAME '*' "JUL_FINEST"
217 start_lttng_tracing $SESSION_NAME
218
219 # Run 5 times with a 1 second delay and fire two TP.
220 run_app 1
221 wait_apps
222
223 stop_lttng_tracing $SESSION_NAME
224 destroy_lttng_session $SESSION_NAME
225
226 # Validate test. Expecting all events times two.
227 trace_matches $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
228 if [ $? -ne 0 ]; then
229 return $?
230 fi
231 }
232
233 function test_jul_multi_session_loglevel()
234 {
235 diag "Test JUL with multiple session"
236
237 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
238 enable_jul_loglevel_only $SESSION_NAME-1 '*' "JUL_INFO"
239 start_lttng_tracing $SESSION_NAME-1
240
241 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
242 enable_jul_loglevel_only $SESSION_NAME-2 '*' "JUL_FINEST"
243 start_lttng_tracing $SESSION_NAME-2
244
245 # Run 5 times with a 1 second delay and fire second TP.
246 run_app 1 1
247 wait_apps
248
249 stop_lttng_tracing $SESSION_NAME-1
250 stop_lttng_tracing $SESSION_NAME-2
251 destroy_lttng_session $SESSION_NAME-1
252 destroy_lttng_session $SESSION_NAME-2
253
254 # Expecting 6 events being the main event plus the second tp.
255 trace_matches $EVENT_NAME $(($NR_ITER + 1)) $TRACE_PATH/$SESSION_NAME-1
256 if [ $? -ne 0 ]; then
257 return $?
258 fi
259
260 # Expectin 5 events being the finest TP.
261 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
262 if [ $? -ne 0 ]; then
263 return $?
264 fi
265 }
266
267 function test_jul_multi_session_disable()
268 {
269 diag "Test JUL with multiple session with disabled event"
270
271 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
272 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
273 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME2
274 disable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
275 start_lttng_tracing $SESSION_NAME-1
276
277 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
278 enable_jul_lttng_event $SESSION_NAME-2 $EVENT_NAME2
279 start_lttng_tracing $SESSION_NAME-2
280
281 # Run 5 times with a 1 second delay and fire second TP.
282 run_app 0 1
283 wait_apps
284
285 stop_lttng_tracing $SESSION_NAME-1
286 stop_lttng_tracing $SESSION_NAME-2
287 destroy_lttng_session $SESSION_NAME-1
288 destroy_lttng_session $SESSION_NAME-2
289
290 # Validate test. Expecting one event of the second TP.
291 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
292 if [ $? -ne 0 ]; then
293 return $?
294 fi
295
296 # Validate test. Expecting one event of the second TP.
297 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
298 if [ $? -ne 0 ]; then
299 return $?
300 fi
301 }
302
303 function test_jul_multi_session()
304 {
305 diag "Test JUL with multiple session"
306
307 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
308 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
309 start_lttng_tracing $SESSION_NAME-1
310
311 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
312 enable_jul_lttng_event $SESSION_NAME-2 $EVENT_NAME2
313 start_lttng_tracing $SESSION_NAME-2
314
315 # Run 5 times with a 1 second delay and fire second TP.
316 run_app 0 1
317 wait_apps
318
319 stop_lttng_tracing $SESSION_NAME-1
320 stop_lttng_tracing $SESSION_NAME-2
321 destroy_lttng_session $SESSION_NAME-1
322 destroy_lttng_session $SESSION_NAME-2
323
324 # Validate test. Expecting all events of first TP
325 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
326 if [ $? -ne 0 ]; then
327 return $?
328 fi
329
330 # Validate test. Expecting one event of the second TP.
331 trace_matches $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
332 if [ $? -ne 0 ]; then
333 return $?
334 fi
335 }
336
337 function test_jul_destroy_session()
338 {
339 diag "Test JUL two session with destroy"
340
341 create_lttng_session $SESSION_NAME $TRACE_PATH/first-sess
342 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
343 start_lttng_tracing $SESSION_NAME
344
345 # Run 5 times with a 1 second delay
346 run_app 0 1
347
348 # Wait for the applications started in background
349 wait
350
351 stop_lttng_tracing $SESSION_NAME
352 destroy_lttng_session $SESSION_NAME
353
354 # Validate test. Expecting at least one event num 1
355 validate_trace $EVENT_NAME $TRACE_PATH/first-sess
356 if [ $? -ne 0 ]; then
357 return $?
358 fi
359
360 create_lttng_session $SESSION_NAME $TRACE_PATH/second-sess
361 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
362 start_lttng_tracing $SESSION_NAME
363
364 # Run 5 times with a 1 second delay
365 run_app_background 0 1
366
367 # Wait for the applications started in background
368 wait
369
370 stop_lttng_tracing $SESSION_NAME
371 destroy_lttng_session $SESSION_NAME
372
373 # Validate test. Expecting only one event num 2
374 trace_matches $EVENT_NAME2 1 $TRACE_PATH/second-sess
375 if [ $? -ne 0 ]; then
376 return $?
377 fi
378 }
379
380 function test_jul_filtering()
381 {
382 diag "Test JUL filtering"
383
384 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
385 # Enable all event with a filter.
386 enable_jul_filter $SESSION_NAME '*' 'msg == "JUL second logger fired"'
387 start_lttng_tracing $SESSION_NAME
388
389 # Run 5 times with a 1 second delay and fire second TP.
390 run_app 0 1
391 wait_apps
392
393 stop_lttng_tracing $SESSION_NAME
394 destroy_lttng_session $SESSION_NAME
395
396 # Validate test. Expecting one event of the second TP only.
397 trace_matches $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
398 if [ $? -ne 0 ]; then
399 return $?
400 fi
401
402 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
403 # Enable first Logger but filter msg payload for the INFO one while
404 # triggering the finest and second TP.
405 enable_jul_filter $SESSION_NAME $EVENT_NAME 'msg == "JUL tp fired!"'
406 start_lttng_tracing $SESSION_NAME
407
408 # Run 5 times with a 1 second delay, fire finest and second TP.
409 run_app 1 1
410 wait_apps
411
412 stop_lttng_tracing $SESSION_NAME
413 destroy_lttng_session $SESSION_NAME
414
415 # Validate test. Expecting NR_ITER event of the main INFO tp.
416 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
417 if [ $? -ne 0 ]; then
418 return $?
419 fi
420 }
421
422 function test_jul_disable()
423 {
424 diag "Test JUL disable event"
425
426 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
427 # Enable all event with a filter.
428 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
429 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
430 disable_jul_lttng_event $SESSION_NAME $EVENT_NAME
431 start_lttng_tracing $SESSION_NAME
432
433 # Run 5 times with a 1 second delay and fire second TP.
434 run_app 0 1
435 wait_apps
436
437 stop_lttng_tracing $SESSION_NAME
438 destroy_lttng_session $SESSION_NAME
439
440 # Validate test. Expecting one event of the second TP only.
441 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
442 if [ $? -ne 0 ]; then
443 return $?
444 fi
445 }
446
447 function test_jul_disable_enable()
448 {
449 diag "Test JUL disable event followed by an enable"
450
451 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
452 # Enable all event with a filter.
453 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
454 disable_jul_lttng_event $SESSION_NAME $EVENT_NAME
455 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
456 start_lttng_tracing $SESSION_NAME
457
458 # Run 5 times with a 1 second delay and fire second TP.
459 run_app 0 1
460 wait_apps
461
462 stop_lttng_tracing $SESSION_NAME
463 destroy_lttng_session $SESSION_NAME
464
465 # Validate test. Expecting NR_ITER event of the main INFO tp.
466 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
467 if [ $? -ne 0 ]; then
468 return $?
469 fi
470 }
471
472 plan_tests $NUM_TESTS
473
474 print_test_banner "$TEST_DESC"
475
476 if [ ! -f "$TESTAPP_PATH.class" ]; then
477 withapp=0
478 else
479 withapp=1
480 fi
481
482 skip $withapp "JUL support is needed. Skipping all tests." $NUM_TESTS ||
483 {
484 start_lttng_sessiond
485
486 tests=(
487 test_jul_multi_session_disable
488 test_jul_disable
489 test_jul_disable_enable
490 test_jul_filtering
491 test_jul_multi_session_loglevel
492 test_jul_destroy_session
493 test_jul_loglevel
494 test_jul_loglevel_multiple
495 test_jul_before_start
496 test_jul_after_start
497 test_jul_multi_session
498 )
499
500 for fct_test in ${tests[@]};
501 do
502 TRACE_PATH=$(mktemp -d)
503
504 ${fct_test}
505 if [ $? -ne 0 ]; then
506 break;
507 fi
508 rm -rf $TRACE_PATH
509 done
510
511 stop_lttng_sessiond
512 }
This page took 0.040932 seconds and 4 git commands to generate.