Fix: test flaky sleep and wait patterns
[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 start_lttng_tracing $SESSION_NAME
92
93 # Wait for the applications started in background
94 wait
95
96 stop_lttng_tracing $SESSION_NAME
97 destroy_lttng_session $SESSION_NAME
98
99 # Validate test. Expecting all events.
100 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
101 if [ $? -ne 0 ]; then
102 return $?
103 fi
104 }
105
106 function test_jul_after_start ()
107 {
108 diag "Test JUL application AFTER tracing starts"
109
110 create_lttng_session $SESSION_NAME $TRACE_PATH
111 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
112 start_lttng_tracing $SESSION_NAME
113
114 # Run 5 times with a 1 second delay
115 run_app
116
117 wait_apps
118
119 stop_lttng_tracing $SESSION_NAME
120 destroy_lttng_session $SESSION_NAME
121
122 # Validate test. Expecting all events.
123 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
124 if [ $? -ne 0 ]; then
125 return $?
126 fi
127 }
128
129 function test_jul_loglevel ()
130 {
131 diag "Test JUL application with loglevel"
132
133 create_lttng_session $SESSION_NAME $TRACE_PATH
134 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_INFO"
135 start_lttng_tracing $SESSION_NAME
136
137 # Run 5 times with a 1 second delay
138 run_app
139
140 wait_apps
141
142 stop_lttng_tracing $SESSION_NAME
143 destroy_lttng_session $SESSION_NAME
144
145 # Validate test. Expecting all events.
146 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
147 if [ $? -ne 0 ]; then
148 return $?
149 fi
150
151 diag "Test JUL applications with lower loglevel"
152
153 create_lttng_session $SESSION_NAME $TRACE_PATH
154 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_SEVERE"
155 start_lttng_tracing $SESSION_NAME
156
157 # Run 5 times with a 1 second delay
158 run_app
159
160 wait_apps
161
162 stop_lttng_tracing $SESSION_NAME
163 destroy_lttng_session $SESSION_NAME
164
165 # Validate test. Expecting 0 events.
166 trace_matches $EVENT_NAME 0 $TRACE_PATH
167 if [ $? -ne 0 ]; then
168 return $?
169 fi
170
171 diag "Test JUL applications with higher loglevel"
172
173 create_lttng_session $SESSION_NAME $TRACE_PATH
174 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_FINER"
175 start_lttng_tracing $SESSION_NAME
176
177 # Run 5 times with a 1 second delay
178 run_app
179
180 wait_apps
181
182 stop_lttng_tracing $SESSION_NAME
183 destroy_lttng_session $SESSION_NAME
184
185 # Validate test. Expecting all events.
186 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
187 return $?
188 }
189
190 function test_jul_loglevel_multiple ()
191 {
192 diag "Test JUL application with multiple loglevel"
193
194 create_lttng_session $SESSION_NAME $TRACE_PATH
195 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_INFO"
196 enable_jul_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "JUL_FINEST"
197 start_lttng_tracing $SESSION_NAME
198
199 # Run 5 times with a 1 second delay and fire two TP.
200 run_app 1
201 wait_apps
202
203 stop_lttng_tracing $SESSION_NAME
204 destroy_lttng_session $SESSION_NAME
205
206 # Validate test. Expecting all events times two.
207 trace_matches $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
208 if [ $? -ne 0 ]; then
209 return $?
210 fi
211
212 create_lttng_session $SESSION_NAME $TRACE_PATH
213 enable_jul_lttng_event_loglevel $SESSION_NAME '*' "JUL_INFO"
214 enable_jul_lttng_event_loglevel $SESSION_NAME '*' "JUL_FINEST"
215 start_lttng_tracing $SESSION_NAME
216
217 # Run 5 times with a 1 second delay and fire two TP.
218 run_app 1
219 wait_apps
220
221 stop_lttng_tracing $SESSION_NAME
222 destroy_lttng_session $SESSION_NAME
223
224 # Validate test. Expecting all events times two.
225 trace_matches $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 wait_apps
246
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
251
252 # Expecting 6 events being the main event plus the second tp.
253 trace_matches $EVENT_NAME $(($NR_ITER + 1)) $TRACE_PATH/$SESSION_NAME-1
254 if [ $? -ne 0 ]; then
255 return $?
256 fi
257
258 # Expectin 5 events being the finest TP.
259 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
260 if [ $? -ne 0 ]; then
261 return $?
262 fi
263 }
264
265 function test_jul_multi_session_disable()
266 {
267 diag "Test JUL with multiple session with disabled event"
268
269 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
270 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
271 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME2
272 disable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
273 start_lttng_tracing $SESSION_NAME-1
274
275 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
276 enable_jul_lttng_event $SESSION_NAME-2 $EVENT_NAME2
277 start_lttng_tracing $SESSION_NAME-2
278
279 # Run 5 times with a 1 second delay and fire second TP.
280 run_app 0 1
281 wait_apps
282
283 stop_lttng_tracing $SESSION_NAME-1
284 stop_lttng_tracing $SESSION_NAME-2
285 destroy_lttng_session $SESSION_NAME-1
286 destroy_lttng_session $SESSION_NAME-2
287
288 # Validate test. Expecting one event of the second TP.
289 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
290 if [ $? -ne 0 ]; then
291 return $?
292 fi
293
294 # Validate test. Expecting one event of the second TP.
295 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
296 if [ $? -ne 0 ]; then
297 return $?
298 fi
299 }
300
301 function test_jul_multi_session()
302 {
303 diag "Test JUL with multiple session"
304
305 create_lttng_session $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
306 enable_jul_lttng_event $SESSION_NAME-1 $EVENT_NAME
307 start_lttng_tracing $SESSION_NAME-1
308
309 create_lttng_session $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
310 enable_jul_lttng_event $SESSION_NAME-2 $EVENT_NAME2
311 start_lttng_tracing $SESSION_NAME-2
312
313 # Run 5 times with a 1 second delay and fire second TP.
314 run_app 0 1
315 wait_apps
316
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
321
322 # Validate test. Expecting all events of first TP
323 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
324 if [ $? -ne 0 ]; then
325 return $?
326 fi
327
328 # Validate test. Expecting one event of the second TP.
329 trace_matches $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
330 if [ $? -ne 0 ]; then
331 return $?
332 fi
333 }
334
335 function test_jul_destroy_session()
336 {
337 diag "Test JUL two session with destroy"
338
339 create_lttng_session $SESSION_NAME $TRACE_PATH/first-sess
340 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
341 start_lttng_tracing $SESSION_NAME
342
343 # Run 5 times with a 1 second delay
344 run_app 0 1
345
346 # Wait for the applications started in background
347 wait
348
349 stop_lttng_tracing $SESSION_NAME
350 destroy_lttng_session $SESSION_NAME
351
352 # Validate test. Expecting at least one event num 1
353 validate_trace $EVENT_NAME $TRACE_PATH/first-sess
354 if [ $? -ne 0 ]; then
355 return $?
356 fi
357
358 create_lttng_session $SESSION_NAME $TRACE_PATH/second-sess
359 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
360 start_lttng_tracing $SESSION_NAME
361
362 # Run 5 times with a 1 second delay
363 run_app_background 0 1
364
365 # Wait for the applications started in background
366 wait
367
368 stop_lttng_tracing $SESSION_NAME
369 destroy_lttng_session $SESSION_NAME
370
371 # Validate test. Expecting only one event num 2
372 trace_matches $EVENT_NAME2 1 $TRACE_PATH/second-sess
373 if [ $? -ne 0 ]; then
374 return $?
375 fi
376 }
377
378 function test_jul_filtering()
379 {
380 diag "Test JUL filtering"
381
382 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
383 # Enable all event with a filter.
384 enable_jul_filter $SESSION_NAME '*' 'msg == "JUL second logger fired"'
385 start_lttng_tracing $SESSION_NAME
386
387 # Run 5 times with a 1 second delay and fire second TP.
388 run_app 0 1
389 wait_apps
390
391 stop_lttng_tracing $SESSION_NAME
392 destroy_lttng_session $SESSION_NAME
393
394 # Validate test. Expecting one event of the second TP only.
395 trace_matches $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
396 if [ $? -ne 0 ]; then
397 return $?
398 fi
399
400 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
401 # Enable first Logger but filter msg payload for the INFO one while
402 # triggering the finest and second TP.
403 enable_jul_filter $SESSION_NAME $EVENT_NAME 'msg == "JUL tp fired!"'
404 start_lttng_tracing $SESSION_NAME
405
406 # Run 5 times with a 1 second delay, fire finest and second TP.
407 run_app 1 1
408 wait_apps
409
410 stop_lttng_tracing $SESSION_NAME
411 destroy_lttng_session $SESSION_NAME
412
413 # Validate test. Expecting NR_ITER event of the main INFO tp.
414 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
415 if [ $? -ne 0 ]; then
416 return $?
417 fi
418 }
419
420 function test_jul_disable()
421 {
422 diag "Test JUL disable event"
423
424 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
425 # Enable all event with a filter.
426 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
427 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME2
428 disable_jul_lttng_event $SESSION_NAME $EVENT_NAME
429 start_lttng_tracing $SESSION_NAME
430
431 # Run 5 times with a 1 second delay and fire second TP.
432 run_app 0 1
433 wait_apps
434
435 stop_lttng_tracing $SESSION_NAME
436 destroy_lttng_session $SESSION_NAME
437
438 # Validate test. Expecting one event of the second TP only.
439 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
440 if [ $? -ne 0 ]; then
441 return $?
442 fi
443 }
444
445 function test_jul_disable_enable()
446 {
447 diag "Test JUL disable event followed by an enable"
448
449 create_lttng_session $SESSION_NAME $TRACE_PATH/$SESSION_NAME
450 # Enable all event with a filter.
451 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
452 disable_jul_lttng_event $SESSION_NAME $EVENT_NAME
453 enable_jul_lttng_event $SESSION_NAME $EVENT_NAME
454 start_lttng_tracing $SESSION_NAME
455
456 # Run 5 times with a 1 second delay and fire second TP.
457 run_app 0 1
458 wait_apps
459
460 stop_lttng_tracing $SESSION_NAME
461 destroy_lttng_session $SESSION_NAME
462
463 # Validate test. Expecting NR_ITER event of the main INFO tp.
464 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
465 if [ $? -ne 0 ]; then
466 return $?
467 fi
468 }
469
470 plan_tests $NUM_TESTS
471
472 print_test_banner "$TEST_DESC"
473
474 if [ ! -f "$TESTAPP_PATH.class" ]; then
475 withapp=0
476 else
477 withapp=1
478 fi
479
480 skip $withapp "JUL support is needed. Skipping all tests." $NUM_TESTS ||
481 {
482 start_lttng_sessiond
483
484 tests=(
485 test_jul_multi_session_disable
486 test_jul_disable
487 test_jul_disable_enable
488 test_jul_filtering
489 test_jul_multi_session_loglevel
490 test_jul_destroy_session
491 test_jul_loglevel
492 test_jul_loglevel_multiple
493 test_jul_before_start
494 test_jul_after_start
495 test_jul_multi_session
496 )
497
498 for fct_test in ${tests[@]};
499 do
500 TRACE_PATH=$(mktemp -d)
501
502 ${fct_test}
503 if [ $? -ne 0 ]; then
504 break;
505 fi
506 rm -rf $TRACE_PATH
507 done
508
509 stop_lttng_sessiond
510 }
This page took 0.041647 seconds and 4 git commands to generate.