3 # Copyright (C) - 2013 Christian Babeux <christian.babeux@efficios.com>
4 # Copyright (C) - 2015-2018 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License, version 2 only, as
8 # published by 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
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
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
="LTTng - Event traker test"
21 CURDIR
=$
(dirname "$0")/
22 TESTDIR
="$CURDIR/../../.."
23 TESTAPP_PATH
="$TESTDIR/utils/testapp"
24 TESTAPP_NAME
="gen-ust-events"
25 TESTAPP_KERNEL_NAME
="gen-kernel-test-events"
26 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
27 TESTAPP_KERNEL_BIN
="$TESTAPP_PATH/$TESTAPP_KERNEL_NAME/$TESTAPP_KERNEL_NAME"
28 SESSION_NAME
="tracker"
33 NUM_TESTS
=$
((NUM_UST_TESTS
+NUM_KERNEL_TESTS
+NUM_GLOBAL_TESTS
))
35 NR_USEC_WAIT
=0 #for UST gen events
39 SCRIPT_USERNAME
="$(id -un)"
40 SCRIPT_GROUPNAME
="$(id -gn)"
47 source $TESTDIR/utils
/utils.sh
49 function prepare_ust_app
51 AFTER_FIRST_PATH
=$
(mktemp
-u)
52 BEFORE_LAST_PATH
=$
(mktemp
-u)
54 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT -a "$AFTER_FIRST_PATH" -b "$BEFORE_LAST_PATH" &
58 function trace_ust_app
60 touch "$BEFORE_LAST_PATH"
62 ok $?
"Traced application stopped."
63 rm "$BEFORE_LAST_PATH"
64 rm "$AFTER_FIRST_PATH"
67 function prepare_kernel_app
69 WAIT_PATH
=$
(mktemp
-u)
71 "$TESTAPP_KERNEL_BIN" "$WAIT_PATH" $NR_ITER &
75 function trace_kernel_app
79 ok $?
"Traced application stopped."
83 function test_event_tracker
()
87 local expect_event
="$2"
92 trace_path
=$
(mktemp
-d)
94 create_lttng_session_ok
$SESSION_NAME "$trace_path"
96 if [ "$domain" = kernel
]; then
98 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
101 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
103 start_lttng_tracing_ok
105 lttng_track_
"$domain"_ok
"${tracker}"
107 prepare_
"$domain"_app
111 stop_lttng_tracing_ok
112 destroy_lttng_session_ok
$SESSION_NAME
114 if [ "$expect_event" -eq 1 ]; then
115 trace_matches
"$EVENT_NAME" $NR_ITER "$trace_path"
117 validate_trace_session_
"$domain"_empty
"$trace_path"
123 function test_event_vpid_tracker
()
127 local expect_event
="$2"
131 trace_path
=$
(mktemp
-d)
133 create_lttng_session_ok
$SESSION_NAME "$trace_path"
135 if [ "$domain" = kernel
]; then
137 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
140 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
142 prepare_
"$domain"_app
144 start_lttng_tracing_ok
146 if [ "$expect_event" -eq 1 ]; then
147 lttng_track_
"$domain"_ok
"--vpid ${CHILD_PID}"
149 lttng_track_
"$domain"_ok
"--vpid $((CHILD_PID+1))"
154 stop_lttng_tracing_ok
155 destroy_lttng_session_ok
$SESSION_NAME
157 if [ "$expect_event" -eq 1 ]; then
158 validate_trace
"$EVENT_NAME" "$trace_path"
160 validate_trace_empty
"$trace_path"
166 function test_event_pid_tracker
()
170 local expect_event
="$2"
174 trace_path
=$
(mktemp
-d)
176 create_lttng_session_ok
$SESSION_NAME "$trace_path"
178 if [ "$domain" = kernel
]; then
180 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
183 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
185 prepare_
"$domain"_app
187 start_lttng_tracing_ok
189 if [ "$expect_event" -eq 1 ]; then
190 lttng_track_
"$domain"_ok
"--pid ${CHILD_PID}"
192 lttng_track_
"$domain"_ok
"--pid $((CHILD_PID+1))"
197 stop_lttng_tracing_ok
198 destroy_lttng_session_ok
$SESSION_NAME
200 if [ "$expect_event" -eq 1 ]; then
201 validate_trace
"$EVENT_NAME" "$trace_path"
203 validate_trace_empty
"$trace_path"
210 function test_event_tracker_fail
()
217 trace_path
=$
(mktemp
-d)
219 create_lttng_session_ok
$SESSION_NAME "$trace_path"
220 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard"
221 lttng_track_
"$domain"_fail
"${tracker}"
222 destroy_lttng_session_ok
$SESSION_NAME
227 function test_event_track_untrack
()
231 local expect_event
="$2"
236 trace_path
=$
(mktemp
-d)
238 create_lttng_session_ok
$SESSION_NAME "$trace_path"
240 if [ "$domain" = kernel
]; then
242 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
245 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
247 start_lttng_tracing_ok
249 lttng_track_
"$domain"_ok
"${tracker}"
250 lttng_untrack_
"$domain"_ok
"${tracker}"
252 prepare_
"$domain"_app
256 stop_lttng_tracing_ok
257 destroy_lttng_session_ok
$SESSION_NAME
259 if [ "$expect_event" -eq 1 ]; then
260 trace_matches
"$EVENT_NAME" $NR_ITER "$trace_path"
262 validate_trace_session_
"$domain"_empty
"$trace_path"
268 function test_event_vpid_track_untrack
()
272 local expect_event
="$2"
276 trace_path
=$
(mktemp
-d)
278 create_lttng_session_ok
$SESSION_NAME "$trace_path"
280 if [ "$domain" = kernel
]; then
282 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
285 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
287 prepare_
"$domain"_app
289 start_lttng_tracing_ok
291 lttng_track_
"$domain"_ok
"--vpid ${CHILD_PID}"
292 lttng_untrack_
"$domain"_ok
"--vpid ${CHILD_PID}"
296 stop_lttng_tracing_ok
297 destroy_lttng_session_ok
$SESSION_NAME
299 if [ "$expect_event" -eq 1 ]; then
300 validate_trace
"$EVENT_NAME" "$trace_path"
302 validate_trace_empty
"$trace_path"
308 function test_event_pid_track_untrack
()
312 local expect_event
="$2"
316 trace_path
=$
(mktemp
-d)
318 create_lttng_session_ok
$SESSION_NAME "$trace_path"
320 if [ "$domain" = kernel
]; then
322 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
325 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
327 prepare_
"$domain"_app
329 start_lttng_tracing_ok
331 lttng_track_
"$domain"_ok
"--pid ${CHILD_PID}"
332 lttng_untrack_
"$domain"_ok
"--pid ${CHILD_PID}"
336 stop_lttng_tracing_ok
337 destroy_lttng_session_ok
$SESSION_NAME
339 if [ "$expect_event" -eq 1 ]; then
340 validate_trace
"$EVENT_NAME" "$trace_path"
342 validate_trace_empty
"$trace_path"
348 function test_event_ust_vpid_untrack_snapshot
()
352 trace_path
=$
(mktemp
-d)
354 diag
"Test_event_ust_vpid_untrack_snapshot"
356 create_lttng_session_ok
$SESSION_NAME "$trace_path" "--snapshot"
358 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME"
362 lttng_untrack_ust_ok
"--vpid --all"
364 start_lttng_tracing_ok
367 lttng_snapshot_record
$SESSION_NAME
369 stop_lttng_tracing_ok
370 destroy_lttng_session_ok
$SESSION_NAME
372 snapshot_count
=$
(find "$trace_path" -name metadata |
wc -l)
373 is
"$snapshot_count" 0 "Number of snapshot is zero"
378 # MUST set TESTDIR before calling those functions
379 plan_tests
$NUM_TESTS
381 print_test_banner
"$TEST_DESC"
385 diag
"Test UST tracker"
387 if [ ! -x "$TESTAPP_BIN" ]; then
388 BAIL_OUT
"No UST nevents binary detected."
391 EVENT_NAME
="tp:tptest"
396 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1))"
397 test_event_tracker ust
0 "${EVENT_NAME}" "--vgid $((SCRIPT_GID+1))"
398 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid $((SCRIPT_GID+1))"
399 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid ${SCRIPT_GID}"
400 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid $((SCRIPT_GID+1))"
401 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
402 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
403 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vuid --all"
404 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vgid --all"
407 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
408 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
409 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid ${SCRIPT_GID}"
410 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME}"
411 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME}"
412 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID},$((SCRIPT_UID+1))"
413 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID},$((SCRIPT_GID+1))"
414 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
415 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
416 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid --all"
417 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid --all"
420 test_event_tracker_fail ust
"${EVENT_NAME}" "--vuid lttng_unexisting_user"
421 test_event_tracker_fail ust
"${EVENT_NAME}" "--vgid lttng_unexisting_group"
427 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vpid --all"
428 test_event_vpid_tracker ust
0 "${EVENT_NAME}"
429 test_event_vpid_track_untrack ust
0 "${EVENT_NAME}"
432 test_event_tracker ust
1 "${EVENT_NAME}" "--vpid --all"
433 test_event_vpid_tracker ust
1 "${EVENT_NAME}"
435 #snapshot untrack vpid
437 test_event_ust_vpid_untrack_snapshot
439 #pid (backward compat)
442 test_event_pid_tracker ust
0 "${EVENT_NAME}"
443 test_event_pid_track_untrack ust
0 "${EVENT_NAME}"
444 test_event_track_untrack ust
0 "${EVENT_NAME}" "--pid --all" # backward compat
447 test_event_tracker ust
1 "${EVENT_NAME}" "--pid --all" # backward compat
448 test_event_pid_tracker ust
1 "${EVENT_NAME}"
450 if [ "$(id -u)" == "0" ]; then
456 skip
$isroot "Root access is needed. Skipping all kernel tracker tests." $NUM_KERNEL_TESTS ||
458 diag
"Test kernel tracker"
461 ok $?
"Loading lttng-test module"
463 EVENT_NAME
="lttng_test_filter_event"
468 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1))"
469 test_event_tracker kernel
0 "${EVENT_NAME}" "--vgid $((SCRIPT_GID+1))"
470 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid $((SCRIPT_GID+1))"
471 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid ${SCRIPT_GID}"
472 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid $((SCRIPT_GID+1))"
473 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
474 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
475 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vuid --all"
476 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vgid --all"
479 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
480 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
481 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid ${SCRIPT_GID}"
482 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME}"
483 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME}"
484 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID},$((SCRIPT_UID+1))"
485 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID},$((SCRIPT_GID+1))"
486 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
487 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
488 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid --all"
489 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid --all"
492 test_event_tracker_fail kernel
"${EVENT_NAME}" "--vuid lttng_unexisting_user"
493 test_event_tracker_fail kernel
"${EVENT_NAME}" "--vgid lttng_unexisting_group"
499 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1))"
500 test_event_tracker kernel
0 "${EVENT_NAME}" "--gid $((SCRIPT_GID+1))"
501 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1)) --gid $((SCRIPT_GID+1))"
502 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1)) --gid ${SCRIPT_GID}"
503 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid ${SCRIPT_UID} --gid $((SCRIPT_GID+1))"
504 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--uid ${SCRIPT_UID}"
505 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--gid ${SCRIPT_GID}"
506 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--uid --all"
507 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--gid --all"
510 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_UID}"
511 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GID}"
512 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_UID} --gid ${SCRIPT_GID}"
513 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_USERNAME}"
514 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GROUPNAME}"
515 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_UID},$((SCRIPT_UID+1))"
516 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GID},$((SCRIPT_GID+1))"
517 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
518 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
521 test_event_tracker_fail kernel
"${EVENT_NAME}" "--uid lttng_unexisting_user"
522 test_event_tracker_fail kernel
"${EVENT_NAME}" "--gid lttng_unexisting_group"
528 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vpid --all"
529 test_event_vpid_tracker kernel
0 "${EVENT_NAME}"
530 test_event_vpid_track_untrack kernel
0 "${EVENT_NAME}"
533 test_event_tracker kernel
1 "${EVENT_NAME}" "--vpid --all"
534 test_event_vpid_tracker kernel
1 "${EVENT_NAME}"
539 test_event_pid_tracker kernel
0 "${EVENT_NAME}"
540 test_event_pid_track_untrack kernel
0 "${EVENT_NAME}"
541 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--pid --all"
544 test_event_tracker kernel
1 "${EVENT_NAME}" "--pid --all"
545 test_event_pid_tracker kernel
1 "${EVENT_NAME}"
548 ok $?
"Unloading lttng-test module"