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 the number of _configured_ CPUs.
202 function conf_proc_count
()
204 getconf _NPROCESSORS_CONF
205 if [ $?
-ne 0 ]; then
206 diag
"Failed to get the number of configured CPUs"
211 # Check if base lttng-modules are present.
212 # Bail out on failure
213 function validate_lttng_modules_present
()
215 # Check for loadable modules.
216 modprobe
-n lttng-tracer
2>/dev
/null
217 if [ $?
-eq 0 ]; then
221 # Check for builtin modules.
222 ls /proc
/lttng
> /dev
/null
2>&1
223 if [ $?
-eq 0 ]; then
227 BAIL_OUT
"LTTng modules not detected."
230 # Run the lttng binary.
232 # The first two arguments are stdout and stderr redirect paths, respectively.
233 # The rest of the arguments are forwarded to the lttng binary
234 function _run_lttng_cmd
236 local stdout_dest
="$1"
237 local stderr_dest
="$2"
240 diag
"$TESTDIR/../src/bin/lttng/$LTTNG_BIN $*"
241 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN "$@" 1> "$stdout_dest" 2> "$stderr_dest"
244 function enable_kernel_lttng_event
247 local expected_to_fail
="$2"
249 local event_name
="$4"
250 local channel_name
="$5"
252 if [ -z "$event_name" ]; then
253 # Enable all event if no event name specified
257 if [ -z "$channel_name" ]; then
258 # default channel if none specified
261 chan
="-c $channel_name"
264 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
266 if [[ $expected_to_fail -eq "1" ]]; then
269 if [ $withtap -eq "1" ]; then
270 ok
$ret "Enable kernel event $event_name for session $session_name on channel $channel_name failed as expected"
273 if [ $withtap -eq "1" ]; then
274 ok
$ret "Enable kernel event $event_name for session $sess_name"
279 function enable_kernel_lttng_event_ok
()
281 enable_kernel_lttng_event
1 0 "$@"
284 function enable_kernel_lttng_event_fail
()
286 enable_kernel_lttng_event
1 1 "$@"
289 function enable_kernel_lttng_event_notap
()
291 enable_kernel_lttng_event
0 0 "$@"
295 function lttng_enable_kernel_event
297 enable_kernel_lttng_event_ok
"$@"
300 function lttng_enable_kernel_syscall
()
302 local expected_to_fail
=$1
304 local syscall_name
=$3
305 local channel_name
=$4
307 if [ -z $syscall_name ]; then
308 # Enable all event if no syscall name specified
312 if [ -z $channel_name ]; then
313 # default channel if none specified
316 chan
="-c $channel_name"
319 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
321 if [[ $expected_to_fail -eq "1" ]]; then
323 ok $?
"Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name fail as expected"
325 ok
$ret "Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
329 function lttng_enable_kernel_syscall_ok
()
331 lttng_enable_kernel_syscall
0 "$@"
334 function lttng_enable_kernel_syscall_fail
()
336 lttng_enable_kernel_syscall
1 "$@"
339 function lttng_disable_kernel_syscall
()
341 local expected_to_fail
=$1
343 local syscall_name
=$3
344 local channel_name
=$4
346 if [ -z $syscall_name ]; then
347 # Enable all event if no syscall name specified
351 if [ -z $channel_name ]; then
352 # default channel if none specified
355 chan
="-c $channel_name"
358 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
--syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
361 if [[ $expected_to_fail -eq "1" ]]; then
363 ok $?
"Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name failed as expected"
365 ok
$ret "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
369 function lttng_disable_kernel_syscall_ok
()
371 lttng_disable_kernel_syscall
0 "$@"
374 function lttng_disable_kernel_syscall_fail
()
376 lttng_disable_kernel_syscall
1 "$@"
379 function lttng_enable_kernel_userspace_probe_event
()
381 local expected_to_fail
="$1"
384 local event_name
="$4"
386 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-event
--kernel --userspace-probe="$target" "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
388 if [[ $expected_to_fail -eq "1" ]]; then
390 ok $?
"Enable kernel userspace probe event for session $sess_name failed as expected"
392 ok
$ret "Enable kernel userspace probe event for session $sess_name"
396 function lttng_enable_kernel_userspace_probe_event_fail
()
398 lttng_enable_kernel_userspace_probe_event
1 "$@"
401 function lttng_enable_kernel_userspace_probe_event_ok
()
403 lttng_enable_kernel_userspace_probe_event
0 "$@"
406 function disable_kernel_lttng_userspace_probe_event_ok
()
409 local event_name
="$2"
411 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" disable-event
--kernel "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
412 ok $?
"Disable kernel event $target for session $sess_name"
414 function lttng_enable_kernel_channel
()
417 local expected_to_fail
=$2
419 local channel_name
=$4
422 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-k $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
424 if [[ $expected_to_fail -eq "1" ]]; then
427 if [ $withtap -eq "1" ]; then
428 ok
$ret "Enable channel $channel_name for session $sess_name failed as expected"
431 if [ $withtap -eq "1" ]; then
432 ok
$ret "Enable channel $channel_name for session $sess_name"
437 function lttng_enable_kernel_channel_ok
()
439 lttng_enable_kernel_channel
1 0 "$@"
442 function lttng_enable_kernel_channel_fail
()
444 lttng_enable_kernel_channel
1 1 "$@"
447 function lttng_enable_kernel_channel_notap
()
449 lttng_enable_kernel_channel
0 0 "$@"
452 function enable_kernel_lttng_channel_ok
()
454 lttng_enable_kernel_channel
1 0 "$@"
457 function lttng_disable_kernel_channel
()
459 local expected_to_fail
=$1
461 local channel_name
=$3
463 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-channel
-k $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
465 if [[ $expected_to_fail -eq "1" ]]; then
467 ok $?
"Disable channel $channel_name for session $sess_name failed as expected"
469 ok
$ret "Disable channel $channel_name for session $sess_name"
473 function lttng_disable_kernel_channel_ok
()
475 lttng_disable_kernel_channel
0 "$@"
478 function lttng_disable_kernel_channel_fail
()
480 lttng_disable_kernel_channel
1 "$@"
483 function start_lttng_relayd_opt
()
486 local process_mode
=$2
489 DIR
=$
(readlink
-f "$TESTDIR")
491 if [ -z $
(pgrep
$RELAYD_MATCH) ]; then
492 # shellcheck disable=SC2086
493 $DIR/..
/src
/bin
/lttng-relayd
/$RELAYD_BIN $process_mode $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
494 #$DIR/../src/bin/lttng-relayd/$RELAYD_BIN $opt -vvv >>/tmp/relayd.log 2>&1 &
495 if [ $?
-eq 1 ]; then
496 if [ $withtap -eq "1" ]; then
497 fail
"Start lttng-relayd (process mode: $process_mode opt: $opt)"
501 if [ $withtap -eq "1" ]; then
502 pass
"Start lttng-relayd (process mode: $process_mode opt: $opt)"
506 pass
"Start lttng-relayd (opt: $opt)"
510 function start_lttng_relayd
()
512 start_lttng_relayd_opt
1 "-b" "$@"
515 function start_lttng_relayd_notap
()
517 start_lttng_relayd_opt
0 "-b" "$@"
520 function stop_lttng_relayd_opt
()
525 if [ -z "$signal" ]; then
532 # Multiply time by 2 to simplify integer arithmetic
533 if [ -n "$timeout_s" ]; then
534 dtimeleft_s
=$
((timeout_s
* 2))
540 pids
=$
(pgrep
"$RELAYD_MATCH")
541 if [ -z "$pids" ]; then
542 if [ "$withtap" -eq "1" ]; then
543 pass
"No relay daemon to kill"
548 diag
"Killing (signal $signal) lttng-relayd (pid: $pids)"
550 # shellcheck disable=SC2086
551 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
553 if [ "$withtap" -eq "1" ]; then
554 fail
"Kill relay daemon"
558 while [ -n "$out" ]; do
559 out
=$
(pgrep
"$RELAYD_MATCH")
560 if [ -n "$dtimeleft_s" ]; then
561 if [ $dtimeleft_s -lt 0 ]; then
565 dtimeleft_s
=$
((dtimeleft_s
- 1))
569 if [ "$withtap" -eq "1" ]; then
570 if [ "$retval" -eq "0" ]; then
571 pass
"Wait after kill relay daemon"
573 fail
"Wait after kill relay daemon"
580 function stop_lttng_relayd
()
582 stop_lttng_relayd_opt
1 "$@"
585 function stop_lttng_relayd_notap
()
587 stop_lttng_relayd_opt
0 "$@"
590 #First arg: show tap output
591 #Second argument: load path for automatic loading
592 function start_lttng_sessiond_opt
()
600 local long_bit_value
=
601 long_bit_value
=$
(getconf LONG_BIT
)
603 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
604 # Env variable requested no session daemon
608 DIR
=$
(readlink
-f "$TESTDIR")
610 # Get long_bit value for 32/64 consumerd
611 case "$long_bit_value" in
613 consumerd
="--consumerd32-path=$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
616 consumerd
="--consumerd64-path=$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
623 # Check for env. variable. Allow the use of LD_PRELOAD etc.
624 if [[ "x${LTTNG_SESSIOND_ENV_VARS}" != "x" ]]; then
625 env_vars
="${LTTNG_SESSIOND_ENV_VARS} "
627 env_vars
="${env_vars}$DIR/../src/bin/lttng-sessiond/$SESSIOND_BIN"
629 if ! validate_kernel_version
; then
630 fail
"Start session daemon"
631 BAIL_OUT
"*** Kernel too old for session daemon tests ***"
634 : "${LTTNG_SESSION_CONFIG_XSD_PATH="${DIR}/../src/common/config/"}"
635 export LTTNG_SESSION_CONFIG_XSD_PATH
637 if [ -z "$(pgrep "${SESSIOND_MATCH}")" ]; then
639 if [ -n "$load_path" ]; then
640 # shellcheck disable=SC2086
641 env
$env_vars --load "$load_path" --background "$consumerd"
643 # shellcheck disable=SC2086
644 env
$env_vars --background "$consumerd"
646 #$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
648 if [ "$withtap" -eq "1" ]; then
649 ok
$status "Start session daemon"
654 function start_lttng_sessiond
()
656 start_lttng_sessiond_opt
1 "$@"
659 function start_lttng_sessiond_notap
()
661 start_lttng_sessiond_opt
0 "$@"
664 function stop_lttng_sessiond_opt
()
669 if [ -z "$signal" ]; then
676 # Multiply time by 2 to simplify integer arithmetic
677 if [ -n "$timeout_s" ]; then
678 dtimeleft_s
=$
((timeout_s
* 2))
681 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
682 # Env variable requested no session daemon
689 runas_pids
=$
(pgrep
"$RUNAS_MATCH")
692 pids
=$
(pgrep
"$SESSIOND_MATCH")
694 if [ -n "$runas_pids" ]; then
695 pids
="$pids $runas_pids"
698 if [ -z "$pids" ]; then
699 if [ "$withtap" -eq "1" ]; then
700 pass
"No session daemon to kill"
705 diag
"Killing (signal $signal) $SESSIOND_BIN and lt-$SESSIOND_BIN pids: $(echo "$pids" | tr '\n' ' ')"
707 # shellcheck disable=SC2086
708 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
710 if [ "$withtap" -eq "1" ]; then
711 fail
"Kill sessions daemon"
715 while [ -n "$out" ]; do
716 out
=$
(pgrep
"${SESSIOND_MATCH}")
717 if [ -n "$dtimeleft_s" ]; then
718 if [ $dtimeleft_s -lt 0 ]; then
722 dtimeleft_s
=$
((dtimeleft_s
- 1))
727 while [ -n "$out" ]; do
728 out
=$
(pgrep
"$CONSUMERD_MATCH")
729 if [ -n "$dtimeleft_s" ]; then
730 if [ $dtimeleft_s -lt 0 ]; then
734 dtimeleft_s
=$
((dtimeleft_s
- 1))
739 if [ "$withtap" -eq "1" ]; then
740 if [ "$retval" -eq "0" ]; then
741 pass
"Wait after kill session daemon"
743 fail
"Wait after kill session daemon"
747 if [ "$signal" = "SIGKILL" ]; then
748 if [ "$(id -u)" -eq "0" ]; then
750 modules
="$(lsmod | grep ^lttng | awk '{print $1}')"
752 if [ -n "$modules" ]; then
753 diag
"Unloading all LTTng modules"
754 modprobe
--remove "$modules"
762 function stop_lttng_sessiond
()
764 stop_lttng_sessiond_opt
1 "$@"
767 function stop_lttng_sessiond_notap
()
769 stop_lttng_sessiond_opt
0 "$@"
772 function sigstop_lttng_sessiond_opt
()
777 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
778 # Env variable requested no session daemon
782 PID_SESSIOND
="$(pgrep "${SESSIOND_MATCH}") $(pgrep "$RUNAS_MATCH")"
784 if [ "$withtap" -eq "1" ]; then
785 diag
"Sending SIGSTOP to lt-$SESSIOND_BIN and $SESSIOND_BIN pids: $(echo "$PID_SESSIOND" | tr '\n' ' ')"
788 # shellcheck disable=SC2086
789 if ! kill -s $signal $PID_SESSIOND 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
790 if [ "$withtap" -eq "1" ]; then
791 fail
"Sending SIGSTOP to session daemon"
795 while [ $out -ne 0 ]; do
796 pid
="$(pgrep "$SESSIOND_MATCH")"
798 # Wait until state becomes stopped for session
801 for sessiond_pid
in $pid; do
802 state
="$(ps -p "$sessiond_pid" -o state= )"
803 if [[ -n "$state" && "$state" != "T" ]]; then
809 if [ "$withtap" -eq "1" ]; then
810 pass
"Sending SIGSTOP to session daemon"
815 function sigstop_lttng_sessiond
()
817 sigstop_lttng_sessiond_opt
1 "$@"
820 function sigstop_lttng_sessiond_notap
()
822 sigstop_lttng_sessiond_opt
0 "$@"
825 function stop_lttng_consumerd_opt
()
830 if [ -z "$signal" ]; then
837 # Multiply time by 2 to simplify integer arithmetic
838 if [ -n "$timeout_s" ]; then
839 dtimeleft_s
=$
((timeout_s
* 2))
844 PID_CONSUMERD
="$(pgrep "$CONSUMERD_MATCH")"
846 if [ -z "$PID_CONSUMERD" ]; then
847 if [ "$withtap" -eq "1" ]; then
848 pass
"No consumer daemon to kill"
853 diag
"Killing (signal $signal) $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')"
855 # shellcheck disable=SC2086
856 if ! kill -s $signal $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
858 if [ "$withtap" -eq "1" ]; then
859 fail
"Kill consumer daemon"
863 while [ $out -ne 0 ]; do
864 pid
="$(pgrep "$CONSUMERD_MATCH")"
866 # If consumerds are still present check their status.
867 # A zombie status qualifies the consumerd as *killed*
869 for consumer_pid
in $pid; do
870 state
="$(ps -p "$consumer_pid" -o state= )"
871 if [[ -n "$state" && "$state" != "Z" ]]; then
875 if [ -n "$dtimeleft_s" ]; then
876 if [ $dtimeleft_s -lt 0 ]; then
880 dtimeleft_s
=$
((dtimeleft_s
- 1))
884 if [ "$withtap" -eq "1" ]; then
885 if [ "$retval" -eq "0" ]; then
886 pass
"Wait after kill consumer daemon"
888 fail
"Wait after kill consumer daemon"
896 function stop_lttng_consumerd
()
898 stop_lttng_consumerd_opt
1 "$@"
901 function stop_lttng_consumerd_notap
()
903 stop_lttng_consumerd_opt
0 "$@"
906 function sigstop_lttng_consumerd_opt
()
911 PID_CONSUMERD
="$(pgrep "$CONSUMERD_MATCH")"
913 diag
"Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')"
915 # shellcheck disable=SC2086
916 kill -s $signal $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
919 if [ $retval -eq 1 ]; then
920 if [ "$withtap" -eq "1" ]; then
921 fail
"Sending SIGSTOP to consumer daemon"
926 while [ $out -ne 0 ]; do
927 pid
="$(pgrep "$CONSUMERD_MATCH")"
929 # Wait until state becomes stopped for all
932 for consumer_pid
in $pid; do
933 state
="$(ps -p "$consumer_pid" -o state= )"
934 if [[ -n "$state" && "$state" != "T" ]]; then
940 if [ "$withtap" -eq "1" ]; then
941 pass
"Sending SIGSTOP to consumer daemon"
947 function sigstop_lttng_consumerd
()
949 sigstop_lttng_consumerd_opt
1 "$@"
952 function sigstop_lttng_consumerd_notap
()
954 sigstop_lttng_consumerd_opt
0 "$@"
957 function list_lttng_with_opts
()
960 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN list
$opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
961 ok $?
"Lttng-tool list command with option $opts"
964 function create_lttng_session_no_output
()
969 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
$sess_name --no-output $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
970 ok $?
"Create session $sess_name in no-output mode"
973 function create_lttng_session_uri
() {
978 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
$sess_name -U $uri $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
979 ok $?
"Create session $sess_name with uri:$uri and opts: $opts"
982 function create_lttng_session
()
985 local expected_to_fail
=$2
990 if [ -z "$trace_path" ]; then
991 # Use lttng-sessiond default output.
994 trace_path
="-o $trace_path"
997 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
"$sess_name" $trace_path $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
999 if [ $expected_to_fail -eq "1" ]; then
1002 if [ $withtap -eq "1" ]; then
1003 ok
$ret "Create session $sess_name in $trace_path failed as expected"
1006 if [ $withtap -eq "1" ]; then
1007 ok
$ret "Create session $sess_name in $trace_path"
1013 function create_lttng_session_ok
()
1015 create_lttng_session
1 0 "$@"
1018 function create_lttng_session_fail
()
1020 create_lttng_session
1 1 "$@"
1023 function create_lttng_session_notap
()
1025 create_lttng_session
0 0 "$@"
1029 function enable_ust_lttng_channel
()
1032 local expected_to_fail
=$2
1034 local channel_name
=$4
1037 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-u $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1039 if [[ $expected_to_fail -eq "1" ]]; then
1042 if [ $withtap -eq "1" ]; then
1043 ok
$ret "Enable channel $channel_name for session $sess_name failed as expected"
1046 if [ $withtap -eq "1" ]; then
1047 ok
$ret "Enable channel $channel_name for session $sess_name"
1053 function enable_ust_lttng_channel_ok
()
1055 enable_ust_lttng_channel
1 0 "$@"
1058 function enable_ust_lttng_channel_fail
()
1060 enable_ust_lttng_channel
1 1 "$@"
1063 function enable_ust_lttng_channel_notap
()
1065 enable_ust_lttng_channel
0 0 "$@"
1068 function disable_ust_lttng_channel
()
1071 local channel_name
=$2
1073 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-channel
-u $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1074 ok $?
"Disable channel $channel_name for session $sess_name"
1077 function enable_lttng_mmap_overwrite_kernel_channel
()
1080 local channel_name
=$2
1082 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-s $sess_name $channel_name -k --output mmap
--overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1083 ok $?
"Enable channel $channel_name for session $sess_name"
1086 function enable_lttng_mmap_discard_small_kernel_channel
()
1089 local channel_name
=$2
1091 $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
1092 ok $?
"Enable small discard channel $channel_name for session $sess_name"
1095 function enable_lttng_mmap_overwrite_small_kernel_channel
()
1098 local channel_name
=$2
1100 $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
1101 ok $?
"Enable small discard channel $channel_name for session $sess_name"
1104 function enable_lttng_mmap_overwrite_ust_channel
()
1107 local channel_name
=$2
1109 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-channel
-s $sess_name $channel_name -u --output mmap
--overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1110 ok $?
"Enable channel $channel_name for session $sess_name"
1113 function enable_ust_lttng_event
()
1116 local expected_to_fail
=$2
1118 local event_name
="$4"
1119 local channel_name
=$5
1121 if [ -z $channel_name ]; then
1122 # default channel if none specified
1125 chan
="-c $channel_name"
1128 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1130 if [[ $expected_to_fail -eq "1" ]]; then
1133 if [[ $withtap -eq "1" ]]; then
1134 ok
$ret "Enable ust event $event_name for session $session_name failed as expected"
1137 if [[ $withtap -eq "1" ]]; then
1138 ok
$ret "Enable ust event $event_name for session $sess_name"
1144 function enable_ust_lttng_event_ok
()
1146 enable_ust_lttng_event
1 0 "$@"
1149 function enable_ust_lttng_event_fail
()
1151 enable_ust_lttng_event
1 1 "$@"
1154 function enable_ust_lttng_event_notap
()
1156 enable_ust_lttng_event
0 0 "$@"
1159 function enable_jul_lttng_event
()
1165 if [ -z $channel_name ]; then
1166 # default channel if none specified
1169 chan
="-c $channel_name"
1172 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1173 ok $?
"Enable JUL event $event_name for session $sess_name"
1176 function enable_jul_lttng_event_loglevel
()
1179 local event_name
="$2"
1181 local channel_name
=$4
1183 if [ -z $channel_name ]; then
1184 # default channel if none specified
1187 chan
="-c $channel_name"
1190 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel $loglevel "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1191 ok $?
"Enable JUL event $event_name for session $sess_name with loglevel $loglevel"
1194 function enable_log4j_lttng_event
()
1198 local channel_name
=$3
1202 # default channel if none specified
1203 if [ -n "$channel_name" ]; then
1204 chan_opt
=("-c" "$channel_name")
1207 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1208 enable-event
"$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1209 ok $?
"Enable LOG4J event '$event_name' for session '$sess_name'"
1212 function enable_log4j_lttng_event_filter
()
1218 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1219 enable-event
"$event_name" -s "$sess_name" --log4j --filter "$filter"
1220 ok $?
"Enable LOG4J event '$event_name' with filter '$filter' for session '$sess_name'"
1223 function enable_log4j_lttng_event_filter_loglevel_only
()
1230 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1231 enable-event
--loglevel-only "$loglevel" "$event_name" -s "$sess_name" -l --filter "$filter"
1232 ok $?
"Enable LOG4J event '$event_name' with filter '$filter' and loglevel-only '$loglevel' for session '$sess_name'"
1235 function enable_log4j_lttng_event_loglevel
()
1240 local channel_name
=$4
1243 # default channel if none specified
1244 if [ -n "$channel_name" ]; then
1245 chan_opt
=("-c" "$channel_name")
1248 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1249 enable-event
--loglevel "$loglevel" "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1250 ok $?
"Enable LOG4J event '$event_name' for session '$sess_name' with loglevel '$loglevel'"
1253 function enable_log4j_lttng_event_loglevel_only
()
1258 local channel_name
=$4
1262 # default channel if none specified
1263 if [ -n "$channel_name" ]; then
1264 chan_opt
=("-c" "$channel_name")
1267 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1268 enable-event
--loglevel-only "$loglevel" "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1269 ok $?
"Enable LOG4J event '$event_name' for session '$sess_name' with loglevel-only '$loglevel'"
1272 function enable_python_lttng_event
()
1278 if [ -z $channel_name ]; then
1279 # default channel if none specified
1282 chan
="-c $channel_name"
1285 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1286 ok $?
"Enable Python event $event_name for session $sess_name"
1289 function enable_python_lttng_event_loglevel
()
1292 local event_name
="$2"
1294 local channel_name
=$4
1296 if [ -z $channel_name ]; then
1297 # default channel if none specified
1300 chan
="-c $channel_name"
1303 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
--loglevel $loglevel "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1304 ok $?
"Enable Python event $event_name for session $sess_name with loglevel $loglevel"
1307 function enable_ust_lttng_event_filter
()
1309 local sess_name
="$1"
1310 local event_name
="$2"
1312 local channel_name
=$4
1314 if [ -z $channel_name ]; then
1315 # default channel if none specified
1318 chan
="-c $channel_name"
1321 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
$chan "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1322 ok $?
"Enable event $event_name with filtering for session $sess_name"
1325 function enable_ust_lttng_event_loglevel
()
1327 local sess_name
="$1"
1328 local event_name
="$2"
1331 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
"$event_name" -s $sess_name -u --loglevel $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1332 ok $?
"Enable event $event_name with loglevel $loglevel"
1335 function enable_ust_lttng_event_loglevel_only
()
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-only $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1342 ok $?
"Enable event $event_name with loglevel-only $loglevel"
1345 function disable_ust_lttng_event
()
1347 local sess_name
="$1"
1348 local event_name
="$2"
1349 local channel_name
="$3"
1351 if [ -z $channel_name ]; then
1352 # default channel if none specified
1355 chan
="-c $channel_name"
1358 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
"$event_name" -s $sess_name $chan -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1359 ok $?
"Disable event $event_name for session $sess_name"
1362 function disable_jul_lttng_event
()
1364 local sess_name
="$1"
1365 local event_name
="$2"
1367 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
"$event_name" -s $sess_name -j >/dev
/null
2>&1
1368 ok $?
"Disable JUL event $event_name for session $sess_name"
1371 function disable_log4j_lttng_event
()
1373 local sess_name
="$1"
1374 local event_name
="$2"
1376 _run_lttng_cmd
"$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1377 disable-event
"$event_name" -s "$sess_name" --log4j
1378 ok $?
"Disable LOG4J event '$event_name' for session '$sess_name'"
1381 function disable_python_lttng_event
()
1383 local sess_name
="$1"
1384 local event_name
="$2"
1386 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN disable-event
"$event_name" -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1387 ok $?
"Disable Python event $event_name for session $sess_name"
1390 function start_lttng_tracing_opt
()
1393 local expected_to_fail
=$2
1396 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN start
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1398 if [[ $expected_to_fail -eq "1" ]]; then
1401 if [ $withtap -eq "1" ]; then
1402 ok $?
"Start tracing for session $sess_name failed as expected"
1405 if [ $withtap -eq "1" ]; then
1406 ok
$ret "Start tracing for session $sess_name"
1411 function start_lttng_tracing_ok
()
1413 start_lttng_tracing_opt
1 0 "$@"
1416 function start_lttng_tracing_fail
()
1418 start_lttng_tracing_opt
1 1 "$@"
1421 function start_lttng_tracing_notap
()
1423 start_lttng_tracing_opt
0 1 "$@"
1426 function stop_lttng_tracing_opt
()
1429 local expected_to_fail
=$2
1432 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN stop
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1434 if [[ $expected_to_fail -eq "1" ]]; then
1437 if [ $withtap -eq "1" ]; then
1438 ok $?
"Stop lttng tracing for session $sess_name failed as expected"
1441 if [ $withtap -eq "1" ]; then
1442 ok
$ret "Stop lttng tracing for session $sess_name"
1447 function stop_lttng_tracing_ok
()
1449 stop_lttng_tracing_opt
1 0 "$@"
1452 function stop_lttng_tracing_fail
()
1454 stop_lttng_tracing_opt
1 1 "$@"
1457 function stop_lttng_tracing_notap
()
1459 stop_lttng_tracing_opt
0 0 "$@"
1462 function destroy_lttng_session
()
1465 local expected_to_fail
=$2
1468 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN destroy
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1470 if [[ $expected_to_fail -eq "1" ]]; then
1473 if [ $withtap -eq "1" ]; then
1474 ok
$ret "Destroy session $sess_name failed as expected"
1477 if [ $withtap -eq "1" ]; then
1478 ok
$ret "Destroy session $sess_name"
1483 function destroy_lttng_session_ok
()
1485 destroy_lttng_session
1 0 "$@"
1489 function destroy_lttng_session_fail
()
1491 destroy_lttng_session
1 1 "$@"
1494 function destroy_lttng_session_notap
()
1496 destroy_lttng_session
0 0 "$@"
1499 function destroy_lttng_sessions
()
1501 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN destroy
--all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1502 ok $?
"Destroy all lttng sessions"
1505 function lttng_snapshot_add_output
()
1507 local expected_to_fail
=$1
1512 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot add-output
-s $sess_name $trace_path $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1514 if [[ $expected_to_fail -eq 1 ]]; then
1516 ok $?
"Added snapshot output $trace_path failed as expected"
1518 ok
$ret "Added snapshot output $trace_path"
1522 function lttng_snapshot_add_output_ok
()
1524 lttng_snapshot_add_output
0 "$@"
1527 function lttng_snapshot_add_output_fail
()
1529 lttng_snapshot_add_output
1 "$@"
1532 function lttng_snapshot_del_output
()
1534 local expected_to_fail
=$1
1538 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot del-output
-s $sess_name $id 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1540 if [[ $expected_to_fail -eq "1" ]]; then
1542 ok $?
"Deleted snapshot output id $id failed as expected"
1544 ok
$ret "Deleted snapshot output id $id"
1548 function lttng_snapshot_del_output_ok
()
1550 lttng_snapshot_del_output
0 "$@"
1553 function lttng_snapshot_del_output_fail
()
1555 lttng_snapshot_del_output
1 "$@"
1558 function lttng_snapshot_record
()
1563 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot record
-s "$sess_name" "$trace_path" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1564 ok $?
"Snapshot recorded"
1567 function lttng_snapshot_list
()
1570 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN snapshot list-output
-s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1571 ok $?
"Snapshot list"
1574 function lttng_save
()
1579 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN save
$sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1580 ok $?
"Session saved"
1583 function lttng_load
()
1585 local expected_to_fail
=$1
1588 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN load
$opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1590 if [[ $expected_to_fail -eq "1" ]]; then
1592 ok $?
"Load command failed as expected with opts: $opts"
1594 ok
$ret "Load command with opts: $opts"
1598 function lttng_load_ok
()
1603 function lttng_load_fail
()
1608 function lttng_track
()
1610 local expected_to_fail
="$1"
1613 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN track
$opts >$OUTPUT_DEST
1615 if [[ $expected_to_fail -eq "1" ]]; then
1617 ok $?
"Track command failed as expected with opts: $opts"
1619 ok
$ret "Track command with opts: $opts"
1623 function lttng_track_ok
()
1628 function lttng_track_fail
()
1633 function lttng_untrack
()
1635 local expected_to_fail
="$1"
1638 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN untrack
$opts >$OUTPUT_DEST
1640 if [[ $expected_to_fail -eq "1" ]]; then
1642 ok $?
"Untrack command failed as expected with opts: $opts"
1644 ok
$ret "Untrack command with opts: $opts"
1648 function lttng_untrack_ok
()
1650 lttng_untrack
0 "$@"
1653 function lttng_untrack_fail
()
1655 lttng_untrack
1 "$@"
1658 function lttng_track_pid_ok
()
1661 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" track
--kernel --pid=$PID 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1662 ok $?
"Lttng track pid on the kernel domain"
1665 function lttng_untrack_kernel_all_ok
()
1667 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" untrack
--kernel --pid --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1668 ok $?
"Lttng untrack all pid on the kernel domain"
1671 function lttng_track_ust_ok
()
1673 lttng_track_ok
-u "$@"
1676 function lttng_track_ust_fail
()
1678 lttng_track_fail
-u "$@"
1681 function lttng_track_kernel_ok
()
1683 lttng_track_ok
-k "$@"
1686 function lttng_track_kernel_fail
()
1688 lttng_track_fail
-k "$@"
1691 function lttng_untrack_ust_ok
()
1693 lttng_untrack_ok
-u "$@"
1696 function lttng_untrack_ust_fail
()
1698 lttng_untrack_fail
-u "$@"
1701 function lttng_untrack_kernel_ok
()
1703 lttng_untrack_ok
-k "$@"
1706 function lttng_untrack_kernel_fail
()
1708 lttng_untrack_fail
-k "$@"
1711 function lttng_add_context_list
()
1713 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN add-context
--list 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1715 ok
$ret "Context listing"
1718 function add_context_lttng
()
1720 local expected_to_fail
="$1"
1722 local session_name
="$3"
1723 local channel_name
="$4"
1726 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN add-context
-s $session_name -c $channel_name -t $type $domain 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1728 if [[ $expected_to_fail -eq "1" ]]; then
1730 ok $?
"Add context command failed as expected for type: $type"
1732 ok
$ret "Add context command for type: $type"
1736 function add_context_ust_ok
()
1738 add_context_lttng
0 -u "$@"
1741 function add_context_ust_fail
()
1743 add_context_lttng
1 -u "$@"
1746 function add_context_kernel_ok
()
1748 add_context_lttng
0 -k "$@"
1751 function add_context_kernel_fail
()
1753 add_context_lttng
1 -k "$@"
1756 function wait_live_trace_ready
()
1759 local zero_client_match
=0
1761 diag
"Waiting for live trace at url: $url"
1762 while [ $zero_client_match -eq 0 ]; do
1763 zero_client_match
=$
($BABELTRACE_BIN -i lttng-live
$url |
grep "0 client(s) connected" |
wc -l)
1766 pass
"Waiting for live trace at url: $url"
1769 function wait_live_viewer_connect
()
1772 local one_client_match
=0
1774 diag
"Waiting for live viewers on url: $url"
1775 while [ $one_client_match -eq 0 ]; do
1776 one_client_match
=$
($BABELTRACE_BIN -i lttng-live
$url |
grep "1 client(s) connected" |
wc -l)
1779 pass
"Waiting for live viewers on url: $url"
1782 function bail_out_if_no_babeltrace
()
1784 which "$BABELTRACE_BIN" >/dev
/null
1785 if [ $?
-ne 0 ]; then
1786 LTTNG_BAIL_OUT
"\"$BABELTRACE_BIN\" binary not found. Skipping tests"
1790 function validate_metadata_event
()
1793 local nr_event_id
=$2
1796 local metadata_file
=$
(find $trace_path |
grep metadata
)
1797 local metadata_path
=$
(dirname $metadata_file)
1799 which $BABELTRACE_BIN >/dev
/null
1800 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1802 local count
=$
($BABELTRACE_BIN --output-format=ctf-metadata
$metadata_path |
grep $event_name |
wc -l)
1804 if [ "$count" -ne "$nr_event_id" ]; then
1805 fail
"Metadata match with the metadata of $count event(s) named $event_name"
1806 diag
"$count matching event id found in metadata"
1808 pass
"Metadata match with the metadata of $count event(s) named $event_name"
1813 function trace_matches
()
1819 which $BABELTRACE_BIN >/dev
/null
1820 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1822 local count
=$
($BABELTRACE_BIN $trace_path |
grep $event_name |
wc -l)
1824 if [ "$count" -ne "$nr_iter" ]; then
1826 diag
"$count matching events found in trace"
1832 function trace_match_only
()
1838 which $BABELTRACE_BIN >/dev
/null
1839 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1841 local count
=$
($BABELTRACE_BIN $trace_path |
grep $event_name |
wc -l)
1842 local total
=$
($BABELTRACE_BIN $trace_path |
wc -l)
1844 if [ "$nr_iter" -eq "$count" ] && [ "$total" -eq "$nr_iter" ]; then
1845 pass
"Trace match with $total event $event_name"
1848 diag
"$total event(s) found, expecting $nr_iter of event $event_name and only found $count"
1852 function validate_trace
1857 which $BABELTRACE_BIN >/dev
/null
1858 if [ $?
-ne 0 ]; then
1859 skip
0 "Babeltrace binary not found. Skipping trace validation"
1864 for i
in $event_name; do
1865 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep $i |
wc -l)
1866 if [ "$traced" -ne 0 ]; then
1867 pass
"Validate trace for event $i, $traced events"
1869 fail
"Validate trace for event $i"
1870 diag
"Found $traced occurences of $i"
1878 function validate_trace_count
1882 local expected_count
=$3
1884 which $BABELTRACE_BIN >/dev
/null
1885 if [ $?
-ne 0 ]; then
1886 skip
0 "Babeltrace binary not found. Skipping trace validation"
1892 for i
in $event_name; do
1893 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep $i |
wc -l)
1894 if [ "$traced" -ne 0 ]; then
1895 pass
"Validate trace for event $i, $traced events"
1897 fail
"Validate trace for event $i"
1898 diag
"Found $traced occurences of $i"
1900 cnt
=$
(($cnt + $traced))
1903 test $cnt -eq $expected_count
1904 ok $?
"Read a total of $cnt events, expected $expected_count"
1907 function validate_trace_count_range_incl_min_excl_max
1911 local expected_min
=$3
1912 local expected_max
=$4
1914 which $BABELTRACE_BIN >/dev
/null
1915 if [ $?
-ne 0 ]; then
1916 skip
0 "Babeltrace binary not found. Skipping trace validation"
1922 for i
in $event_name; do
1923 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep $i |
wc -l)
1924 if [ "$traced" -ge $expected_min ]; then
1925 pass
"Validate trace for event $i, $traced events"
1927 fail
"Validate trace for event $i"
1928 diag
"Found $traced occurences of $i"
1930 cnt
=$
(($cnt + $traced))
1933 test $cnt -lt $expected_max
1934 ok $?
"Read a total of $cnt events, expected between [$expected_min, $expected_max["
1937 function trace_first_line
1941 which $BABELTRACE_BIN >/dev
/null
1942 if [ $?
-ne 0 ]; then
1943 skip
0 "Babeltrace binary not found. Skipping trace validation"
1946 $BABELTRACE_BIN $trace_path 2>/dev
/null |
head -n 1
1949 function validate_trace_exp
()
1954 which $BABELTRACE_BIN >/dev
/null
1955 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace validation"
1957 traced
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null |
grep --extended-regexp ${event_exp} |
wc -l)
1958 if [ "$traced" -ne 0 ]; then
1959 pass
"Validate trace for expression '${event_exp}', $traced events"
1961 fail
"Validate trace for expression '${event_exp}'"
1962 diag
"Found $traced occurences of '${event_exp}'"
1968 function validate_trace_only_exp
()
1973 which $BABELTRACE_BIN >/dev
/null
1974 skip $?
-ne 0 "Babeltrace binary not found. Skipping trace matches"
1976 local count
=$
($BABELTRACE_BIN $trace_path |
grep --extended-regexp ${event_exp} |
wc -l)
1977 local total
=$
($BABELTRACE_BIN $trace_path |
wc -l)
1979 if [ "$count" -ne 0 ] && [ "$total" -eq "$count" ]; then
1980 pass
"Trace match with $total for expression '${event_exp}'"
1983 diag
"$total syscall event(s) found, only syscalls matching expression '${event_exp}' ($count occurrences) are expected"
1989 function validate_trace_empty
()
1993 which $BABELTRACE_BIN >/dev
/null
1994 if [ $?
-ne 0 ]; then
1995 skip
0 "Babeltrace binary not found. Skipping trace validation"
1998 events
=$
($BABELTRACE_BIN $trace_path 2>/dev
/null
)
2000 if [ $ret -ne 0 ]; then
2001 fail
"Failed to parse trace"
2005 traced
=$
(echo -n "$events" |
wc -l)
2006 if [ "$traced" -eq 0 ]; then
2007 pass
"Validate empty trace"
2009 fail
"Validate empty trace"
2010 diag
"Found $traced events in trace"
2016 function validate_directory_empty
()
2018 local trace_path
="$1"
2020 # Do not double quote `$trace_path` below as we want wildcards to be
2022 files
="$(ls -A $trace_path)"
2024 if [ $ret -ne 0 ]; then
2025 fail
"Failed to list content of directory \"$trace_path\""
2029 nb_files
="$(echo -n "$files" | wc -l)"
2030 ok
$nb_files "Directory \"$trace_path\" is empty"
2033 function validate_trace_session_ust_empty
()
2035 validate_directory_empty
"$1"/ust
2038 function validate_trace_session_kernel_empty
()
2040 validate_trace_empty
"$1"/kernel
2043 function regenerate_metadata
()
2045 local expected_to_fail
=$1
2048 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN regenerate metadata
-s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2050 if [[ $expected_to_fail -eq "1" ]]; then
2052 ok $?
"Expected fail on regenerate metadata $sess_name"
2054 ok
$ret "Metadata regenerate $sess_name"
2058 function regenerate_metadata_ok
()
2060 regenerate_metadata
0 "$@"
2063 function regenerate_metadata_fail
()
2065 regenerate_metadata
1 "$@"
2068 function regenerate_statedump
()
2070 local expected_to_fail
=$1
2073 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN regenerate statedump
-s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2075 if [[ $expected_to_fail -eq "1" ]]; then
2077 ok $?
"Expected fail on regenerate statedump $sess_name"
2079 ok
$ret "Statedump regenerate $sess_name"
2083 function regenerate_statedump_ok
()
2085 regenerate_statedump
0 "$@"
2088 function regenerate_statedump_fail
()
2090 regenerate_statedump
1 "$@"
2093 function rotate_session
()
2095 local expected_to_fail
=$1
2098 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN rotate
$sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2100 if [[ $expected_to_fail -eq "1" ]]; then
2102 ok $?
"Expected fail on rotate session $sess_name"
2104 ok
$ret "Rotate session $sess_name"
2108 function rotate_session_ok
()
2110 rotate_session
0 "$@"
2113 function rotate_session_fail
()
2115 rotate_session
1 "$@"
2118 function destructive_tests_enabled
()
2120 if [ "$LTTNG_ENABLE_DESTRUCTIVE_TESTS" = "will-break-my-system" ]; then
2127 function lttng_enable_rotation_timer
()
2129 local expected_to_fail
=$1
2133 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-rotation
-s $sess_name --timer $period 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2135 if [[ $expected_to_fail -eq "1" ]]; then
2137 ok $?
"Expected fail when setting periodic rotation ($period) of session $sess_name"
2139 ok
$ret "Set periodic rotation ($period) of session $sess_name"
2143 function lttng_enable_rotation_timer_ok
()
2145 lttng_enable_rotation_timer
0 $@
2148 function lttng_enable_rotation_timer_fail
()
2150 lttng_enable_rotation_timer
1 $@
2153 function lttng_enable_rotation_size
()
2155 local expected_to_fail
=$1
2159 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-rotation
-s $sess_name --size $size 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2161 if [[ $expected_to_fail -eq "1" ]]; then
2163 ok $?
"Expected fail on rotate session $sess_name"
2165 ok
$ret "Rotate session $sess_name"
2169 function lttng_enable_rotation_size_ok
()
2171 lttng_enable_rotation_size
0 $@
2174 function lttng_enable_rotation_size_fail
()
2176 lttng_enable_rotation_size
1 $@
2179 function lttng_clear_session
()
2181 local expected_to_fail
=$1
2184 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN clear $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2186 if [[ $expected_to_fail -eq "1" ]]; then
2188 ok $?
"Expected fail on clear session $sess_name"
2190 ok
$ret "Clear session $sess_name"
2194 function lttng_clear_session_ok
()
2196 lttng_clear_session
0 $@
2199 function lttng_clear_session_fail
()
2201 lttng_clear_session
1 $@
2204 function lttng_clear_all
()
2206 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN clear --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2207 ok $?
"Clear all lttng sessions"
2210 function validate_path_pattern
()
2214 # Base path is only used in error case and is used to list the content
2223 if [ "$ret" -ne "0" ]; then
2224 diag
"Path pattern expected: $pattern"
2225 # List the tracepath for more info. We use find as a recursive
2227 diag
"The base path content:"
2228 find "$base_path" -print
2232 function validate_trace_path_ust_uid
()
2235 local session_name
=$2
2237 local pattern
="$trace_path/$session_name-$date_time_pattern/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2239 validate_path_pattern
"UST per-uid trace path is valid" "$pattern" "$trace_path"
2242 function validate_trace_path_ust_uid_network
()
2245 local session_name
=$2
2248 local hostname
=$HOSTNAME
2252 # If the session was given a network base path (e.g
2253 # 127.0.0.1/my/custom/path on creation, there is no session name
2254 # component to the path on the relayd side. Caller can simply not pass a
2255 # session name for this scenario.
2256 if [ -n "$session_name" ]; then
2257 session_name
="$session_name-$date_time_pattern"
2258 if [ -n "$base_path" ]; then
2259 fail
"Session name and base path are mutually exclusive"
2264 pattern
="$trace_path/$hostname/$base_path/$session_name/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2266 validate_path_pattern
"UST per-uid network trace path is valid" "$pattern" "$trace_path"
2269 function validate_trace_path_ust_uid_snapshot_network
()
2272 local session_name
=$2
2273 local snapshot_name
=$3
2274 local snapshot_number
=$4
2276 local hostname
=$HOSTNAME
2281 # If the session/output was given a network base path (e.g
2282 # 127.0.0.1/my/custom/path on creation, there is no session name
2283 # component to the path on the relayd side. Caller can simply not pass a
2284 # session name for this scenario.
2285 if [ -n "$session_name" ]; then
2286 session_name
="$session_name-$date_time_pattern"
2287 if [ -n "$base_path" ]; then
2288 fail
"Session name and base path are mutually exclusive"
2293 pattern
="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2295 validate_path_pattern
"UST per-uid network snapshot trace path is valid" "$pattern" "$trace_path"
2298 function validate_trace_path_ust_uid_snapshot
()
2301 local session_name
=$2
2302 local snapshot_name
=$3
2303 local snapshot_number
=$4
2309 # If the session/output was given a network base path (e.g
2310 # 127.0.0.1/my/custom/path) on creation, there is no session name
2311 # component to the path on the relayd side. Caller can simply not pass a
2312 # session name for this scenario.
2313 if [ -n "$session_name" ]; then
2314 session_name
="$session_name-$date_time_pattern"
2315 if [ -n "$base_path" ]; then
2316 fail
"Session name and base path are mutually exclusive"
2321 pattern
="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2323 validate_path_pattern
"UST per-uid snapshot trace path is valid" "$pattern" "$trace_path"
2326 function validate_trace_path_ust_pid
()
2329 local session_name
=$2
2335 # If the session was given a trace path on creation, there is no session
2336 # name component to the path. Caller can simply not pass a session name
2337 # for this scenario.
2338 if [ -n "$session_name" ]; then
2339 session_name
="$session_name-$date_time_pattern"
2342 pattern
="$trace_path/$session_name/ust/pid/$pid/$app_string-*-$date_time_pattern/metadata"
2344 validate_path_pattern
"UST per-pid trace path is valid" "$pattern" "$trace_path"
2347 function validate_trace_path_kernel
()
2350 local session_name
=$2
2353 # If the session was given a trace path on creation, there is no session
2354 # name component to the path. Caller can simply not pass a session name
2355 # for this scenario.
2356 if [ -n "$session_name" ]; then
2357 session_name
="$session_name-$date_time_pattern"
2360 pattern
="$trace_path/$session_name/kernel/metadata"
2362 validate_path_pattern
"Kernel trace path is valid" "$pattern" "$trace_path"
2365 function validate_trace_path_kernel_network
()
2368 local session_name
=$2
2369 local hostname
=$HOSTNAME
2370 local pattern
="$trace_path/$hostname/$session_name-$date_time_pattern/kernel/metadata"
2372 validate_path_pattern
"Kernel network trace path is valid" "$pattern" "$trace_path"
2375 function validate_trace_path_kernel_snapshot
()
2378 local session_name
=$2
2379 local snapshot_name
=$3
2380 local snapshot_number
=$4
2385 # If the session/output was given a network base path (e.g
2386 # 127.0.0.1/my/custom/path on creation, there is no session name
2387 # component to the path on the relayd side. Caller can simply not pass a
2388 # session name for this scenario.
2389 if [ -n "$session_name" ]; then
2390 session_name
="$session_name-$date_time_pattern"
2391 if [ -n "$base_path" ]; then
2392 fail
"Session name and base path are mutually exclusive"
2397 pattern
="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
2399 validate_path_pattern
"Kernel snapshot trace path is valid" "$pattern" "$trace_path"
2402 function validate_trace_path_kernel_snapshot_network
()
2405 local session_name
=$2
2406 local snapshot_name
=$3
2407 local snapshot_number
=$4
2409 local hostname
=$HOSTNAME
2413 # If the session/output was given a network base path (e.g
2414 # 127.0.0.1/my/custom/path on creation, there is no session name
2415 # component to the path on the relayd side. Caller can simply not pass a
2416 # session name for this scenario.
2417 if [ -n "$session_name" ]; then
2418 session_name
="$session_name-$date_time_pattern"
2419 if [ -n "$base_path" ]; then
2420 fail
"Session name and base path are mutually exclusive"
2425 pattern
="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
2427 validate_path_pattern
"Kernel network snapshot trace path is valid" "$pattern" "$trace_path"