3 # Copyright (C) - 2015 Philippe Proulx <pproulx@efficios.com>
4 # Copyright (C) - 2014 David Goulet <dgoulet@efficios.com>
6 # This program is free software; you can redistribute it and/or modify it under
7 # the terms of the GNU General Public License, version 2 only, as published by
8 # the Free Software Foundation.
10 # This program is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15 # You should have received a copy of the GNU General Public License along with
16 # this program; if not, write to the Free Software Foundation, Inc., 51
17 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 TEST_DESC
="Python support"
22 TESTDIR
=$CURDIR/..
/..
/..
26 TESTAPP_BIN
="$TESTAPP_NAME.py"
27 TESTAPP_PATH
="@abs_top_srcdir@/tests/regression/ust/python-logging"
28 SESSION_NAME
="python-test"
29 EVENT_NAME
="python-ev-test1"
30 EVENT_NAME2
="python-ev-test2"
31 OUTPUT_DEST
="/dev/null"
33 python_versions
=(@PYTHON2_AGENT@ @PYTHON3_AGENT@
)
34 run_test
=@RUN_PYTHON_AGENT_TEST@
36 if [[ -z "$run_test" ]]; then
39 NUM_TESTS
=$
(((154 * ${#python_versions[@]})+2))
42 source $TESTDIR/utils
/utils.sh
48 local fire_second_tp
=$3
50 $python $TESTAPP_PATH/$TESTAPP_BIN $NR_ITER $NR_SEC_WAIT $debug_tp $fire_second_tp
53 function run_app_background
58 function enable_python_loglevel_only
()
65 if [ -z $channel_name ]; then
66 # default channel if none specified
69 chan
="-c $channel_name"
72 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel-only $loglevel "$event_name" $chan -s $sess_name -p >$OUTPUT_DEST
73 ok $?
"Enable Python event $event_name for session $sess_name with loglevel-only $loglevel"
76 function enable_python_filter
()
82 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" -s $sess_name -p --filter "$filter" >$OUTPUT_DEST
83 ok $?
"Enable event $event_name with filter $filter for session $sess_name"
86 function enable_python_filter_loglevel_only
()
93 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel-only $loglevel "$event_name" -s $sess_name -p --filter "$filter" >$OUTPUT_DEST
94 ok $?
"Enable event $event_name with filter \"$filter\" and loglevel-only $loglevel for session $sess_name"
97 # MUST set TESTDIR before calling those functions
99 function test_python_before_start
()
101 diag
"Test Python application BEFORE tracing starts"
102 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
103 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
105 # Run 5 times with a 1 second delay
106 run_app_background
$1
108 start_lttng_tracing_ok
$SESSION_NAME
110 # Wait for the applications started in background
113 stop_lttng_tracing_ok
$SESSION_NAME
114 destroy_lttng_session_ok
$SESSION_NAME
116 # Validate test. Expecting all events.
117 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
118 if [ $?
-ne 0 ]; then
123 function test_python_after_start
()
125 diag
"Test Python application AFTER tracing starts"
127 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
128 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
129 start_lttng_tracing_ok
$SESSION_NAME
131 # Run 5 times with a 1 second delay
134 stop_lttng_tracing_ok
$SESSION_NAME
135 destroy_lttng_session_ok
$SESSION_NAME
137 # Validate test. Expecting all events.
138 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
139 if [ $?
-ne 0 ]; then
144 function test_python_loglevel
()
146 diag
"Test Python application with loglevel"
148 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
149 enable_python_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "INFO"
150 start_lttng_tracing_ok
$SESSION_NAME
152 # Run 5 times with a 1 second delay
155 stop_lttng_tracing_ok
$SESSION_NAME
156 destroy_lttng_session_ok
$SESSION_NAME
158 # Validate test. Expecting all events.
159 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
160 if [ $?
-ne 0 ]; then
164 diag
"Test Python applications with lower loglevel"
166 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
167 enable_python_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "CRITICAL"
168 start_lttng_tracing_ok
$SESSION_NAME
170 # Run 5 times with a 1 second delay
173 stop_lttng_tracing_ok
$SESSION_NAME
174 destroy_lttng_session_ok
$SESSION_NAME
176 # Validate test. Expecting 0 events.
177 trace_match_only
$EVENT_NAME 0 $TRACE_PATH
178 if [ $?
-ne 0 ]; then
182 diag
"Test Python applications with higher loglevel"
184 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
185 enable_python_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "DEBUG"
186 start_lttng_tracing_ok
$SESSION_NAME
188 # Run 5 times with a 1 second delay
191 stop_lttng_tracing_ok
$SESSION_NAME
192 destroy_lttng_session_ok
$SESSION_NAME
194 # Validate test. Expecting all events.
195 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH
199 function test_python_loglevel_multiple
()
201 diag
"Test Python application with multiple loglevel"
203 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
204 enable_python_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "INFO"
205 enable_python_lttng_event_loglevel
$SESSION_NAME $EVENT_NAME "DEBUG"
206 start_lttng_tracing_ok
$SESSION_NAME
208 # Run 5 times with a 1 second delay and fire two TP.
211 stop_lttng_tracing_ok
$SESSION_NAME
212 destroy_lttng_session_ok
$SESSION_NAME
214 # Validate test. Expecting all events times two.
215 trace_match_only
$EVENT_NAME $
(($NR_ITER * 2)) $TRACE_PATH
216 if [ $?
-ne 0 ]; then
220 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
221 enable_python_lttng_event_loglevel
$SESSION_NAME '*' "INFO"
222 enable_python_lttng_event_loglevel
$SESSION_NAME '*' "DEBUG"
223 start_lttng_tracing_ok
$SESSION_NAME
225 # Run 5 times with a 1 second delay and fire two TP.
228 stop_lttng_tracing_ok
$SESSION_NAME
229 destroy_lttng_session_ok
$SESSION_NAME
231 # Validate test. Expecting all events times two.
232 trace_match_only
$EVENT_NAME $
(($NR_ITER * 2)) $TRACE_PATH
233 if [ $?
-ne 0 ]; then
238 function test_python_multi_session_loglevel
()
240 diag
"Test Python with multiple session"
242 create_lttng_session_ok
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
243 enable_python_loglevel_only
$SESSION_NAME-1 '*' "INFO"
244 start_lttng_tracing_ok
$SESSION_NAME-1
246 create_lttng_session_ok
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
247 enable_python_loglevel_only
$SESSION_NAME-2 '*' "DEBUG"
248 start_lttng_tracing_ok
$SESSION_NAME-2
250 # Run 5 times with a 1 second delay and fire second TP.
253 stop_lttng_tracing_ok
$SESSION_NAME-1
254 stop_lttng_tracing_ok
$SESSION_NAME-2
255 destroy_lttng_session_ok
$SESSION_NAME-1
256 destroy_lttng_session_ok
$SESSION_NAME-2
258 # Expecting NR_ITER events being the main event and the second tp one.
259 trace_matches
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
260 if [ $?
-ne 0 ]; then
263 trace_matches
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
264 if [ $?
-ne 0 ]; then
268 # Expectin NR_ITER events being the debug TP.
269 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
270 if [ $?
-ne 0 ]; then
275 function test_python_multi_session_disable
()
277 diag
"Test Python with multiple session with disabled event"
279 create_lttng_session_ok
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
280 enable_python_lttng_event
$SESSION_NAME-1 $EVENT_NAME
281 enable_python_lttng_event
$SESSION_NAME-1 $EVENT_NAME2
282 disable_python_lttng_event
$SESSION_NAME-1 $EVENT_NAME
283 start_lttng_tracing_ok
$SESSION_NAME-1
285 create_lttng_session_ok
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
286 enable_python_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
287 start_lttng_tracing_ok
$SESSION_NAME-2
289 # Run 5 times with a 1 second delay and fire second TP.
292 stop_lttng_tracing_ok
$SESSION_NAME-1
293 stop_lttng_tracing_ok
$SESSION_NAME-2
294 destroy_lttng_session_ok
$SESSION_NAME-1
295 destroy_lttng_session_ok
$SESSION_NAME-2
297 # Validate test. Expecting one event of the second TP.
298 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
299 if [ $?
-ne 0 ]; then
303 # Validate test. Expecting one event of the second TP.
304 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
305 if [ $?
-ne 0 ]; then
310 function test_python_multi_session_disable_wildcard
()
312 diag
"Test Python with multiple session with disabled wildcard event"
314 create_lttng_session_ok
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
315 enable_python_lttng_event
$SESSION_NAME-1 '*'
317 create_lttng_session_ok
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
318 enable_python_lttng_event
$SESSION_NAME-2 '*'
320 disable_python_lttng_event
$SESSION_NAME-1 '*'
322 start_lttng_tracing_ok
$SESSION_NAME-1
323 start_lttng_tracing_ok
$SESSION_NAME-2
327 stop_lttng_tracing_ok
$SESSION_NAME-1
328 stop_lttng_tracing_ok
$SESSION_NAME-2
329 destroy_lttng_session_ok
$SESSION_NAME-1
330 destroy_lttng_session_ok
$SESSION_NAME-2
332 # Validate test. Expecting NO event of the first TP.
333 trace_match_only
$EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME-1
334 if [ $?
-ne 0 ]; then
338 # Validate test. Expecting all events of the first TP.
339 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
340 if [ $?
-ne 0 ]; then
345 function test_python_disable_all
()
347 diag
"Test Python with multiple session with disabled all event"
349 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
350 enable_python_lttng_event
$SESSION_NAME '*'
351 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
352 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME2
354 disable_python_lttng_event
$SESSION_NAME -a
356 start_lttng_tracing_ok
$SESSION_NAME
360 stop_lttng_tracing_ok
$SESSION_NAME
361 destroy_lttng_session_ok
$SESSION_NAME
363 # Validate test. Expecting NO event of the first TP and second TP.
364 trace_match_only
$EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME
365 trace_match_only
$EVENT_NAME2 0 $TRACE_PATH/$SESSION_NAME
366 if [ $?
-ne 0 ]; then
371 function test_python_multi_session
()
373 diag
"Test Python with multiple session"
375 create_lttng_session_ok
$SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
376 enable_python_lttng_event
$SESSION_NAME-1 $EVENT_NAME
377 start_lttng_tracing_ok
$SESSION_NAME-1
379 create_lttng_session_ok
$SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
380 enable_python_lttng_event
$SESSION_NAME-2 $EVENT_NAME2
381 start_lttng_tracing_ok
$SESSION_NAME-2
383 # Run 5 times with a 1 second delay and fire second TP.
386 stop_lttng_tracing_ok
$SESSION_NAME-1
387 stop_lttng_tracing_ok
$SESSION_NAME-2
388 destroy_lttng_session_ok
$SESSION_NAME-1
389 destroy_lttng_session_ok
$SESSION_NAME-2
391 # Validate test. Expecting all events of first TP
392 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
393 if [ $?
-ne 0 ]; then
397 # Validate test. Expecting one event of the second TP.
398 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
399 if [ $?
-ne 0 ]; then
404 function test_python_destroy_session
()
406 diag
"Test Python two session with destroy"
408 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/first-sess
409 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
410 start_lttng_tracing_ok
$SESSION_NAME
412 # Run 5 times with a 1 second delay
413 run_app_background
$1 0 1
415 # Wait for the applications started in background
418 stop_lttng_tracing_ok
$SESSION_NAME
419 destroy_lttng_session_ok
$SESSION_NAME
421 # Validate test. Expecting at least one event num 1
422 validate_trace
$EVENT_NAME $TRACE_PATH/first-sess
423 if [ $?
-ne 0 ]; then
427 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/second-sess
428 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME2
429 start_lttng_tracing_ok
$SESSION_NAME
431 # Run 5 times with a 1 second delay
432 run_app_background
$1 0 1
434 # Wait for the applications started in background
437 stop_lttng_tracing_ok
$SESSION_NAME
438 destroy_lttng_session_ok
$SESSION_NAME
440 # Validate test. Expecting only one event num 2
441 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/second-sess
442 if [ $?
-ne 0 ]; then
447 function test_python_filtering
()
449 diag
"Test Python filtering"
451 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
452 # Enable all event with a filter.
453 enable_python_filter
$SESSION_NAME '*' 'msg == "python-ev-test2 fired [INFO]"'
454 start_lttng_tracing_ok
$SESSION_NAME
456 # Run 5 times with a 1 second delay and fire second TP.
459 stop_lttng_tracing_ok
$SESSION_NAME
460 destroy_lttng_session_ok
$SESSION_NAME
462 # Validate test. Expecting one event of the second TP only.
463 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
464 if [ $?
-ne 0 ]; then
468 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
469 # Enable first Logger but filter msg payload for the INFO one while
470 # triggering the debug and second TP.
471 enable_python_filter
$SESSION_NAME $EVENT_NAME 'msg == "python-ev-test1 fired [INFO]"'
472 start_lttng_tracing_ok
$SESSION_NAME
474 # Run 5 times with a 1 second delay, fire debug and second TP.
477 stop_lttng_tracing_ok
$SESSION_NAME
478 destroy_lttng_session_ok
$SESSION_NAME
480 # Validate test. Expecting NR_ITER event of the main INFO tp.
481 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
482 if [ $?
-ne 0 ]; then
487 function test_python_disable
()
489 diag
"Test Python disable event"
491 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
492 # Enable all event with a filter.
493 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
494 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME2
495 disable_python_lttng_event
$SESSION_NAME $EVENT_NAME
496 start_lttng_tracing_ok
$SESSION_NAME
498 # Run 5 times with a 1 second delay and fire second TP.
501 stop_lttng_tracing_ok
$SESSION_NAME
502 destroy_lttng_session_ok
$SESSION_NAME
504 # Validate test. Expecting one event of the second TP only.
505 trace_match_only
$EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
506 if [ $?
-ne 0 ]; then
511 function test_python_disable_enable
()
513 diag
"Test Python disable event followed by an enable"
515 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
516 # Enable all event with a filter.
517 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
518 disable_python_lttng_event
$SESSION_NAME $EVENT_NAME
519 enable_python_lttng_event
$SESSION_NAME $EVENT_NAME
520 start_lttng_tracing_ok
$SESSION_NAME
522 # Run 5 times with a 1 second delay and fire second TP.
525 stop_lttng_tracing_ok
$SESSION_NAME
526 destroy_lttng_session_ok
$SESSION_NAME
528 # Validate test. Expecting NR_ITER event of the main INFO tp.
529 trace_match_only
$EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
530 if [ $?
-ne 0 ]; then
535 function test_python_filter_loglevel
()
537 local BOGUS_EVENT_NAME
="not_a_real_event"
538 local FILTER
="int_loglevel > 30 || int_loglevel < 30"
541 diag
"Test Python a filter with a loglevel"
543 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH/$SESSION_NAME
544 # Enable an event with a filter and the loglevel-only option.
545 enable_python_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" "INFO"
546 disable_python_lttng_event
$SESSION_NAME $BOGUS_EVENT_NAME
547 enable_python_filter_loglevel_only
$SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" "INFO"
548 start_lttng_tracing_ok
$SESSION_NAME
550 # Run 5 times with a 1 second delay and fire second TP.
553 stop_lttng_tracing_ok
$SESSION_NAME
554 destroy_lttng_session_ok
$SESSION_NAME
556 # Validate test. Expecting no events.
557 trace_match_only
$ALL_EVENTS 0 $TRACE_PATH/$SESSION_NAME
558 if [ $?
-ne 0 ]; then
563 plan_tests
$NUM_TESTS
565 print_test_banner
"$TEST_DESC"
567 if [[ ${#python_versions[@]} -eq 0 ||
"x$run_test" != "xyes" ]]; then
573 skip
$skip_agent "Python agent test skipped." $NUM_TESTS ||
578 test_python_multi_session_disable_wildcard
579 test_python_multi_session_disable
581 test_python_disable_enable
582 test_python_disable_all
583 test_python_filtering
584 test_python_multi_session_loglevel
585 test_python_destroy_session
587 test_python_loglevel_multiple
588 test_python_before_start
589 test_python_after_start
590 test_python_multi_session
591 test_python_filter_loglevel
595 for python_version
in ${python_versions[*]};
597 for fct_test
in ${tests[@]};
599 TRACE_PATH
=$
(mktemp
-d)
601 diag
"(Python $python_version)"
602 ${fct_test} $python_version
603 if [ $?
-ne 0 ]; then