1 # Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
3 # SPDX-License-Identifier: LGPL-2.1-only
6 SESSIOND_BIN
="lttng-sessiond"
7 SESSIOND_MATCH
=".*lttng-sess.*"
8 RUNAS_BIN
="lttng-runas"
9 RUNAS_MATCH
=".*lttng-runas.*"
10 CONSUMERD_BIN
="lttng-consumerd"
11 CONSUMERD_MATCH
=".*lttng-consumerd.*"
12 RELAYD_BIN
="lttng-relayd"
13 RELAYD_MATCH
=".*lttng-relayd.*"
15 BABELTRACE_BIN
="babeltrace"
17 ERROR_OUTPUT_DEST
=/dev
/null
19 # To match 20201127-175802
20 date_time_pattern
="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]"
21 # The size of a long on this system
22 system_long_bit_size
=$
(getconf LONG_BIT
)
24 # Minimal kernel version supported for session daemon tests
25 KERNEL_MAJOR_VERSION
=2
26 KERNEL_MINOR_VERSION
=6
27 KERNEL_PATCHLEVEL_VERSION
=27
29 # We set the default UST register timeout and network and app socket timeout to
30 # "wait forever", so that basic tests don't have to worry about hitting
31 # timeouts on busy systems. Specialized tests should test those corner-cases.
32 export LTTNG_UST_REGISTER_TIMEOUT
=-1
33 export LTTNG_NETWORK_SOCKET_TIMEOUT
=-1
34 export LTTNG_APP_SOCKET_TIMEOUT
=-1
36 # We set the default lttng-sessiond path to /bin/true to prevent the spawning
37 # of a daemonized sessiond. This is necessary since 'lttng create' will spawn
38 # its own sessiond if none is running. It also ensures that 'lttng create'
39 # fails when no sessiond is running.
40 export LTTNG_SESSIOND_PATH
="/bin/true"
42 source $TESTDIR/utils
/tap
/tap.sh
44 if [ -z ${LTTNG_TEST_TEARDOWN_TIMEOUT+x} ]; then
45 LTTNG_TEST_TEARDOWN_TIMEOUT
=60
48 function full_cleanup
()
50 # Try to kill daemons gracefully
51 stop_lttng_relayd_notap SIGTERM
$LTTNG_TEST_TEARDOWN_TIMEOUT
52 stop_lttng_sessiond_notap SIGTERM
$LTTNG_TEST_TEARDOWN_TIMEOUT
54 # If daemons are still present, forcibly kill them
55 stop_lttng_relayd_notap SIGKILL
$LTTNG_TEST_TEARDOWN_TIMEOUT
56 stop_lttng_sessiond_notap SIGKILL
$LTTNG_TEST_TEARDOWN_TIMEOUT
57 stop_lttng_consumerd_notap SIGKILL
$LTTNG_TEST_TEARDOWN_TIMEOUT
59 # Disable trap for SIGTERM since the following kill to the
60 # pidgroup will be SIGTERM. Otherwise it loops.
61 # The '-' before the pid number ($$) indicates 'kill' to signal the
62 # whole process group.
63 trap - SIGTERM
&& kill -- -$$
67 function null_pipes
()
74 trap full_cleanup SIGINT SIGTERM
76 # perl prove closes its child pipes before giving it a chance to run its
77 # signal trap handlers. Redirect pipes to /dev/null if SIGPIPE is caught
78 # to allow those trap handlers to proceed.
80 trap null_pipes SIGPIPE
84 # Check if we are a terminal
86 echo -e "\e[1;32mOK\e[0m"
92 function print_fail
()
94 # Check if we are a terminal
96 echo -e "\e[1;31mFAIL\e[0m"
102 function print_test_banner
()
108 function validate_kernel_version
()
110 local kern_version
=($
(uname
-r |
awk -F.
'{ printf("%d.%d.%d\n",$1,$2,$3); }' |
tr '.' '\n'))
111 if [ ${kern_version[0]} -gt $KERNEL_MAJOR_VERSION ]; then
114 if [ ${kern_version[1]} -gt $KERNEL_MINOR_VERSION ]; then
117 if [ ${kern_version[2]} -ge $KERNEL_PATCHLEVEL_VERSION ]; then
123 # Generate a random string
124 # $1 = number of characters; defaults to 16
125 # $2 = include special characters; 1 = yes, 0 = no; defaults to yes
126 function randstring
()
128 [ "$2" == "0" ] && CHAR
="[:alnum:]" || CHAR
="[:graph:]"
129 cat /dev
/urandom
2>/dev
/null |
tr -cd "$CHAR" 2>/dev
/null |
head -c ${1:-16} 2>/dev
/null
133 # Helpers for get_possible_cpus.
134 function get_possible_cpus_count_from_sysfs_possible_mask
()
136 local max_possible_cpu_id
138 # The Awk script extracts the highest CPU id from the possible CPU
139 # mask. Assuming a numerical order, a field separator '-' and a record
140 # separator ','. The last value parsed is the highest id.
141 if [ -f /sys
/devices
/system
/cpu
/possible
]; then
142 max_possible_cpu_id
=$
(awk -F '-' 'BEGIN { RS = ","} { last = $NF } END { printf("%d\n", last) }' \
143 /sys
/devices
/system
/cpu
/possible
)
144 echo "$((max_possible_cpu_id+1))"
150 # This is a fallback if the possible CPU mask is not available. This will not
151 # take into account unplugged CPUs.
152 function get_max_cpus_count_from_sysfs_cpu_directories
()
154 local max_possible_cpu_id
=0
157 for i
in /sys
/devices
/system
/cpu
/cpu
[0-9]*; do
158 current_cpu_id
="${i#/sys/devices/system/cpu/cpu}"
159 if [ "$current_cpu_id" -gt "$max_possible_cpu_id" ]; then
160 max_possible_cpu_id
="$current_cpu_id"
164 echo "$((max_possible_cpu_id+1))"
167 # Return the number of possible CPUs.
168 function get_possible_cpus_count
()
170 local possible_cpus_count
171 possible_cpus_count
=$
(get_possible_cpus_count_from_sysfs_possible_mask
)
173 if [ "$possible_cpus_count" -eq "0" ]; then
174 local configured_cpus_count
175 configured_cpus_count
=$
(getconf _NPROCESSORS_CONF
)
176 possible_cpus_count
=$
(get_max_cpus_count_from_sysfs_cpu_directories
)
177 possible_cpus_count
=$
((configured_cpus_count
> possible_cpus_count \
178 ? configured_cpus_count \
179 : possible_cpus_count
))
182 echo "$possible_cpus_count"
185 # Return the list of exposed CPU.
187 # NOTE! Use it like so:
189 # IFS=" " read -r -a VARIABLE <<< "$(get_exposed_cpus_list)"
190 function get_exposed_cpus_list
()
194 for i
in /sys
/devices
/system
/cpu
/cpu
[0-9]*; do
195 list
+=("${i#/sys/devices/system/cpu/cpu}")
201 # Return any available CPU found. Do not make assumption about the returned
202 # value, e.g. that it could be 0.
203 function get_any_available_cpu
()
205 for cpu
in /sys
/devices
/system
/cpu
/cpu
[0-9]*; do
206 echo "${cpu#/sys/devices/system/cpu/cpu}"
211 # Return the number of _configured_ CPUs.
212 function conf_proc_count
()
214 getconf _NPROCESSORS_CONF
215 if [ $?
-ne 0 ]; then
216 diag
"Failed to get the number of configured CPUs"
221 # Check if base lttng-modules are present.
222 # Bail out on failure
223 function validate_lttng_modules_present
()
225 # Check for loadable modules.
226 modprobe
-n lttng-tracer
2>/dev
/null
227 if [ $?
-eq 0 ]; then
231 # Check for builtin modules.
232 ls /proc
/lttng
> /dev
/null
2>&1
233 if [ $?
-eq 0 ]; then
237 BAIL_OUT
"LTTng modules not detected."
240 # Run the lttng binary.
242 # The first two arguments are stdout and stderr redirect paths, respectively.
243 # The rest of the arguments are forwarded to the lttng binary
244 function _run_lttng_cmd
246 local stdout_dest
="$1"
247 local stderr_dest
="$2"
250 diag
"$TESTDIR/../src/bin/lttng/$LTTNG_BIN $*"
251 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN "$@" 1> "$stdout_dest" 2> "$stderr_dest"
254 function enable_kernel_lttng_event
257 local expected_to_fail
="$2"
259 local event_name
="$4"
260 local channel_name
="$5"
262 if [ -z "$event_name" ]; then
263 # Enable all event if no event name specified
267 if [ -z "$channel_name" ]; then
268 # default channel if none specified
271 chan
="-c $channel_name"
274 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
276 if [[ $expected_to_fail -eq "1" ]]; then
279 if [ $withtap -eq "1" ]; then
280 ok
$ret "Enable kernel event $event_name for session $session_name on channel $channel_name failed as expected"
283 if [ $withtap -eq "1" ]; then
284 ok
$ret "Enable kernel event $event_name for session $sess_name"
289 function enable_kernel_lttng_event_ok
()
291 enable_kernel_lttng_event
1 0 "$@"
294 function enable_kernel_lttng_event_fail
()
296 enable_kernel_lttng_event
1 1 "$@"
299 function enable_kernel_lttng_event_notap
()
301 enable_kernel_lttng_event
0 0 "$@"
305 function lttng_enable_kernel_event
307 enable_kernel_lttng_event_ok
"$@"
310 function lttng_enable_kernel_syscall
()
312 local expected_to_fail
=$1
314 local syscall_name
=$3
315 local channel_name
=$4
317 if [ -z $syscall_name ]; then
318 # Enable all event if no syscall name specified
322 if [ -z $channel_name ]; then
323 # default channel if none specified
326 chan
="-c $channel_name"
329 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
331 if [[ $expected_to_fail -eq "1" ]]; then
333 ok $?
"Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name fail as expected"
335 ok
$ret "Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
339 function lttng_enable_kernel_syscall_ok
()
341 lttng_enable_kernel_syscall
0 "$@"
344 function lttng_enable_kernel_syscall_fail
()
346 lttng_enable_kernel_syscall
1 "$@"
349 function lttng_disable_kernel_syscall
()
351 local expected_to_fail
=$1
353 local syscall_name
=$3
354 local channel_name
=$4
356 if [ -z $syscall_name ]; then
357 # Enable all event if no syscall name specified
361 if [ -z $channel_name ]; then
362 # default channel if none specified
365 chan
="-c $channel_name"
368 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
--syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
371 if [[ $expected_to_fail -eq "1" ]]; then
373 ok $?
"Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name failed as expected"
375 ok
$ret "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
379 function lttng_disable_kernel_syscall_ok
()
381 lttng_disable_kernel_syscall
0 "$@"
384 function lttng_disable_kernel_syscall_fail
()
386 lttng_disable_kernel_syscall
1 "$@"
389 function lttng_enable_kernel_userspace_probe_event
()
391 local expected_to_fail
="$1"
394 local event_name
="$4"
396 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-event
--kernel --userspace-probe="$target" "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
398 if [[ $expected_to_fail -eq "1" ]]; then
400 ok $?
"Enable kernel userspace probe event for session $sess_name failed as expected"
402 ok
$ret "Enable kernel userspace probe event for session $sess_name"
406 function lttng_enable_kernel_userspace_probe_event_fail
()
408 lttng_enable_kernel_userspace_probe_event
1 "$@"
411 function lttng_enable_kernel_userspace_probe_event_ok
()
413 lttng_enable_kernel_userspace_probe_event
0 "$@"
416 function disable_kernel_lttng_userspace_probe_event_ok
()
419 local event_name
="$2"
421 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" disable-event
--kernel "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
422 ok $?
"Disable kernel event $target for session $sess_name"
424 function lttng_enable_kernel_channel
()
427 local expected_to_fail
=$2
429 local channel_name
=$4
432 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-k $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
434 if [[ $expected_to_fail -eq "1" ]]; then
437 if [ $withtap -eq "1" ]; then
438 ok
$ret "Enable channel $channel_name for session $sess_name failed as expected"
441 if [ $withtap -eq "1" ]; then
442 ok
$ret "Enable channel $channel_name for session $sess_name"
447 function lttng_enable_kernel_channel_ok
()
449 lttng_enable_kernel_channel
1 0 "$@"
452 function lttng_enable_kernel_channel_fail
()
454 lttng_enable_kernel_channel
1 1 "$@"
457 function lttng_enable_kernel_channel_notap
()
459 lttng_enable_kernel_channel
0 0 "$@"
462 function enable_kernel_lttng_channel_ok
()
464 lttng_enable_kernel_channel
1 0 "$@"
467 function lttng_disable_kernel_channel
()
469 local expected_to_fail
=$1
471 local channel_name
=$3
473 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-channel
-k $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
475 if [[ $expected_to_fail -eq "1" ]]; then
477 ok $?
"Disable channel $channel_name for session $sess_name failed as expected"
479 ok
$ret "Disable channel $channel_name for session $sess_name"
483 function lttng_disable_kernel_channel_ok
()
485 lttng_disable_kernel_channel
0 "$@"
488 function lttng_disable_kernel_channel_fail
()
490 lttng_disable_kernel_channel
1 "$@"
493 function start_lttng_relayd_opt
()
496 local process_mode
=$2
499 DIR
=$
(readlink
-f "$TESTDIR")
501 if [ -z $
(pgrep
$RELAYD_MATCH) ]; then
502 # shellcheck disable=SC2086
503 $DIR/..
/src
/bin
/lttng-relayd
/$RELAYD_BIN $process_mode $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
504 #$DIR/../src/bin/lttng-relayd/$RELAYD_BIN $opt -vvv >>/tmp/relayd.log 2>&1 &
505 if [ $?
-eq 1 ]; then
506 if [ $withtap -eq "1" ]; then
507 fail
"Start lttng-relayd (process mode: $process_mode opt: $opt)"
511 if [ $withtap -eq "1" ]; then
512 pass
"Start lttng-relayd (process mode: $process_mode opt: $opt)"
516 pass
"Start lttng-relayd (opt: $opt)"
520 function start_lttng_relayd
()
522 start_lttng_relayd_opt
1 "-b" "$@"
525 function start_lttng_relayd_notap
()
527 start_lttng_relayd_opt
0 "-b" "$@"
530 function stop_lttng_relayd_opt
()
535 if [ -z "$signal" ]; then
542 # Multiply time by 2 to simplify integer arithmetic
543 if [ -n "$timeout_s" ]; then
544 dtimeleft_s
=$
((timeout_s
* 2))
550 pids
=$
(pgrep
"$RELAYD_MATCH")
551 if [ -z "$pids" ]; then
552 if [ "$withtap" -eq "1" ]; then
553 pass
"No relay daemon to kill"
558 diag
"Killing (signal $signal) lttng-relayd (pid: $pids)"
560 # shellcheck disable=SC2086
561 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
563 if [ "$withtap" -eq "1" ]; then
564 fail
"Kill relay daemon"
568 while [ -n "$out" ]; do
569 out
=$
(pgrep
"$RELAYD_MATCH")
570 if [ -n "$dtimeleft_s" ]; then
571 if [ $dtimeleft_s -lt 0 ]; then
575 dtimeleft_s
=$
((dtimeleft_s
- 1))
579 if [ "$withtap" -eq "1" ]; then
580 if [ "$retval" -eq "0" ]; then
581 pass
"Wait after kill relay daemon"
583 fail
"Wait after kill relay daemon"
590 function stop_lttng_relayd
()
592 stop_lttng_relayd_opt
1 "$@"
595 function stop_lttng_relayd_notap
()
597 stop_lttng_relayd_opt
0 "$@"
600 #First arg: show tap output
601 #Second argument: load path for automatic loading
602 function start_lttng_sessiond_opt
()
610 local long_bit_value
=
611 long_bit_value
=$
(getconf LONG_BIT
)
613 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
614 # Env variable requested no session daemon
618 DIR
=$
(readlink
-f "$TESTDIR")
620 # Get long_bit value for 32/64 consumerd
621 case "$long_bit_value" in
623 consumerd
="--consumerd32-path=$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
626 consumerd
="--consumerd64-path=$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
633 # Check for env. variable. Allow the use of LD_PRELOAD etc.
634 if [[ "x${LTTNG_SESSIOND_ENV_VARS}" != "x" ]]; then
635 env_vars
="${LTTNG_SESSIOND_ENV_VARS} "
637 env_vars
="${env_vars}$DIR/../src/bin/lttng-sessiond/$SESSIOND_BIN"
639 if ! validate_kernel_version
; then
640 fail
"Start session daemon"
641 BAIL_OUT
"*** Kernel too old for session daemon tests ***"
644 : "${LTTNG_SESSION_CONFIG_XSD_PATH="${DIR}/../src/common/config/"}"
645 export LTTNG_SESSION_CONFIG_XSD_PATH
647 if [ -z "$(pgrep "${SESSIOND_MATCH}")" ]; then
649 if [ -n "$load_path" ]; then
650 # shellcheck disable=SC2086
651 env
$env_vars --load "$load_path" --background "$consumerd"
653 # shellcheck disable=SC2086
654 env
$env_vars --background "$consumerd"
656 #$DIR/../src/bin/lttng-sessiond/$SESSIOND_BIN --background --consumerd32-path="$DIR/../src/bin/lttng-consumerd/lttng-consumerd" --consumerd64-path="$DIR/../src/bin/lttng-consumerd/lttng-consumerd" --verbose-consumer >>/tmp/sessiond.log 2>&1
658 if [ "$withtap" -eq "1" ]; then
659 ok
$status "Start session daemon"
664 function start_lttng_sessiond
()
666 start_lttng_sessiond_opt
1 "$@"
669 function start_lttng_sessiond_notap
()
671 start_lttng_sessiond_opt
0 "$@"
674 function stop_lttng_sessiond_opt
()
679 if [ -z "$signal" ]; then
686 # Multiply time by 2 to simplify integer arithmetic
687 if [ -n "$timeout_s" ]; then
688 dtimeleft_s
=$
((timeout_s
* 2))
691 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
692 # Env variable requested no session daemon
699 runas_pids
=$
(pgrep
"$RUNAS_MATCH")
702 pids
=$
(pgrep
"$SESSIOND_MATCH")
704 if [ -n "$runas_pids" ]; then
705 pids
="$pids $runas_pids"
708 if [ -z "$pids" ]; then
709 if [ "$withtap" -eq "1" ]; then
710 pass
"No session daemon to kill"
715 diag
"Killing (signal $signal) $SESSIOND_BIN and lt-$SESSIOND_BIN pids: $(echo "$pids" | tr '\n' ' ')"
717 # shellcheck disable=SC2086
718 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
720 if [ "$withtap" -eq "1" ]; then
721 fail
"Kill sessions daemon"
725 while [ -n "$out" ]; do
726 out
=$
(pgrep
"${SESSIOND_MATCH}")
727 if [ -n "$dtimeleft_s" ]; then
728 if [ $dtimeleft_s -lt 0 ]; then
732 dtimeleft_s
=$
((dtimeleft_s
- 1))
737 while [ -n "$out" ]; do
738 out
=$
(pgrep
"$CONSUMERD_MATCH")
739 if [ -n "$dtimeleft_s" ]; then
740 if [ $dtimeleft_s -lt 0 ]; then
744 dtimeleft_s
=$
((dtimeleft_s
- 1))
749 if [ "$withtap" -eq "1" ]; then
750 if [ "$retval" -eq "0" ]; then
751 pass
"Wait after kill session daemon"
753 fail
"Wait after kill session daemon"
757 if [ "$signal" = "SIGKILL" ]; then
758 if [ "$(id -u)" -eq "0" ]; then
760 modules
="$(lsmod | grep ^lttng | awk '{print $1}')"
762 if [ -n "$modules" ]; then
763 diag
"Unloading all LTTng modules"
764 modprobe
--remove "$modules"
772 function stop_lttng_sessiond
()
774 stop_lttng_sessiond_opt
1 "$@"
777 function stop_lttng_sessiond_notap
()
779 stop_lttng_sessiond_opt
0 "$@"
782 function sigstop_lttng_sessiond_opt
()
787 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
788 # Env variable requested no session daemon
792 PID_SESSIOND
="$(pgrep "${SESSIOND_MATCH}") $(pgrep "$RUNAS_MATCH")"
794 if [ "$withtap" -eq "1" ]; then
795 diag
"Sending SIGSTOP to lt-$SESSIOND_BIN and $SESSIOND_BIN pids: $(echo "$PID_SESSIOND" | tr '\n' ' ')"
798 # shellcheck disable=SC2086
799 if ! kill -s $signal $PID_SESSIOND 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
800 if [ "$withtap" -eq "1" ]; then
801 fail
"Sending SIGSTOP to session daemon"
805 while [ $out -ne 0 ]; do
806 pid
="$(pgrep "$SESSIOND_MATCH")"
808 # Wait until state becomes stopped for session
811 for sessiond_pid
in $pid; do
812 state
="$(ps -p "$sessiond_pid" -o state= )"
813 if [[ -n "$state" && "$state" != "T" ]]; then
819 if [ "$withtap" -eq "1" ]; then
820 pass
"Sending SIGSTOP to session daemon"
825 function sigstop_lttng_sessiond
()
827 sigstop_lttng_sessiond_opt
1 "$@"
830 function sigstop_lttng_sessiond_notap
()
832 sigstop_lttng_sessiond_opt
0 "$@"
835 function stop_lttng_consumerd_opt
()
840 if [ -z "$signal" ]; then
847 # Multiply time by 2 to simplify integer arithmetic
848 if [ -n "$timeout_s" ]; then
849 dtimeleft_s
=$
((timeout_s
* 2))
854 PID_CONSUMERD
="$(pgrep "$CONSUMERD_MATCH")"
856 if [ -z "$PID_CONSUMERD" ]; then
857 if [ "$withtap" -eq "1" ]; then
858 pass
"No consumer daemon to kill"
863 diag
"Killing (signal $signal) $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')"
865 # shellcheck disable=SC2086
866 if ! kill -s $signal $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
868 if [ "$withtap" -eq "1" ]; then
869 fail
"Kill consumer daemon"
873 while [ $out -ne 0 ]; do
874 pid
="$(pgrep "$CONSUMERD_MATCH")"
876 # If consumerds are still present check their status.
877 # A zombie status qualifies the consumerd as *killed*
879 for consumer_pid
in $pid; do
880 state
="$(ps -p "$consumer_pid" -o state= )"
881 if [[ -n "$state" && "$state" != "Z" ]]; then
885 if [ -n "$dtimeleft_s" ]; then
886 if [ $dtimeleft_s -lt 0 ]; then
890 dtimeleft_s
=$
((dtimeleft_s
- 1))
894 if [ "$withtap" -eq "1" ]; then
895 if [ "$retval" -eq "0" ]; then
896 pass
"Wait after kill consumer daemon"
898 fail
"Wait after kill consumer daemon"
906 function stop_lttng_consumerd
()
908 stop_lttng_consumerd_opt
1 "$@"
911 function stop_lttng_consumerd_notap
()
913 stop_lttng_consumerd_opt
0 "$@"
916 function sigstop_lttng_consumerd_opt
()
921 PID_CONSUMERD
="$(pgrep "$CONSUMERD_MATCH")"
923 diag
"Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')"
925 # shellcheck disable=SC2086
926 kill -s $signal $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
929 if [ $retval -eq 1 ]; then
930 if [ "$withtap" -eq "1" ]; then
931 fail
"Sending SIGSTOP to consumer daemon"
936 while [ $out -ne 0 ]; do
937 pid
="$(pgrep "$CONSUMERD_MATCH")"
939 # Wait until state becomes stopped for all
942 for consumer_pid
in $pid; do
943 state
="$(ps -p "$consumer_pid" -o state= )"
944 if [[ -n "$state" && "$state" != "T" ]]; then
950 if [ "$withtap" -eq "1" ]; then
951 pass
"Sending SIGSTOP to consumer daemon"
957 function sigstop_lttng_consumerd
()
959 sigstop_lttng_consumerd_opt
1 "$@"
962 function sigstop_lttng_consumerd_notap
()
964 sigstop_lttng_consumerd_opt
0 "$@"
967 function list_lttng_with_opts
()
970 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN list
$opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
971 ok $?
"Lttng-tool list command with option $opts"
974 function create_lttng_session_no_output
()
979 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
$sess_name --no-output $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
980 ok $?
"Create session $sess_name in no-output mode"
983 function create_lttng_session_uri
() {
988 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
$sess_name -U $uri $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
989 ok $?
"Create session $sess_name with uri:$uri and opts: $opts"
992 function create_lttng_session
()
995 local expected_to_fail
=$2
1000 if [ -z "$trace_path" ]; then
1001 # Use lttng-sessiond default output.
1004 trace_path
="-o $trace_path"
1007 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
"$sess_name" $trace_path $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1009 if [ $expected_to_fail -eq "1" ]; then
1012 if [ $withtap -eq "1" ]; then
1013 ok
$ret "Create session $sess_name in $trace_path failed as expected"
1016 if [ $withtap -eq "1" ]; then
1017 ok
$ret "Create session $sess_name in $trace_path"
1023 function create_lttng_session_ok
()
1025 create_lttng_session
1 0 "$@"
1028 function create_lttng_session_fail
()
1030 create_lttng_session
1 1 "$@"
1033 function create_lttng_session_notap
()
1035 create_lttng_session
0 0 "$@"
1039 function enable_ust_lttng_channel
()
1042 local expected_to_fail
=$2
1044 local channel_name
=$4
1047 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-u $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1049 if [[ $expected_to_fail -eq "1" ]]; then
1052 if [ $withtap -eq "1" ]; then
1053 ok
$ret "Enable channel $channel_name for session $sess_name failed as expected"
1056 if [ $withtap -eq "1" ]; then
1057 ok
$ret "Enable channel $channel_name for session $sess_name"
1063 function enable_ust_lttng_channel_ok
()
1065 enable_ust_lttng_channel
1 0 "$@"
1068 function enable_ust_lttng_channel_fail
()
1070 enable_ust_lttng_channel
1 1 "$@"
1073 function enable_ust_lttng_channel_notap
()
1075 enable_ust_lttng_channel
0 0 "$@"
1078 function disable_ust_lttng_channel
()
1081 local channel_name
=$2
1083 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-channel
-u $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1084 ok $?
"Disable channel $channel_name for session $sess_name"
1087 function enable_lttng_mmap_overwrite_kernel_channel
()
1090 local channel_name
=$2
1092 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-s $sess_name $channel_name -k --output mmap
--overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1093 ok $?
"Enable channel $channel_name for session $sess_name"
1096 function enable_lttng_mmap_discard_small_kernel_channel
()
1099 local channel_name
=$2
1101 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-s $sess_name $channel_name -k --output mmap
--discard --subbuf-size=$
(getconf PAGE_SIZE
) --num-subbuf=2 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1102 ok $?
"Enable small discard channel $channel_name for session $sess_name"
1105 function enable_lttng_mmap_overwrite_small_kernel_channel
()
1108 local channel_name
=$2
1110 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-s $sess_name $channel_name -k --output mmap
--overwrite --subbuf-size=$
(getconf PAGE_SIZE
) --num-subbuf=2 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1111 ok $?
"Enable small discard channel $channel_name for session $sess_name"
1114 function enable_lttng_mmap_overwrite_ust_channel
()
1117 local channel_name
=$2
1119 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-s $sess_name $channel_name -u --output mmap
--overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1120 ok $?
"Enable channel $channel_name for session $sess_name"
1123 function enable_ust_lttng_event
()
1126 local expected_to_fail
=$2
1128 local event_name
="$4"
1129 local channel_name
=$5
1131 if [ -z $channel_name ]; then
1132 # default channel if none specified
1135 chan
="-c $channel_name"
1138 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1140 if [[ $expected_to_fail -eq "1" ]]; then
1143 if [[ $withtap -eq "1" ]]; then
1144 ok
$ret "Enable ust event $event_name for session $session_name failed as expected"
1147 if [[ $withtap -eq "1" ]]; then
1148 ok
$ret "Enable ust event $event_name for session $sess_name"
1154 function enable_ust_lttng_event_ok
()
1156 enable_ust_lttng_event
1 0 "$@"
1159 function enable_ust_lttng_event_fail
()
1161 enable_ust_lttng_event
1 1 "$@"
1164 function enable_ust_lttng_event_notap
()
1166 enable_ust_lttng_event
0 0 "$@"
1169 function enable_jul_lttng_event
()
1175 if [ -z $channel_name ]; then
1176 # default channel if none specified
1179 chan
="-c $channel_name"
1182 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1183 ok $?
"Enable JUL event $event_name for session $sess_name"
1186 function enable_jul_lttng_event_loglevel
()
1189 local event_name
="$2"
1191 local channel_name
=$4
1193 if [ -z $channel_name ]; then
1194 # default channel if none specified
1197 chan
="-c $channel_name"
1200 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel $loglevel "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1201 ok $?
"Enable JUL event $event_name for session $sess_name with loglevel $loglevel"
1204 function enable_log4j_lttng_event
()
1208 local channel_name
=$3
1212 # default channel if none specified
1213 if [ -n "$channel_name" ]; then
1214 chan_opt
=("-c" "$channel_name")
1217 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1218 enable-event
"$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1219 ok $?
"Enable LOG4J event '$event_name' for session '$sess_name'"
1222 function enable_log4j_lttng_event_filter
()
1228 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1229 enable-event
"$event_name" -s "$sess_name" --log4j --filter "$filter"
1230 ok $?
"Enable LOG4J event '$event_name' with filter '$filter' for session '$sess_name'"
1233 function enable_log4j_lttng_event_filter_loglevel_only
()
1240 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1241 enable-event
--loglevel-only "$loglevel" "$event_name" -s "$sess_name" -l --filter "$filter"
1242 ok $?
"Enable LOG4J event '$event_name' with filter '$filter' and loglevel-only '$loglevel' for session '$sess_name'"
1245 function enable_log4j_lttng_event_loglevel
()
1250 local channel_name
=$4
1253 # default channel if none specified
1254 if [ -n "$channel_name" ]; then
1255 chan_opt
=("-c" "$channel_name")
1258 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1259 enable-event
--loglevel "$loglevel" "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1260 ok $?
"Enable LOG4J event '$event_name' for session '$sess_name' with loglevel '$loglevel'"
1263 function enable_log4j_lttng_event_loglevel_only
()
1268 local channel_name
=$4
1272 # default channel if none specified
1273 if [ -n "$channel_name" ]; then
1274 chan_opt
=("-c" "$channel_name")
1277 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1278 enable-event
--loglevel-only "$loglevel" "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1279 ok $?
"Enable LOG4J event '$event_name' for session '$sess_name' with loglevel-only '$loglevel'"
1282 function enable_python_lttng_event
()
1288 if [ -z $channel_name ]; then
1289 # default channel if none specified
1292 chan
="-c $channel_name"
1295 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1296 ok $?
"Enable Python event $event_name for session $sess_name"
1299 function enable_python_lttng_event_loglevel
()
1302 local event_name
="$2"
1304 local channel_name
=$4
1306 if [ -z $channel_name ]; then
1307 # default channel if none specified
1310 chan
="-c $channel_name"
1313 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel $loglevel "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1314 ok $?
"Enable Python event $event_name for session $sess_name with loglevel $loglevel"
1317 function enable_ust_lttng_event_filter
()
1319 local sess_name
="$1"
1320 local event_name
="$2"
1322 local channel_name
=$4
1324 if [ -z $channel_name ]; then
1325 # default channel if none specified
1328 chan
="-c $channel_name"
1331 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
$chan "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1332 ok $?
"Enable event $event_name with filtering for session $sess_name"
1335 function enable_ust_lttng_event_loglevel
()
1337 local sess_name
="$1"
1338 local event_name
="$2"
1341 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" -s $sess_name -u --loglevel $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1342 ok $?
"Enable event $event_name with loglevel $loglevel"
1345 function enable_ust_lttng_event_loglevel_only
()
1347 local sess_name
="$1"
1348 local event_name
="$2"
1351 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" -s $sess_name -u --loglevel-only $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1352 ok $?
"Enable event $event_name with loglevel-only $loglevel"
1355 function disable_ust_lttng_event
()
1357 local sess_name
="$1"
1358 local event_name
="$2"
1359 local channel_name
="$3"
1361 if [ -z $channel_name ]; then
1362 # default channel if none specified
1365 chan
="-c $channel_name"
1368 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
"$event_name" -s $sess_name $chan -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1369 ok $?
"Disable event $event_name for session $sess_name"
1372 function disable_jul_lttng_event
()
1374 local sess_name
="$1"
1375 local event_name
="$2"
1377 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
"$event_name" -s $sess_name -j >/dev
/null
2>&1
1378 ok $?
"Disable JUL event $event_name for session $sess_name"
1381 function disable_log4j_lttng_event
()
1383 local sess_name
="$1"
1384 local event_name
="$2"
1386 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1387 disable-event
"$event_name" -s "$sess_name" --log4j
1388 ok $?
"Disable LOG4J event '$event_name' for session '$sess_name'"
1391 function disable_python_lttng_event
()
1393 local sess_name
="$1"
1394 local event_name
="$2"
1396 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
"$event_name" -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1397 ok $?
"Disable Python event $event_name for session $sess_name"
1400 function start_lttng_tracing_opt
()
1403 local expected_to_fail
=$2
1406 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN start
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1408 if [[ $expected_to_fail -eq "1" ]]; then
1411 if [ $withtap -eq "1" ]; then
1412 ok $?
"Start tracing for session $sess_name failed as expected"
1415 if [ $withtap -eq "1" ]; then
1416 ok
$ret "Start tracing for session $sess_name"
1421 function start_lttng_tracing_ok
()
1423 start_lttng_tracing_opt
1 0 "$@"
1426 function start_lttng_tracing_fail
()
1428 start_lttng_tracing_opt
1 1 "$@"
1431 function start_lttng_tracing_notap
()
1433 start_lttng_tracing_opt
0 1 "$@"
1436 function stop_lttng_tracing_opt
()
1439 local expected_to_fail
=$2
1442 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN stop
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1444 if [[ $expected_to_fail -eq "1" ]]; then
1447 if [ $withtap -eq "1" ]; then
1448 ok $?
"Stop lttng tracing for session $sess_name failed as expected"
1451 if [ $withtap -eq "1" ]; then
1452 ok
$ret "Stop lttng tracing for session $sess_name"
1457 function stop_lttng_tracing_ok
()
1459 stop_lttng_tracing_opt
1 0 "$@"
1462 function stop_lttng_tracing_fail
()
1464 stop_lttng_tracing_opt
1 1 "$@"
1467 function stop_lttng_tracing_notap
()
1469 stop_lttng_tracing_opt
0 0 "$@"
1472 function destroy_lttng_session
()
1475 local expected_to_fail
=$2
1478 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN destroy
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1480 if [[ $expected_to_fail -eq "1" ]]; then
1483 if [ $withtap -eq "1" ]; then
1484 ok
$ret "Destroy session $sess_name failed as expected"
1487 if [ $withtap -eq "1" ]; then
1488 ok
$ret "Destroy session $sess_name"
1493 function destroy_lttng_session_ok
()
1495 destroy_lttng_session
1 0 "$@"
1499 function destroy_lttng_session_fail
()
1501 destroy_lttng_session
1 1 "$@"
1504 function destroy_lttng_session_notap
()
1506 destroy_lttng_session
0 0 "$@"
1509 function destroy_lttng_sessions
()
1511 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN destroy
--all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1512 ok $?
"Destroy all lttng sessions"
1515 function lttng_snapshot_add_output
()
1517 local expected_to_fail
=$1
1522 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot add-output
-s $sess_name $trace_path $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1524 if [[ $expected_to_fail -eq 1 ]]; then
1526 ok $?
"Added snapshot output $trace_path failed as expected"
1528 ok
$ret "Added snapshot output $trace_path"
1532 function lttng_snapshot_add_output_ok
()
1534 lttng_snapshot_add_output
0 "$@"
1537 function lttng_snapshot_add_output_fail
()
1539 lttng_snapshot_add_output
1 "$@"
1542 function lttng_snapshot_del_output
()
1544 local expected_to_fail
=$1
1548 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot del-output
-s $sess_name $id 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1550 if [[ $expected_to_fail -eq "1" ]]; then
1552 ok $?
"Deleted snapshot output id $id failed as expected"
1554 ok
$ret "Deleted snapshot output id $id"
1558 function lttng_snapshot_del_output_ok
()
1560 lttng_snapshot_del_output
0 "$@"
1563 function lttng_snapshot_del_output_fail
()
1565 lttng_snapshot_del_output
1 "$@"
1568 function lttng_snapshot_record
()
1573 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot record
-s "$sess_name" "$trace_path" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1574 ok $?
"Snapshot recorded"
1577 function lttng_snapshot_list
()
1580 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot list-output
-s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1581 ok $?
"Snapshot list"
1584 function lttng_save
()
1589 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN save
$sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1590 ok $?
"Session saved"
1593 function lttng_load
()
1595 local expected_to_fail
=$1
1598 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN load
$opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1600 if [[ $expected_to_fail -eq "1" ]]; then
1602 ok $?
"Load command failed as expected with opts: $opts"
1604 ok
$ret "Load command with opts: $opts"
1608 function lttng_load_ok
()
1613 function lttng_load_fail
()
1618 function lttng_track
()
1620 local expected_to_fail
="$1"
1623 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN track
$opts >$OUTPUT_DEST
1625 if [[ $expected_to_fail -eq "1" ]]; then
1627 ok $?
"Track command failed as expected with opts: $opts"
1629 ok
$ret "Track command with opts: $opts"
1633 function lttng_track_ok
()
1638 function lttng_track_fail
()
1643 function lttng_untrack
()
1645 local expected_to_fail
="$1"
1648 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN untrack
$opts >$OUTPUT_DEST
1650 if [[ $expected_to_fail -eq "1" ]]; then
1652 ok $?
"Untrack command failed as expected with opts: $opts"
1654 ok
$ret "Untrack command with opts: $opts"
1658 function lttng_untrack_ok
()
1660 lttng_untrack
0 "$@"
1663 function lttng_untrack_fail
()
1665 lttng_untrack
1 "$@"
1668 function lttng_track_pid_ok
()
1671 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" track
--kernel --pid=$PID 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1672 ok $?
"Lttng track pid on the kernel domain"
1675 function lttng_untrack_kernel_all_ok
()
1677 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" untrack
--kernel --pid --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1678 ok $?
"Lttng untrack all pid on the kernel domain"
1681 function lttng_track_ust_ok
()
1683 lttng_track_ok
-u "$@"
1686 function lttng_track_ust_fail
()
1688 lttng_track_fail
-u "$@"
1691 function lttng_track_kernel_ok
()
1693 lttng_track_ok
-k "$@"
1696 function lttng_track_kernel_fail
()
1698 lttng_track_fail
-k "$@"
1701 function lttng_untrack_ust_ok
()
1703 lttng_untrack_ok
-u "$@"
1706 function lttng_untrack_ust_fail
()
1708 lttng_untrack_fail
-u "$@"
1711 function lttng_untrack_kernel_ok
()
1713 lttng_untrack_ok
-k "$@"
1716 function lttng_untrack_kernel_fail
()
1718 lttng_untrack_fail
-k "$@"
1721 function lttng_add_context_list
()
1723 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN add-context
--list 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1725 ok
$ret "Context listing"
1728 function add_context_lttng
()
1730 local expected_to_fail
="$1"
1732 local session_name
="$3"
1733 local channel_name
="$4"
1736 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN add-context
-s $session_name -c $channel_name -t $type $domain 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1738 if [[ $expected_to_fail -eq "1" ]]; then
1740 ok $?
"Add context command failed as expected for type: $type"
1742 ok
$ret "Add context command for type: $type"
1746 function add_context_ust_ok
()
1748 add_context_lttng
0 -u "$@"
1751 function add_context_ust_fail
()
1753 add_context_lttng
1 -u "$@"
1756 function add_context_kernel_ok
()
1758 add_context_lttng
0 -k "$@"
1761 function add_context_kernel_fail
()
1763 add_context_lttng
1 -k "$@"
1766 function wait_live_trace_ready
()
1769 local zero_client_match
=0
1771 diag
"Waiting for live trace at url: $url"
1772 while [ $zero_client_match -eq 0 ]; do
1773 zero_client_match
=$
($BABELTRACE_BIN -i lttng-live
$url |
grep "0 client(s) connected" |
wc -l)
1776 pass
"Waiting for live trace at url: $url"
1779 function wait_live_viewer_connect
()
1782 local one_client_match
=0
1784 diag
"Waiting for live viewers on url: $url"
1785 while [ $one_client_match -eq 0 ]; do
1786 one_client_match
=$
($BABELTRACE_BIN -i lttng-live
$url |
grep "1 client(s) connected" |
wc -l)
1789 pass
"Waiting for live viewers on url: $url"
1792 function bail_out_if_no_babeltrace
()
1794 which "$BABELTRACE_BIN" >/dev
/null
1795 if [ $?
-ne 0 ]; then
1796 LTTNG_BAIL_OUT
"\"$BABELTRACE_BIN\" binary not found. Skipping tests"
1800 function validate_metadata_event
()
1803 local nr_event_id
=$2
1806 local metadata_file
=$
(find $trace_path |
grep metadata
)
1807 local metadata_path
=$
(dirname $metadata_file)
1809 which $BABELTRACE_BIN >/dev
/null
1810 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1812 local count
=$
($BABELTRACE_BIN --output-format=ctf-metadata
$metadata_path |
grep $event_name |
wc -l)
1814 if [ "$count" -ne "$nr_event_id" ]; then
1815 fail
"Metadata match with the metadata of $count event(s) named $event_name"
1816 diag
"$count matching event id found in metadata"
1818 pass
"Metadata match with the metadata of $count event(s) named $event_name"
1823 function trace_matches
()
1829 which $BABELTRACE_BIN >/dev
/null
1830 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1832 local count
=$
($BABELTRACE_BIN $trace_path |
grep $event_name |
wc -l)
1834 if [ "$count" -ne "$nr_iter" ]; then
1836 diag
"$count matching events found in trace"
1842 function trace_match_only
()
1848 which $BABELTRACE_BIN >/dev
/null
1849 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1851 local count
=$
($BABELTRACE_BIN $trace_path |
grep $event_name |
wc -l)
1852 local total
=$
($BABELTRACE_BIN $trace_path |
wc -l)
1854 if [ "$nr_iter" -eq "$count" ] && [ "$total" -eq "$nr_iter" ]; then
1855 pass
"Trace match with $total event $event_name"
1858 diag
"$total event(s) found, expecting $nr_iter of event $event_name and only found $count"
1862 function validate_trace
1867 which $BABELTRACE_BIN >/dev
/null
1868 if [ $?
-ne 0 ]; then
1869 skip
0 "Babeltrace binary not found. Skipping trace validation"
1874 for i
in $event_name; do
1875 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep $i |
wc -l)
1876 if [ "$traced" -ne 0 ]; then
1877 pass
"Validate trace for event $i, $traced events"
1879 fail
"Validate trace for event $i"
1880 diag
"Found $traced occurences of $i"
1888 function validate_trace_count
1892 local expected_count
=$3
1894 which $BABELTRACE_BIN >/dev
/null
1895 if [ $?
-ne 0 ]; then
1896 skip
0 "Babeltrace binary not found. Skipping trace validation"
1902 for i
in $event_name; do
1903 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep $i |
wc -l)
1904 if [ "$traced" -ne 0 ]; then
1905 pass
"Validate trace for event $i, $traced events"
1907 fail
"Validate trace for event $i"
1908 diag
"Found $traced occurences of $i"
1910 cnt
=$
(($cnt + $traced))
1913 test $cnt -eq $expected_count
1914 ok $?
"Read a total of $cnt events, expected $expected_count"
1917 function validate_trace_count_range_incl_min_excl_max
1921 local expected_min
=$3
1922 local expected_max
=$4
1924 which $BABELTRACE_BIN >/dev
/null
1925 if [ $?
-ne 0 ]; then
1926 skip
0 "Babeltrace binary not found. Skipping trace validation"
1932 for i
in $event_name; do
1933 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep $i |
wc -l)
1934 if [ "$traced" -ge $expected_min ]; then
1935 pass
"Validate trace for event $i, $traced events"
1937 fail
"Validate trace for event $i"
1938 diag
"Found $traced occurences of $i"
1940 cnt
=$
(($cnt + $traced))
1943 test $cnt -lt $expected_max
1944 ok $?
"Read a total of $cnt events, expected between [$expected_min, $expected_max["
1947 function trace_first_line
1951 which $BABELTRACE_BIN >/dev
/null
1952 if [ $?
-ne 0 ]; then
1953 skip
0 "Babeltrace binary not found. Skipping trace validation"
1956 $BABELTRACE_BIN $trace_path 2>/dev
/null |
head -n 1
1959 function validate_trace_exp
()
1964 which $BABELTRACE_BIN >/dev
/null
1965 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace validation"
1967 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep --extended-regexp ${event_exp} |
wc -l)
1968 if [ "$traced" -ne 0 ]; then
1969 pass
"Validate trace for expression '${event_exp}', $traced events"
1971 fail
"Validate trace for expression '${event_exp}'"
1972 diag
"Found $traced occurences of '${event_exp}'"
1978 function validate_trace_only_exp
()
1983 which $BABELTRACE_BIN >/dev
/null
1984 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1986 local count
=$
($BABELTRACE_BIN $trace_path |
grep --extended-regexp ${event_exp} |
wc -l)
1987 local total
=$
($BABELTRACE_BIN $trace_path |
wc -l)
1989 if [ "$count" -ne 0 ] && [ "$total" -eq "$count" ]; then
1990 pass
"Trace match with $total for expression '${event_exp}'"
1993 diag
"$total syscall event(s) found, only syscalls matching expression '${event_exp}' ($count occurrences) are expected"
1999 function validate_trace_empty
()
2003 which $BABELTRACE_BIN >/dev
/null
2004 if [ $?
-ne 0 ]; then
2005 skip
0 "Babeltrace binary not found. Skipping trace validation"
2008 events
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null
)
2010 if [ $ret -ne 0 ]; then
2011 fail
"Failed to parse trace"
2015 traced
=$
(echo -n "$events" |
wc -l)
2016 if [ "$traced" -eq 0 ]; then
2017 pass
"Validate empty trace"
2019 fail
"Validate empty trace"
2020 diag
"Found $traced events in trace"
2026 function validate_directory_empty
()
2028 local trace_path
="$1"
2030 # Do not double quote `$trace_path` below as we want wildcards to be
2032 files
="$(ls -A $trace_path)"
2034 if [ $ret -ne 0 ]; then
2035 fail
"Failed to list content of directory \"$trace_path\""
2039 nb_files
="$(echo -n "$files" | wc -l)"
2040 ok
$nb_files "Directory \"$trace_path\" is empty"
2043 function validate_trace_session_ust_empty
()
2045 validate_directory_empty
"$1"/ust
2048 function validate_trace_session_kernel_empty
()
2050 validate_trace_empty
"$1"/kernel
2053 function regenerate_metadata
()
2055 local expected_to_fail
=$1
2058 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN regenerate metadata
-s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2060 if [[ $expected_to_fail -eq "1" ]]; then
2062 ok $?
"Expected fail on regenerate metadata $sess_name"
2064 ok
$ret "Metadata regenerate $sess_name"
2068 function regenerate_metadata_ok
()
2070 regenerate_metadata
0 "$@"
2073 function regenerate_metadata_fail
()
2075 regenerate_metadata
1 "$@"
2078 function regenerate_statedump
()
2080 local expected_to_fail
=$1
2083 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN regenerate statedump
-s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2085 if [[ $expected_to_fail -eq "1" ]]; then
2087 ok $?
"Expected fail on regenerate statedump $sess_name"
2089 ok
$ret "Statedump regenerate $sess_name"
2093 function regenerate_statedump_ok
()
2095 regenerate_statedump
0 "$@"
2098 function regenerate_statedump_fail
()
2100 regenerate_statedump
1 "$@"
2103 function rotate_session
()
2105 local expected_to_fail
=$1
2108 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN rotate
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2110 if [[ $expected_to_fail -eq "1" ]]; then
2112 ok $?
"Expected fail on rotate session $sess_name"
2114 ok
$ret "Rotate session $sess_name"
2118 function rotate_session_ok
()
2120 rotate_session
0 "$@"
2123 function rotate_session_fail
()
2125 rotate_session
1 "$@"
2128 function destructive_tests_enabled
()
2130 if [ "$LTTNG_ENABLE_DESTRUCTIVE_TESTS" = "will-break-my-system" ]; then
2137 function lttng_enable_rotation_timer
()
2139 local expected_to_fail
=$1
2143 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-rotation
-s $sess_name --timer $period 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2145 if [[ $expected_to_fail -eq "1" ]]; then
2147 ok $?
"Expected fail when setting periodic rotation ($period) of session $sess_name"
2149 ok
$ret "Set periodic rotation ($period) of session $sess_name"
2153 function lttng_enable_rotation_timer_ok
()
2155 lttng_enable_rotation_timer
0 $@
2158 function lttng_enable_rotation_timer_fail
()
2160 lttng_enable_rotation_timer
1 $@
2163 function lttng_enable_rotation_size
()
2165 local expected_to_fail
=$1
2169 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-rotation
-s $sess_name --size $size 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2171 if [[ $expected_to_fail -eq "1" ]]; then
2173 ok $?
"Expected fail on rotate session $sess_name"
2175 ok
$ret "Rotate session $sess_name"
2179 function lttng_enable_rotation_size_ok
()
2181 lttng_enable_rotation_size
0 $@
2184 function lttng_enable_rotation_size_fail
()
2186 lttng_enable_rotation_size
1 $@
2189 function lttng_clear_session
()
2191 local expected_to_fail
=$1
2194 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN clear $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2196 if [[ $expected_to_fail -eq "1" ]]; then
2198 ok $?
"Expected fail on clear session $sess_name"
2200 ok
$ret "Clear session $sess_name"
2204 function lttng_clear_session_ok
()
2206 lttng_clear_session
0 $@
2209 function lttng_clear_session_fail
()
2211 lttng_clear_session
1 $@
2214 function lttng_clear_all
()
2216 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN clear --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2217 ok $?
"Clear all lttng sessions"
2220 function validate_path_pattern
()
2224 # Base path is only used in error case and is used to list the content
2233 if [ "$ret" -ne "0" ]; then
2234 diag
"Path pattern expected: $pattern"
2235 # List the tracepath for more info. We use find as a recursive
2237 diag
"The base path content:"
2238 find "$base_path" -print
2242 function validate_trace_path_ust_uid
()
2245 local session_name
=$2
2247 local pattern
="$trace_path/$session_name-$date_time_pattern/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2249 validate_path_pattern
"UST per-uid trace path is valid" "$pattern" "$trace_path"
2252 function validate_trace_path_ust_uid_network
()
2255 local session_name
=$2
2258 local hostname
=$HOSTNAME
2262 # If the session was given a network base path (e.g
2263 # 127.0.0.1/my/custom/path on creation, there is no session name
2264 # component to the path on the relayd side. Caller can simply not pass a
2265 # session name for this scenario.
2266 if [ -n "$session_name" ]; then
2267 session_name
="$session_name-$date_time_pattern"
2268 if [ -n "$base_path" ]; then
2269 fail
"Session name and base path are mutually exclusive"
2274 pattern
="$trace_path/$hostname/$base_path/$session_name/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2276 validate_path_pattern
"UST per-uid network trace path is valid" "$pattern" "$trace_path"
2279 function validate_trace_path_ust_uid_snapshot_network
()
2282 local session_name
=$2
2283 local snapshot_name
=$3
2284 local snapshot_number
=$4
2286 local hostname
=$HOSTNAME
2291 # If the session/output was given a network base path (e.g
2292 # 127.0.0.1/my/custom/path on creation, there is no session name
2293 # component to the path on the relayd side. Caller can simply not pass a
2294 # session name for this scenario.
2295 if [ -n "$session_name" ]; then
2296 session_name
="$session_name-$date_time_pattern"
2297 if [ -n "$base_path" ]; then
2298 fail
"Session name and base path are mutually exclusive"
2303 pattern
="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2305 validate_path_pattern
"UST per-uid network snapshot trace path is valid" "$pattern" "$trace_path"
2308 function validate_trace_path_ust_uid_snapshot
()
2311 local session_name
=$2
2312 local snapshot_name
=$3
2313 local snapshot_number
=$4
2319 # If the session/output was given a network base path (e.g
2320 # 127.0.0.1/my/custom/path) on creation, there is no session name
2321 # component to the path on the relayd side. Caller can simply not pass a
2322 # session name for this scenario.
2323 if [ -n "$session_name" ]; then
2324 session_name
="$session_name-$date_time_pattern"
2325 if [ -n "$base_path" ]; then
2326 fail
"Session name and base path are mutually exclusive"
2331 pattern
="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2333 validate_path_pattern
"UST per-uid snapshot trace path is valid" "$pattern" "$trace_path"
2336 function validate_trace_path_ust_pid
()
2339 local session_name
=$2
2345 # If the session was given a trace path on creation, there is no session
2346 # name component to the path. Caller can simply not pass a session name
2347 # for this scenario.
2348 if [ -n "$session_name" ]; then
2349 session_name
="$session_name-$date_time_pattern"
2352 pattern
="$trace_path/$session_name/ust/pid/$pid/$app_string-*-$date_time_pattern/metadata"
2354 validate_path_pattern
"UST per-pid trace path is valid" "$pattern" "$trace_path"
2357 function validate_trace_path_kernel
()
2360 local session_name
=$2
2363 # If the session was given a trace path on creation, there is no session
2364 # name component to the path. Caller can simply not pass a session name
2365 # for this scenario.
2366 if [ -n "$session_name" ]; then
2367 session_name
="$session_name-$date_time_pattern"
2370 pattern
="$trace_path/$session_name/kernel/metadata"
2372 validate_path_pattern
"Kernel trace path is valid" "$pattern" "$trace_path"
2375 function validate_trace_path_kernel_network
()
2378 local session_name
=$2
2379 local hostname
=$HOSTNAME
2380 local pattern
="$trace_path/$hostname/$session_name-$date_time_pattern/kernel/metadata"
2382 validate_path_pattern
"Kernel network trace path is valid" "$pattern" "$trace_path"
2385 function validate_trace_path_kernel_snapshot
()
2388 local session_name
=$2
2389 local snapshot_name
=$3
2390 local snapshot_number
=$4
2395 # If the session/output was given a network base path (e.g
2396 # 127.0.0.1/my/custom/path on creation, there is no session name
2397 # component to the path on the relayd side. Caller can simply not pass a
2398 # session name for this scenario.
2399 if [ -n "$session_name" ]; then
2400 session_name
="$session_name-$date_time_pattern"
2401 if [ -n "$base_path" ]; then
2402 fail
"Session name and base path are mutually exclusive"
2407 pattern
="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
2409 validate_path_pattern
"Kernel snapshot trace path is valid" "$pattern" "$trace_path"
2412 function validate_trace_path_kernel_snapshot_network
()
2415 local session_name
=$2
2416 local snapshot_name
=$3
2417 local snapshot_number
=$4
2419 local hostname
=$HOSTNAME
2423 # If the session/output was given a network base path (e.g
2424 # 127.0.0.1/my/custom/path on creation, there is no session name
2425 # component to the path on the relayd side. Caller can simply not pass a
2426 # session name for this scenario.
2427 if [ -n "$session_name" ]; then
2428 session_name
="$session_name-$date_time_pattern"
2429 if [ -n "$base_path" ]; then
2430 fail
"Session name and base path are mutually exclusive"
2435 pattern
="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
2437 validate_path_pattern
"Kernel network snapshot trace path is valid" "$pattern" "$trace_path"