Fix: test flaky sleep and wait patterns
[lttng-tools.git] / tests / regression / ust / java-jul / test_java_jul
CommitLineData
37175ce4
DG
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
18TEST_DESC="Java JUL support"
19
20CURDIR=$(dirname $0)/
21TESTDIR=$CURDIR/../../..
22NR_ITER=6
23NR_MSEC_WAIT=1000
24TESTAPP_NAME="JTestLTTng"
25TESTAPP_BIN="$TESTAPP_NAME.java"
26TESTAPP_PATH="$CURDIR/$TESTAPP_NAME"
27SESSION_NAME="jul"
28EVENT_NAME="JTestLTTng"
9b21e6d5 29EVENT_NAME2="JTestLTTng2"
37175ce4
DG
30JAVA_CP="$CURDIR:/usr/local/lib/lttng/java/liblttng-ust-jul.jar:/usr/lib/lttng/java/liblttng-ust-jul.jar"
31
5ddababf 32NUM_TESTS=139
37175ce4
DG
33
34source $TESTDIR/utils/utils.sh
35
36function run_app
37{
88f54ca9 38 local finest_tp=$1
9b21e6d5 39 local fire_second_tp=$2
88f54ca9 40
9b21e6d5 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 &
37175ce4
DG
42}
43
44function wait_apps
45{
46 while [ -n "$(pidof java)" ]; do
47 sleep 0.5
48 done
49 pass "Wait for applications to end"
50}
51
3e1c9ff7
DG
52function 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
34c40351
DG
70function 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
37175ce4
DG
80# MUST set TESTDIR before calling those functions
81
82function 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
d4607bc6
MD
93 # Wait for the applications started in background
94 wait
37175ce4
DG
95
96 stop_lttng_tracing $SESSION_NAME
97 destroy_lttng_session $SESSION_NAME
b2064f54
DG
98
99 # Validate test. Expecting all events.
1b500e7a 100 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
b2064f54
DG
101 if [ $? -ne 0 ]; then
102 return $?
103 fi
37175ce4
DG
104}
105
106function 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
b2064f54
DG
121
122 # Validate test. Expecting all events.
1b500e7a 123 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
b2064f54
DG
124 if [ $? -ne 0 ]; then
125 return $?
126 fi
127}
128
129function 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.
1b500e7a 146 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
b2064f54
DG
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.
1b500e7a 186 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
b2064f54 187 return $?
37175ce4
DG
188}
189
88f54ca9
DG
190function 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
3e1c9ff7
DG
231function 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
5ddababf
DG
265function 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.
3910e60d 289 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
5ddababf
DG
290 if [ $? -ne 0 ]; then
291 return $?
292 fi
293
294 # Validate test. Expecting one event of the second TP.
3910e60d 295 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
5ddababf
DG
296 if [ $? -ne 0 ]; then
297 return $?
298 fi
299}
300
9b21e6d5
DG
301function 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
3e1c9ff7
DG
335function 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
d4607bc6
MD
346 # Wait for the applications started in background
347 wait
3e1c9ff7
DG
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
d4607bc6
MD
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
3e1c9ff7
DG
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
34c40351
DG
378function 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
5ddababf
DG
420function 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.
3910e60d 439 trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
5ddababf
DG
440 if [ $? -ne 0 ]; then
441 return $?
442 fi
443}
444
445function 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.
3910e60d 464 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
5ddababf
DG
465 if [ $? -ne 0 ]; then
466 return $?
467 fi
468}
469
37175ce4
DG
470plan_tests $NUM_TESTS
471
472print_test_banner "$TEST_DESC"
473
474if [ ! -f "$TESTAPP_PATH.class" ]; then
475 withapp=0
476else
477 withapp=1
478fi
479
480skip $withapp "JUL support is needed. Skipping all tests." $NUM_TESTS ||
481{
482 start_lttng_sessiond
483
484 tests=(
5ddababf
DG
485 test_jul_multi_session_disable
486 test_jul_disable
487 test_jul_disable_enable
34c40351 488 test_jul_filtering
3e1c9ff7
DG
489 test_jul_multi_session_loglevel
490 test_jul_destroy_session
b2064f54 491 test_jul_loglevel
88f54ca9 492 test_jul_loglevel_multiple
37175ce4
DG
493 test_jul_before_start
494 test_jul_after_start
9b21e6d5 495 test_jul_multi_session
37175ce4
DG
496 )
497
498 for fct_test in ${tests[@]};
499 do
3e1c9ff7
DG
500 TRACE_PATH=$(mktemp -d)
501
37175ce4 502 ${fct_test}
b2064f54
DG
503 if [ $? -ne 0 ]; then
504 break;
37175ce4 505 fi
b2064f54 506 rm -rf $TRACE_PATH
37175ce4
DG
507 done
508
509 stop_lttng_sessiond
510}
This page took 0.047591 seconds and 4 git commands to generate.