3 # Copyright (C) 2018 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 TEST_DESC
="LTTng relayd filesystem grouping - Userspace tracing"
9 CURDIR
=$
(dirname "$0")/
10 TESTDIR
=$CURDIR/..
/..
/..
13 TESTAPP_PATH
="$TESTDIR/utils/testapp"
14 TESTAPP_NAME
="gen-ust-events"
15 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
16 EVENT_NAME
="tp:tptest"
17 CHANNEL_NAME
="my_channel"
19 XPATH_CMD_OUTPUT
="//lttng:command/lttng:output"
20 XPATH_SESSION
="$XPATH_CMD_OUTPUT/lttng:sessions/lttng:session"
24 source "$TESTDIR/utils/utils.sh"
26 if [ ! -x "$TESTAPP_BIN" ]; then
27 BAIL_OUT
"No UST events binary detected."
30 function get_auto_session_name
()
34 local lttng_bin
=$LTTNG_BIN
36 LTTNG_BIN
="${lttng_bin} --mi xml"
37 OUTPUT_DEST
=$
(mktemp
-t "tmp.${FUNCNAME[0]}_output.XXXXXX")
40 $MI_VALIDATE "$OUTPUT_DEST"
41 ok $?
"Valid lttng list XML"
43 value
=$
($XML_EXTRACT "$OUTPUT_DEST" ${XPATH_SESSION}/lttng
:name
/text\
(\
))
44 ok $?
"Extraction of session name"
49 # Transfer value to passed arguments
50 eval "$__result='$value'"
53 function test_ust_uid_live
()
55 local session_name
="$1"
58 diag
"Test UST uid buffer live [$grouping][${session_name}]"
60 create_lttng_session_uri
"$session_name" net
://localhost
--live
62 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
63 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
64 start_lttng_tracing_ok
"$session_name"
66 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
68 stop_lttng_tracing_ok
"$session_name"
69 destroy_lttng_session_ok
"$session_name" --no-wait
71 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
72 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
74 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
77 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
78 rm -rf "${TRACE_PATH:?}/$session_name"
80 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
84 function test_ust_pid_live
()
86 local session_name
="$1"
89 diag
"Test UST pid buffer live [$grouping][${session_name}]"
91 create_lttng_session_uri
"$session_name" net
://localhost
--live
93 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-pid"
94 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
95 start_lttng_tracing_ok
"$session_name"
97 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
99 stop_lttng_tracing_ok
"$session_name"
100 destroy_lttng_session_ok
"$session_name" --no-wait
102 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
103 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
105 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
108 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
109 rm -rf "${TRACE_PATH:?}/$session_name"
111 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
115 function test_ust_uid_live_custom_output
()
117 local session_name
="$1"
119 local custom_output
="my_live_custom_output"
121 diag
"Test UST uid buffer live, custom output [$grouping][${session_name}]"
123 create_lttng_session_uri
"$session_name" net
://localhost
/$custom_output --live
125 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
126 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
127 start_lttng_tracing_ok
"$session_name"
129 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
131 stop_lttng_tracing_ok
"$session_name"
132 destroy_lttng_session_ok
"$session_name" --no-wait
134 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
135 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/$custom_output"
137 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$custom_output"
140 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
141 rm -rf "${TRACE_PATH:?}/$session_name"
143 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
147 function test_ust_uid_streaming
()
149 local session_name
="$1"
152 diag
"Test UST uid buffer streaming [$grouping][${session_name}]"
154 create_lttng_session_uri
"$session_name" net
://localhost
156 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
157 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
158 start_lttng_tracing_ok
"$session_name"
160 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
162 stop_lttng_tracing_ok
"$session_name"
163 destroy_lttng_session_ok
"$session_name" --no-wait
165 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
166 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
168 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
171 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
172 rm -rf "${TRACE_PATH:?}/$session_name"
174 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
178 function test_ust_pid_streaming
()
180 local session_name
="$1"
182 diag
"Test UST pid buffer streaming [$grouping][${session_name}]"
184 create_lttng_session_uri
"$session_name" net
://localhost
186 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-pid"
187 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
188 start_lttng_tracing_ok
"$session_name"
190 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
192 stop_lttng_tracing_ok
"$session_name"
193 destroy_lttng_session_ok
"$session_name" --no-wait
195 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
196 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
198 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
201 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
202 rm -rf "${TRACE_PATH:?}/$session_name"
204 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
208 function test_ust_uid_streaming_custom_output
()
210 local session_name
="$1"
212 local custom_output
="custom_second_token"
214 diag
"Test UST uid buffer streaming, custom output [$grouping][${session_name}]"
216 create_lttng_session_uri
"$session_name" net
://localhost
/$custom_output
218 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
219 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
220 start_lttng_tracing_ok
"$session_name"
222 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
224 stop_lttng_tracing_ok
"$session_name"
225 destroy_lttng_session_ok
"$session_name" --no-wait
227 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
228 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/$custom_output"
230 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$custom_output"
233 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
234 rm -rf "${TRACE_PATH:?}/$session_name"
236 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
240 function test_ust_uid_streaming_rotate
()
242 local session_name
="$1"
245 diag
"Test UST uid buffer rotate [$grouping][${session_name}]"
247 create_lttng_session_uri
"$session_name" net
://localhost
249 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
250 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
251 start_lttng_tracing_ok
"$session_name"
253 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
254 rotate_session_ok
"$session_name"
256 stop_lttng_tracing_ok
"$session_name"
257 destroy_lttng_session_ok
"$session_name" --no-wait
259 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
260 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
262 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
265 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
266 rm -rf "${TRACE_PATH:?}/$session_name"
268 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
272 function test_ust_uid_streaming_rotate_custom_output
()
274 local session_name
="$1"
276 local custom_output
="rotate_custom_path"
278 diag
"Test UST uid buffer rotate, custom output [$grouping][${session_name}]"
280 create_lttng_session_uri
"$session_name" net
://localhost
/$custom_output
282 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
283 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
284 start_lttng_tracing_ok
"$session_name"
286 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
287 rotate_session_ok
"$session_name"
290 stop_lttng_tracing_ok
"$session_name"
291 destroy_lttng_session_ok
"$session_name" --no-wait
293 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
294 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/$custom_output"
296 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$custom_output"
299 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
300 rm -rf "${TRACE_PATH:?}/$session_name"
302 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
306 function test_ust_pid_streaming_rotate
()
308 local session_name
="$1"
311 diag
"Test UST pid buffer rotate with session_name [$grouping][${session_name}]"
313 create_lttng_session_uri
"$session_name" net
://localhost
315 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-pid"
316 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
317 start_lttng_tracing_ok
"$session_name"
319 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
320 rotate_session_ok
"$session_name"
322 stop_lttng_tracing_ok
"$session_name"
323 destroy_lttng_session_ok
"$session_name" --no-wait
325 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
326 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
328 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
331 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
332 rm -rf "${TRACE_PATH:?}/$session_name"
334 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
338 function test_ust_uid_streaming_snapshot
()
340 local session_name
="$1"
343 diag
"Test UST uid buffer snapshot streaming using 'create --snapshot' [$grouping][${session_name}]"
345 create_lttng_session_uri
"$session_name" net
://localhost
--snapshot
347 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-uid"
348 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
349 start_lttng_tracing_ok
"$session_name"
351 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
352 lttng_snapshot_record
"$session_name"
354 stop_lttng_tracing_ok
"$session_name"
355 destroy_lttng_session_ok
"$session_name" --no-wait
357 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
358 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME*"
360 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*"
363 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
364 rm -rf "${TRACE_PATH:?}/$session_name"
366 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
370 function test_ust_pid_streaming_snapshot
()
372 local session_name
="$1"
375 local file_sync_after_first
376 local file_sync_before_last
378 file_sync_after_first
=$
(mktemp
-u -t "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX")
379 file_sync_before_last
=$
(mktemp
-u -t "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX")
381 diag
"Test UST pid buffer snapshot streaming using 'create --snapshot' [$grouping][${session_name}]"
383 create_lttng_session_uri
"$session_name" net
://localhost
--snapshot
385 enable_ust_lttng_channel_ok
"$session_name" "$CHANNEL_NAME" "--buffers-pid"
386 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
387 start_lttng_tracing_ok
"$session_name"
389 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \
390 --sync-after-first-event "$file_sync_after_first" \
391 --sync-before-last-event "$file_sync_before_last" 2>&1 &
393 while [ ! -f "${file_sync_after_first}" ]; do
397 lttng_snapshot_record
"$session_name"
399 touch "$file_sync_before_last"
402 stop_lttng_tracing_ok
"$session_name"
403 destroy_lttng_session_ok
"$session_name" --no-wait
405 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
406 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/snapshot-1*"
408 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*/snapshot-1*"
411 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
412 rm -rf "${TRACE_PATH:?}/$session_name"
414 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
417 rm -f "$file_sync_after_first"
418 rm -f "$file_sync_before_last"
421 function test_ust_uid_streaming_snapshot_add_output_default_name
()
423 local session_name
="$1"
426 diag
"Test UST uid buffer snapshot using 'add-output' with default snapshot name [$grouping][${session_name}]"
428 create_lttng_session_no_output
"$session_name"
430 enable_lttng_mmap_overwrite_ust_channel
"$session_name" "$CHANNEL_NAME"
431 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
432 start_lttng_tracing_ok
"$session_name"
434 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
436 lttng_snapshot_add_output_ok
"$session_name" "net://localhost"
437 lttng_snapshot_record
"$session_name"
439 stop_lttng_tracing_ok
"$session_name"
440 destroy_lttng_session_ok
"$session_name" --no-wait
442 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
443 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/snapshot-1*"
445 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*/snapshot-1*"
448 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
449 rm -rf "${TRACE_PATH:?}/$session_name"
451 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
455 function test_ust_uid_streaming_snapshot_add_output_custom_name
()
457 local session_name
="$1"
459 local snapshot_name
="this_is_my_snapshot"
461 diag
"Test UST uid buffer snapshot using 'add-output' with custom snapshot name [$grouping][${session_name}]"
463 create_lttng_session_no_output
"$session_name"
465 enable_lttng_mmap_overwrite_ust_channel
"$session_name" "$CHANNEL_NAME"
466 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
467 start_lttng_tracing_ok
"$session_name"
469 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
471 lttng_snapshot_add_output_ok
"$session_name" "net://localhost" "-n $snapshot_name"
472 lttng_snapshot_record
"$session_name"
474 stop_lttng_tracing_ok
"$session_name"
475 destroy_lttng_session_ok
"$session_name" --no-wait
477 # When session name is automatic, the actual directory is "auto", not
479 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
480 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/$snapshot_name*"
482 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$session_name*/$snapshot_name*"
485 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
486 rm -rf "${TRACE_PATH:?}/$session_name"
488 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
492 function test_ust_uid_streaming_snapshot_add_output_custom_name_custom_output
()
494 local session_name
="$1"
496 local snapshot_name
="this_is_my_snapshot"
497 local custom_output
="this/is/my/custom/path"
499 diag
"Test UST uid buffer snapshot using 'add-output' with custom snapshot name and custom output path [$grouping][${session_name}]"
501 create_lttng_session_no_output
"$session_name"
503 enable_lttng_mmap_overwrite_ust_channel
"$session_name" "$CHANNEL_NAME"
504 enable_ust_lttng_event_ok
"$session_name" "$EVENT_NAME" "$CHANNEL_NAME"
505 start_lttng_tracing_ok
"$session_name"
507 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
509 lttng_snapshot_add_output_ok
"$session_name" "net://localhost/$custom_output" "-n $snapshot_name"
510 lttng_snapshot_record
"$session_name"
512 stop_lttng_tracing_ok
"$session_name"
513 destroy_lttng_session_ok
"$session_name" --no-wait
515 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
516 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$session_name/$HOSTNAME-*/$custom_output/$snapshot_name*"
518 validate_trace
"$EVENT_NAME" "$TRACE_PATH/$HOSTNAME/$custom_output/$snapshot_name*"
521 if [ "$grouping" = "$GROUP_BY_SESSION" ]; then
522 rm -rf "${TRACE_PATH:?}/$session_name"
524 rm -rf "${TRACE_PATH:?}/$HOSTNAME"
528 plan_tests
$NUM_TESTS
530 print_test_banner
"$TEST_DESC"
532 bail_out_if_no_babeltrace
537 test_ust_uid_live_custom_output
538 test_ust_uid_streaming
539 test_ust_pid_streaming
540 test_ust_uid_streaming_custom_output
541 test_ust_uid_streaming_rotate
542 test_ust_uid_streaming_rotate_custom_output
543 test_ust_pid_streaming_rotate
544 test_ust_uid_streaming_snapshot
545 test_ust_pid_streaming_snapshot
546 test_ust_uid_streaming_snapshot_add_output_default_name
547 test_ust_uid_streaming_snapshot_add_output_custom_name
548 test_ust_uid_streaming_snapshot_add_output_custom_name_custom_output
551 GROUP_BY_SESSION
="--group-output-by-session"
552 GROUP_BY_HOSTNAME
="--group-output-by-host"
558 for grouping
in "${grouping_types[@]}";
560 TRACE_PATH
=$
(mktemp
-d -t tmp.test_relayd_grouping_ust_trace_path.XXXXXX
)
561 # Set the relayd in --group-output-by-session mode
562 start_lttng_relayd
"-o $TRACE_PATH $grouping"
564 for fct_test
in "${tests[@]}";
566 # Perform test when session name is given
568 ${fct_test} "$name" "$grouping"
569 count
=$
(find "$TRACE_PATH/" -maxdepth 1 -mindepth 1 |
wc -l)
570 is
"$count" "0" "LTTng-relayd output directory empty"