3 # Copyright (C) 2013 Christian Babeux <christian.babeux@efficios.com>
4 # Copyright (C) 2015-2018 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 # SPDX-License-Identifier: GPL-2.0-only
8 TEST_DESC
="LTTng - Event traker test"
10 CURDIR
=$
(dirname "$0")/
11 TESTDIR
="$CURDIR/../../.."
12 TESTAPP_PATH
="$TESTDIR/utils/testapp"
13 TESTAPP_NAME
="gen-ust-events"
14 TESTAPP_KERNEL_NAME
="gen-kernel-test-events"
15 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
16 TESTAPP_KERNEL_BIN
="$TESTAPP_PATH/$TESTAPP_KERNEL_NAME/$TESTAPP_KERNEL_NAME"
17 SESSION_NAME
="tracker"
22 NUM_TESTS
=$
((NUM_UST_TESTS
+NUM_KERNEL_TESTS
+NUM_GLOBAL_TESTS
))
24 NR_USEC_WAIT
=0 #for UST gen events
28 SCRIPT_USERNAME
="$(id -un)"
29 SCRIPT_GROUPNAME
="$(id -gn)"
36 source $TESTDIR/utils
/utils.sh
38 function prepare_ust_app
40 AFTER_FIRST_PATH
=$
(mktemp
-u)
41 BEFORE_LAST_PATH
=$
(mktemp
-u)
43 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT -a "$AFTER_FIRST_PATH" -b "$BEFORE_LAST_PATH" &
47 function trace_ust_app
49 touch "$BEFORE_LAST_PATH"
51 ok $?
"Traced application stopped."
52 rm "$BEFORE_LAST_PATH"
53 rm "$AFTER_FIRST_PATH"
56 function prepare_kernel_app
58 WAIT_PATH
=$
(mktemp
-u)
60 "$TESTAPP_KERNEL_BIN" "$WAIT_PATH" $NR_ITER &
64 function trace_kernel_app
68 ok $?
"Traced application stopped."
72 function test_event_tracker
()
76 local expect_event
="$2"
81 trace_path
=$
(mktemp
-d)
83 create_lttng_session_ok
$SESSION_NAME "$trace_path"
85 if [ "$domain" = kernel
]; then
87 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
90 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
92 start_lttng_tracing_ok
94 lttng_track_
"$domain"_ok
"${tracker}"
100 stop_lttng_tracing_ok
101 destroy_lttng_session_ok
$SESSION_NAME
103 if [ "$expect_event" -eq 1 ]; then
104 trace_matches
"$EVENT_NAME" $NR_ITER "$trace_path"
106 validate_trace_session_
"$domain"_empty
"$trace_path"
112 function test_event_vpid_tracker
()
116 local expect_event
="$2"
120 trace_path
=$
(mktemp
-d)
122 create_lttng_session_ok
$SESSION_NAME "$trace_path"
124 if [ "$domain" = kernel
]; then
126 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
129 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
131 prepare_
"$domain"_app
133 start_lttng_tracing_ok
135 if [ "$expect_event" -eq 1 ]; then
136 lttng_track_
"$domain"_ok
"--vpid ${CHILD_PID}"
138 lttng_track_
"$domain"_ok
"--vpid $((CHILD_PID+1))"
143 stop_lttng_tracing_ok
144 destroy_lttng_session_ok
$SESSION_NAME
146 if [ "$expect_event" -eq 1 ]; then
147 validate_trace
"$EVENT_NAME" "$trace_path"
149 validate_trace_empty
"$trace_path"
155 function test_event_pid_tracker
()
159 local expect_event
="$2"
163 trace_path
=$
(mktemp
-d)
165 create_lttng_session_ok
$SESSION_NAME "$trace_path"
167 if [ "$domain" = kernel
]; then
169 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
172 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
174 prepare_
"$domain"_app
176 start_lttng_tracing_ok
178 if [ "$expect_event" -eq 1 ]; then
179 lttng_track_
"$domain"_ok
"--pid ${CHILD_PID}"
181 lttng_track_
"$domain"_ok
"--pid $((CHILD_PID+1))"
186 stop_lttng_tracing_ok
187 destroy_lttng_session_ok
$SESSION_NAME
189 if [ "$expect_event" -eq 1 ]; then
190 validate_trace
"$EVENT_NAME" "$trace_path"
192 validate_trace_empty
"$trace_path"
199 function test_event_tracker_fail
()
206 trace_path
=$
(mktemp
-d)
208 create_lttng_session_ok
$SESSION_NAME "$trace_path"
209 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard"
210 lttng_track_
"$domain"_fail
"${tracker}"
211 destroy_lttng_session_ok
$SESSION_NAME
216 function test_event_track_untrack
()
220 local expect_event
="$2"
225 trace_path
=$
(mktemp
-d)
227 create_lttng_session_ok
$SESSION_NAME "$trace_path"
229 if [ "$domain" = kernel
]; then
231 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
234 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
236 start_lttng_tracing_ok
238 lttng_track_
"$domain"_ok
"${tracker}"
239 lttng_untrack_
"$domain"_ok
"${tracker}"
241 prepare_
"$domain"_app
245 stop_lttng_tracing_ok
246 destroy_lttng_session_ok
$SESSION_NAME
248 if [ "$expect_event" -eq 1 ]; then
249 trace_matches
"$EVENT_NAME" $NR_ITER "$trace_path"
251 validate_trace_session_
"$domain"_empty
"$trace_path"
257 function test_event_vpid_track_untrack
()
261 local expect_event
="$2"
265 trace_path
=$
(mktemp
-d)
267 create_lttng_session_ok
$SESSION_NAME "$trace_path"
269 if [ "$domain" = kernel
]; then
271 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
274 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
276 prepare_
"$domain"_app
278 start_lttng_tracing_ok
280 lttng_track_
"$domain"_ok
"--vpid ${CHILD_PID}"
281 lttng_untrack_
"$domain"_ok
"--vpid ${CHILD_PID}"
285 stop_lttng_tracing_ok
286 destroy_lttng_session_ok
$SESSION_NAME
288 if [ "$expect_event" -eq 1 ]; then
289 validate_trace
"$EVENT_NAME" "$trace_path"
291 validate_trace_empty
"$trace_path"
297 function test_event_pid_track_untrack
()
301 local expect_event
="$2"
305 trace_path
=$
(mktemp
-d)
307 create_lttng_session_ok
$SESSION_NAME "$trace_path"
309 if [ "$domain" = kernel
]; then
311 lttng_enable_kernel_channel
1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
314 enable_
"$domain"_lttng_event_ok
$SESSION_NAME "$wildcard" "$channel"
316 prepare_
"$domain"_app
318 start_lttng_tracing_ok
320 lttng_track_
"$domain"_ok
"--pid ${CHILD_PID}"
321 lttng_untrack_
"$domain"_ok
"--pid ${CHILD_PID}"
325 stop_lttng_tracing_ok
326 destroy_lttng_session_ok
$SESSION_NAME
328 if [ "$expect_event" -eq 1 ]; then
329 validate_trace
"$EVENT_NAME" "$trace_path"
331 validate_trace_empty
"$trace_path"
337 function test_event_ust_vpid_untrack_snapshot
()
341 trace_path
=$
(mktemp
-d)
343 diag
"Test_event_ust_vpid_untrack_snapshot"
345 create_lttng_session_ok
$SESSION_NAME "$trace_path" "--snapshot"
347 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME"
351 lttng_untrack_ust_ok
"--vpid --all"
353 start_lttng_tracing_ok
356 lttng_snapshot_record
$SESSION_NAME
358 stop_lttng_tracing_ok
359 destroy_lttng_session_ok
$SESSION_NAME
361 snapshot_count
=$
(find "$trace_path" -name metadata |
wc -l)
362 is
"$snapshot_count" 0 "Number of snapshot is zero"
367 # MUST set TESTDIR before calling those functions
368 plan_tests
$NUM_TESTS
370 print_test_banner
"$TEST_DESC"
374 diag
"Test UST tracker"
376 if [ ! -x "$TESTAPP_BIN" ]; then
377 BAIL_OUT
"No UST nevents binary detected."
380 EVENT_NAME
="tp:tptest"
382 # Both ordering of tracker type and `--all` are valid.
383 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vgid --all"
384 test_event_track_untrack ust
0 "${EVENT_NAME}" "--all --vgid"
389 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1))"
390 test_event_tracker ust
0 "${EVENT_NAME}" "--vgid $((SCRIPT_GID+1))"
391 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid $((SCRIPT_GID+1))"
392 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid ${SCRIPT_GID}"
393 test_event_tracker ust
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid $((SCRIPT_GID+1))"
394 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
395 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
396 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vuid --all"
397 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vgid --all"
400 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
401 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
402 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid ${SCRIPT_GID}"
403 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME}"
404 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME}"
405 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID},$((SCRIPT_UID+1))"
406 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID},$((SCRIPT_GID+1))"
407 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
408 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
409 test_event_tracker ust
1 "${EVENT_NAME}" "--vuid --all"
410 test_event_tracker ust
1 "${EVENT_NAME}" "--vgid --all"
413 test_event_tracker_fail ust
"${EVENT_NAME}" "--vuid lttng_unexisting_user"
414 test_event_tracker_fail ust
"${EVENT_NAME}" "--vgid lttng_unexisting_group"
420 test_event_track_untrack ust
0 "${EVENT_NAME}" "--vpid --all"
421 test_event_vpid_tracker ust
0 "${EVENT_NAME}"
422 test_event_vpid_track_untrack ust
0 "${EVENT_NAME}"
425 test_event_tracker ust
1 "${EVENT_NAME}" "--vpid --all"
426 test_event_vpid_tracker ust
1 "${EVENT_NAME}"
428 #snapshot untrack vpid
430 test_event_ust_vpid_untrack_snapshot
432 #pid (backward compat)
435 test_event_pid_tracker ust
0 "${EVENT_NAME}"
436 test_event_pid_track_untrack ust
0 "${EVENT_NAME}"
437 test_event_track_untrack ust
0 "${EVENT_NAME}" "--pid --all" # backward compat
440 test_event_tracker ust
1 "${EVENT_NAME}" "--pid --all" # backward compat
441 test_event_pid_tracker ust
1 "${EVENT_NAME}"
443 if [ "$(id -u)" == "0" ]; then
449 skip
$isroot "Root access is needed. Skipping all kernel tracker tests." $NUM_KERNEL_TESTS ||
451 diag
"Test kernel tracker"
454 ok $?
"Loading lttng-test module"
456 EVENT_NAME
="lttng_test_filter_event"
461 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1))"
462 test_event_tracker kernel
0 "${EVENT_NAME}" "--vgid $((SCRIPT_GID+1))"
463 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid $((SCRIPT_GID+1))"
464 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid ${SCRIPT_GID}"
465 test_event_tracker kernel
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid $((SCRIPT_GID+1))"
466 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
467 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
468 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vuid --all"
469 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vgid --all"
472 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
473 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
474 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid ${SCRIPT_GID}"
475 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME}"
476 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME}"
477 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID},$((SCRIPT_UID+1))"
478 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID},$((SCRIPT_GID+1))"
479 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
480 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
481 test_event_tracker kernel
1 "${EVENT_NAME}" "--vuid --all"
482 test_event_tracker kernel
1 "${EVENT_NAME}" "--vgid --all"
485 test_event_tracker_fail kernel
"${EVENT_NAME}" "--vuid lttng_unexisting_user"
486 test_event_tracker_fail kernel
"${EVENT_NAME}" "--vgid lttng_unexisting_group"
492 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1))"
493 test_event_tracker kernel
0 "${EVENT_NAME}" "--gid $((SCRIPT_GID+1))"
494 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1)) --gid $((SCRIPT_GID+1))"
495 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1)) --gid ${SCRIPT_GID}"
496 test_event_tracker kernel
0 "${EVENT_NAME}" "--uid ${SCRIPT_UID} --gid $((SCRIPT_GID+1))"
497 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--uid ${SCRIPT_UID}"
498 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--gid ${SCRIPT_GID}"
499 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--uid --all"
500 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--gid --all"
503 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_UID}"
504 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GID}"
505 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_UID} --gid ${SCRIPT_GID}"
506 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_USERNAME}"
507 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GROUPNAME}"
508 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_UID},$((SCRIPT_UID+1))"
509 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GID},$((SCRIPT_GID+1))"
510 test_event_tracker kernel
1 "${EVENT_NAME}" "--uid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
511 test_event_tracker kernel
1 "${EVENT_NAME}" "--gid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
514 test_event_tracker_fail kernel
"${EVENT_NAME}" "--uid lttng_unexisting_user"
515 test_event_tracker_fail kernel
"${EVENT_NAME}" "--gid lttng_unexisting_group"
521 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--vpid --all"
522 test_event_vpid_tracker kernel
0 "${EVENT_NAME}"
523 test_event_vpid_track_untrack kernel
0 "${EVENT_NAME}"
526 test_event_tracker kernel
1 "${EVENT_NAME}" "--vpid --all"
527 test_event_vpid_tracker kernel
1 "${EVENT_NAME}"
532 test_event_pid_tracker kernel
0 "${EVENT_NAME}"
533 test_event_pid_track_untrack kernel
0 "${EVENT_NAME}"
534 test_event_track_untrack kernel
0 "${EVENT_NAME}" "--pid --all"
537 test_event_tracker kernel
1 "${EVENT_NAME}" "--pid --all"
538 test_event_pid_tracker kernel
1 "${EVENT_NAME}"
540 modprobe
--remove lttng-test
541 ok $?
"Unloading lttng-test module"