Tests: Add get_possible_cpus_count utility
[lttng-tools.git] / tests / utils / utils.sh
... / ...
CommitLineData
1# Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
2#
3# SPDX-License-Identifier: LGPL-2.1-only
4#
5
6SESSIOND_BIN="lttng-sessiond"
7SESSIOND_MATCH=".*lttng-sess.*"
8RUNAS_BIN="lttng-runas"
9RUNAS_MATCH=".*lttng-runas.*"
10CONSUMERD_BIN="lttng-consumerd"
11CONSUMERD_MATCH=".*lttng-consumerd.*"
12RELAYD_BIN="lttng-relayd"
13RELAYD_MATCH=".*lttng-relayd.*"
14LTTNG_BIN="lttng"
15BABELTRACE_BIN="babeltrace"
16OUTPUT_DEST=/dev/null
17ERROR_OUTPUT_DEST=/dev/null
18MI_XSD_MAJOR_VERSION=4
19MI_XSD_MINOR_VERSION=1
20MI_XSD_PATH="$TESTDIR/../src/common/mi-lttng-${MI_XSD_MAJOR_VERSION}.${MI_XSD_MINOR_VERSION}.xsd"
21MI_VALIDATE="$TESTDIR/utils/xml-utils/validate_xml ${MI_XSD_PATH}"
22
23XML_PRETTY="$TESTDIR/utils/xml-utils/pretty_xml"
24XML_EXTRACT="$TESTDIR/utils/xml-utils/extract_xml"
25XML_NODE_CHECK="${XML_EXTRACT} -e"
26
27# To match 20201127-175802
28date_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]"
29# The size of a long on this system
30system_long_bit_size=$(getconf LONG_BIT)
31
32# Minimal kernel version supported for session daemon tests
33KERNEL_MAJOR_VERSION=2
34KERNEL_MINOR_VERSION=6
35KERNEL_PATCHLEVEL_VERSION=27
36
37# We set the default UST register timeout and network and app socket timeout to
38# "wait forever", so that basic tests don't have to worry about hitting
39# timeouts on busy systems. Specialized tests should test those corner-cases.
40export LTTNG_UST_REGISTER_TIMEOUT=-1
41export LTTNG_NETWORK_SOCKET_TIMEOUT=-1
42export LTTNG_APP_SOCKET_TIMEOUT=-1
43
44# We set the default lttng-sessiond path to /bin/true to prevent the spawning
45# of a daemonized sessiond. This is necessary since 'lttng create' will spawn
46# its own sessiond if none is running. It also ensures that 'lttng create'
47# fails when no sessiond is running.
48export LTTNG_SESSIOND_PATH="/bin/true"
49
50source $TESTDIR/utils/tap/tap.sh
51
52if [ -z ${LTTNG_TEST_TEARDOWN_TIMEOUT+x} ]; then
53 LTTNG_TEST_TEARDOWN_TIMEOUT=60
54fi
55
56# Enable job monitor mode.
57# Here we are mostly interested in the following from the monitor mode:
58# All processes run in a separate process group.
59# This allows us to ensure that all subprocesses from all background tasks are
60# cleaned up correctly using signal to process group id.
61set -m
62
63kill_background_jobs ()
64{
65 local pids
66 pids=$(jobs -p)
67
68 if [ -z "$pids" ]; then
69 # Empty
70 return 0
71 fi
72
73 while read -r pid;
74 do
75 # Use negative number to send the signal to the process group.
76 # This ensure that any subprocesses receive the signal.
77 # /dev/null is used since there is an acceptable race between
78 # the moments the pids are listed and the moment we send a
79 # signal.
80 kill -SIGTERM -- "-$pid" 2>/dev/null
81 done <<< "$pids"
82}
83
84function cleanup ()
85{
86 # Try to kill daemons gracefully
87 stop_lttng_relayd_cleanup SIGTERM $LTTNG_TEST_TEARDOWN_TIMEOUT
88 stop_lttng_sessiond_cleanup SIGTERM $LTTNG_TEST_TEARDOWN_TIMEOUT
89
90 # If daemons are still present, forcibly kill them
91 stop_lttng_relayd_cleanup SIGKILL $LTTNG_TEST_TEARDOWN_TIMEOUT
92 stop_lttng_sessiond_cleanup SIGKILL $LTTNG_TEST_TEARDOWN_TIMEOUT
93 stop_lttng_consumerd_cleanup SIGKILL $LTTNG_TEST_TEARDOWN_TIMEOUT
94
95 kill_background_jobs
96}
97
98function full_cleanup ()
99{
100 cleanup
101 exit 1
102}
103
104function LTTNG_BAIL_OUT ()
105{
106 cleanup
107 BAIL_OUT "$@"
108}
109
110function null_pipes ()
111{
112 exec 0>/dev/null
113 exec 1>/dev/null
114 exec 2>/dev/null
115}
116
117trap full_cleanup SIGINT SIGTERM
118
119# perl prove closes its child pipes before giving it a chance to run its
120# signal trap handlers. Redirect pipes to /dev/null if SIGPIPE is caught
121# to allow those trap handlers to proceed.
122
123trap null_pipes SIGPIPE
124
125# Check pgrep from env, default to pgrep if none
126if [ -z "$PGREP" ]; then
127 PGREP=pgrep
128fi
129
130# Due to the renaming of threads we need to use the full command (pgrep -f) to
131# identify the pids for multiple lttng related processes. The problem with "pgrep
132# -f" is that it ends up also looking at the arguments. We use a two stage
133# lookup. The first one is using "pgrep -f" yielding potential candidate.
134# The second on perform grep on the basename of the first field of the
135# /proc/pid/cmdline of the previously identified pids. The first field
136# correspond to the actual command.
137function lttng_pgrep ()
138{
139 local pattern=$1
140 local possible_pids
141 local full_command_no_argument
142 local command_basename
143
144 possible_pids=$($PGREP -f "$pattern")
145 if [ -z "$possible_pids" ]; then
146 return 0
147 fi
148
149 while IFS= read -r pid ; do
150 # /proc/pid/cmdline is null separated.
151 if full_command_no_argument=$(cut -d '' -f 1 2>/dev/null < /proc/"$pid"/cmdline); then
152 command_basename=$(basename "$full_command_no_argument")
153 if grep -q "$pattern" <<< "$command_basename"; then
154 echo "$pid"
155 fi
156 fi
157 done <<< "$possible_pids"
158 return 0
159}
160
161function print_ok ()
162{
163 # Check if we are a terminal
164 if [ -t 1 ]; then
165 echo -e "\e[1;32mOK\e[0m"
166 else
167 echo -e "OK"
168 fi
169}
170
171function print_fail ()
172{
173 # Check if we are a terminal
174 if [ -t 1 ]; then
175 echo -e "\e[1;31mFAIL\e[0m"
176 else
177 echo -e "FAIL"
178 fi
179}
180
181function print_test_banner ()
182{
183 local desc="$1"
184 diag "$desc"
185}
186
187function validate_kernel_version ()
188{
189 local kern_version=($(uname -r | awk -F. '{ printf("%d.%d.%d\n",$1,$2,$3); }' | tr '.' '\n'))
190 if [ ${kern_version[0]} -gt $KERNEL_MAJOR_VERSION ]; then
191 return 0
192 fi
193 if [ ${kern_version[1]} -gt $KERNEL_MINOR_VERSION ]; then
194 return 0
195 fi
196 if [ ${kern_version[2]} -ge $KERNEL_PATCHLEVEL_VERSION ]; then
197 return 0
198 fi
199 return 1
200}
201
202# Generate a random string
203# $1 = number of characters; defaults to 16
204# $2 = include special characters; 1 = yes, 0 = no; defaults to yes
205function randstring()
206{
207 [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
208 cat /dev/urandom 2>/dev/null | tr -cd "$CHAR" 2>/dev/null | head -c ${1:-16} 2>/dev/null
209 echo
210}
211
212# Helpers for get_possible_cpus.
213function get_possible_cpus_count_from_sysfs_possible_mask()
214{
215 local max_possible_cpu_id=$(cut -d '-' -f 2 < /sys/devices/system/cpu/possible)
216 echo $((max_possible_cpu_id+1))
217}
218
219function get_max_cpus_count_from_sysfs_cpu_directories()
220{
221 local max_possible_cpu_id= \
222 $(find /sys/devices/system/cpu/ -mindepth 1 -maxdepth 1 -regex ".+cpu[0-9]+" | \
223 sed -e 's/cpu//g' | \
224 awk -F '/' '{ if ($NF > N) N = $NF } END { print N }')
225 echo $((max_possible_cpu_id+1))
226}
227
228# Return the number of possible CPUs.
229function get_possible_cpus_count()
230{
231 local possible_cpus_count=$(get_possible_cpus_count_from_sysfs_possible_mask)
232
233 if [ $? -ne 0 ]; then
234 possible_cpus_count=$(get_max_cpus_count_from_sysfs_cpu_directories)
235 local configured_cpus_count=$(getconf _NPROCESSORS_CONF)
236 possible_cpus_count=$(($configured_cpus_count > $possible_cpus_count \
237 ? $configured_cpus_count \
238 : $possible_cpus_count))
239 fi
240
241 echo $possible_cpus_count
242}
243
244# Return the number of _configured_ CPUs.
245function conf_proc_count()
246{
247 getconf _NPROCESSORS_CONF
248 if [ $? -ne 0 ]; then
249 diag "Failed to get the number of configured CPUs"
250 fi
251 echo
252}
253
254# Check if base lttng-modules are present.
255# Bail out on failure
256function validate_lttng_modules_present ()
257{
258 # Check for loadable modules.
259 modprobe -n lttng-tracer 2>/dev/null
260 if [ $? -eq 0 ]; then
261 return 0
262 fi
263
264 # Check for builtin modules.
265 ls /proc/lttng > /dev/null 2>&1
266 if [ $? -eq 0 ]; then
267 return 0
268 fi
269
270 LTTNG_BAIL_OUT "LTTng modules not detected."
271}
272
273# Run the lttng binary.
274#
275# The first two arguments are stdout and stderr redirect paths, respectively.
276# The rest of the arguments are forwarded to the lttng binary
277function _run_lttng_cmd
278{
279 local stdout_dest="$1"
280 local stderr_dest="$2"
281 shift 2
282
283 diag "$TESTDIR/../src/bin/lttng/$LTTNG_BIN $*"
284 $TESTDIR/../src/bin/lttng/$LTTNG_BIN "$@" 1> "$stdout_dest" 2> "$stderr_dest"
285}
286
287function enable_kernel_lttng_event
288{
289 local withtap="$1"
290 local expected_to_fail="$2"
291 local sess_name="$3"
292 local event_name="$4"
293 local channel_name="$5"
294
295 if [ -z "$event_name" ]; then
296 # Enable all event if no event name specified
297 event_name="-a"
298 fi
299
300 if [ -z "$channel_name" ]; then
301 # default channel if none specified
302 chan=""
303 else
304 chan="-c $channel_name"
305 fi
306
307 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
308 ret=$?
309 if [[ $expected_to_fail -eq "1" ]]; then
310 test $ret -ne "0"
311 ret=$?
312 if [ $withtap -eq "1" ]; then
313 ok $ret "Enable kernel event $event_name for session $session_name on channel $channel_name failed as expected"
314 fi
315 else
316 if [ $withtap -eq "1" ]; then
317 ok $ret "Enable kernel event $event_name for session $sess_name"
318 fi
319 fi
320}
321
322function enable_kernel_lttng_event_ok ()
323{
324 enable_kernel_lttng_event 1 0 "$@"
325}
326
327function enable_kernel_lttng_event_fail ()
328{
329 enable_kernel_lttng_event 1 1 "$@"
330}
331
332function enable_kernel_lttng_event_notap ()
333{
334 enable_kernel_lttng_event 0 0 "$@"
335}
336
337# Old interface
338function lttng_enable_kernel_event
339{
340 enable_kernel_lttng_event_ok "$@"
341}
342
343function lttng_enable_kernel_syscall()
344{
345 local expected_to_fail=$1
346 local sess_name=$2
347 local syscall_name=$3
348 local channel_name=$4
349
350 if [ -z $syscall_name ]; then
351 # Enable all event if no syscall name specified
352 syscall_name="-a"
353 fi
354
355 if [ -z $channel_name ]; then
356 # default channel if none specified
357 chan=""
358 else
359 chan="-c $channel_name"
360 fi
361
362 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
363 ret=$?
364 if [[ $expected_to_fail -eq "1" ]]; then
365 test $ret -ne "0"
366 ok $? "Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name fail as expected"
367 else
368 ok $ret "Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
369 fi
370}
371
372function lttng_enable_kernel_syscall_ok()
373{
374 lttng_enable_kernel_syscall 0 "$@"
375}
376
377function lttng_enable_kernel_syscall_fail()
378{
379 lttng_enable_kernel_syscall 1 "$@"
380}
381
382function lttng_disable_kernel_syscall()
383{
384 local expected_to_fail=$1
385 local sess_name=$2
386 local syscall_name=$3
387 local channel_name=$4
388
389 if [ -z $syscall_name ]; then
390 # Enable all event if no syscall name specified
391 syscall_name="-a"
392 fi
393
394 if [ -z $channel_name ]; then
395 # default channel if none specified
396 chan=""
397 else
398 chan="-c $channel_name"
399 fi
400
401 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event --syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
402
403 ret=$?
404 if [[ $expected_to_fail -eq "1" ]]; then
405 test $ret -ne "0"
406 ok $? "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name failed as expected"
407 else
408 ok $ret "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
409 fi
410}
411
412function lttng_disable_kernel_syscall_ok()
413{
414 lttng_disable_kernel_syscall 0 "$@"
415}
416
417function lttng_disable_kernel_syscall_fail()
418{
419 lttng_disable_kernel_syscall 1 "$@"
420}
421
422function lttng_enable_kernel_function_event ()
423{
424 local expected_to_fail="$1"
425 local sess_name="$2"
426 local target="$3"
427 local event_name="$4"
428
429 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-event --kernel --function="$target" "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
430 ret=$?
431 if [[ $expected_to_fail -eq "1" ]]; then
432 test $ret -ne "0"
433 ok $? "Enable kernel function event for session $sess_name failed as expected"
434 else
435 ok $ret "Enable kernel function event for session $sess_name"
436 fi
437}
438
439function lttng_enable_kernel_function_event_ok ()
440{
441 lttng_enable_kernel_function_event 0 "$@"
442}
443
444function lttng_enable_kernel_userspace_probe_event ()
445{
446 local expected_to_fail="$1"
447 local sess_name="$2"
448 local target="$3"
449 local event_name="$4"
450
451 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-event --kernel --userspace-probe="$target" "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
452 ret=$?
453 if [[ $expected_to_fail -eq "1" ]]; then
454 test $ret -ne "0"
455 ok $? "Enable kernel userspace probe event for session $sess_name failed as expected"
456 else
457 ok $ret "Enable kernel userspace probe event for session $sess_name"
458 fi
459}
460
461function lttng_enable_kernel_userspace_probe_event_fail ()
462{
463 lttng_enable_kernel_userspace_probe_event 1 "$@"
464}
465
466function lttng_enable_kernel_userspace_probe_event_ok ()
467{
468 lttng_enable_kernel_userspace_probe_event 0 "$@"
469}
470
471function disable_kernel_lttng_userspace_probe_event_ok ()
472{
473 local sess_name="$1"
474 local event_name="$2"
475
476 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" disable-event --kernel "$event_name" -s "$sess_name" > "$OUTPUT_DEST" 2> "$ERROR_OUTPUT_DEST"
477 ok $? "Disable kernel event $target for session $sess_name"
478}
479function lttng_enable_kernel_channel()
480{
481 local withtap=$1
482 local expected_to_fail=$2
483 local sess_name=$3
484 local channel_name=$4
485 local opts="${@:5}"
486
487 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -k $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
488 ret=$?
489 if [[ $expected_to_fail -eq "1" ]]; then
490 test "$ret" -ne "0"
491 ret=$?
492 if [ $withtap -eq "1" ]; then
493 ok $ret "Enable channel $channel_name for session $sess_name failed as expected"
494 fi
495 else
496 if [ $withtap -eq "1" ]; then
497 ok $ret "Enable channel $channel_name for session $sess_name"
498 fi
499 fi
500}
501
502function lttng_enable_kernel_channel_ok()
503{
504 lttng_enable_kernel_channel 1 0 "$@"
505}
506
507function lttng_enable_kernel_channel_fail()
508{
509 lttng_enable_kernel_channel 1 1 "$@"
510}
511
512function lttng_enable_kernel_channel_notap()
513{
514 lttng_enable_kernel_channel 0 0 "$@"
515}
516
517function enable_kernel_lttng_channel_ok()
518{
519 lttng_enable_kernel_channel 1 0 "$@"
520}
521
522function lttng_disable_kernel_channel()
523{
524 local expected_to_fail=$1
525 local sess_name=$2
526 local channel_name=$3
527
528 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-channel -k $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
529 ret=$?
530 if [[ $expected_to_fail -eq "1" ]]; then
531 test "$ret" -ne "0"
532 ok $? "Disable channel $channel_name for session $sess_name failed as expected"
533 else
534 ok $ret "Disable channel $channel_name for session $sess_name"
535 fi
536}
537
538function lttng_disable_kernel_channel_ok()
539{
540 lttng_disable_kernel_channel 0 "$@"
541}
542
543function lttng_disable_kernel_channel_fail()
544{
545 lttng_disable_kernel_channel 1 "$@"
546}
547
548function start_lttng_relayd_opt()
549{
550 local withtap=$1
551 local process_mode=$2
552 local opt=$3
553
554 DIR=$(readlink -f "$TESTDIR")
555
556 if [ -z $(lttng_pgrep "$RELAYD_MATCH") ]; then
557 # shellcheck disable=SC2086
558 $DIR/../src/bin/lttng-relayd/$RELAYD_BIN $process_mode $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
559 #$DIR/../src/bin/lttng-relayd/$RELAYD_BIN $opt -vvv >>/tmp/relayd.log 2>&1 &
560 if [ $? -eq 1 ]; then
561 if [ $withtap -eq "1" ]; then
562 fail "Start lttng-relayd (process mode: $process_mode opt: $opt)"
563 fi
564 return 1
565 else
566 if [ $withtap -eq "1" ]; then
567 pass "Start lttng-relayd (process mode: $process_mode opt: $opt)"
568 fi
569 fi
570 else
571 pass "Start lttng-relayd (opt: $opt)"
572 fi
573}
574
575function start_lttng_relayd()
576{
577 start_lttng_relayd_opt 1 "-b" "$@"
578}
579
580function start_lttng_relayd_notap()
581{
582 start_lttng_relayd_opt 0 "-b" "$@"
583}
584
585function stop_lttng_relayd_opt()
586{
587 local withtap=$1
588 local is_cleanup=$2
589 local signal=$3
590 local timeout_s=$4
591 local dtimeleft_s=
592 local retval=0
593 local pids
594
595 if [ -z "$signal" ]; then
596 signal="SIGTERM"
597 fi
598
599
600 # Multiply time by 2 to simplify integer arithmetic
601 if [ -n "$timeout_s" ]; then
602 dtimeleft_s=$((timeout_s * 2))
603 fi
604
605
606 pids=$(lttng_pgrep "$RELAYD_MATCH")
607 if [ -z "$pids" ]; then
608 if [ "$is_cleanup" -eq 1 ]; then
609 :
610 elif [ "$withtap" -eq "1" ]; then
611 fail "No relay daemon to kill"
612 else
613 LTTNG_BAIL_OUT "No relay daemon to kill"
614 fi
615 return 0
616 fi
617
618 diag "Killing (signal $signal) lttng-relayd (pid: $pids)"
619
620 # shellcheck disable=SC2086
621 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
622 retval=1
623 if [ "$withtap" -eq "1" ]; then
624 fail "Kill relay daemon"
625 fi
626 else
627 out=1
628 while [ -n "$out" ]; do
629 out=$(lttng_pgrep "$RELAYD_MATCH")
630 if [ -n "$dtimeleft_s" ]; then
631 if [ $dtimeleft_s -lt 0 ]; then
632 out=
633 retval=1
634 fi
635 dtimeleft_s=$((dtimeleft_s - 1))
636 fi
637 sleep 0.5
638 done
639 if [ "$withtap" -eq "1" ]; then
640 if [ "$retval" -eq "0" ]; then
641 pass "Wait after kill relay daemon"
642 else
643 fail "Wait after kill relay daemon"
644 fi
645 fi
646 fi
647 return $retval
648}
649
650function stop_lttng_relayd()
651{
652 stop_lttng_relayd_opt 1 0 "$@"
653}
654
655function stop_lttng_relayd_notap()
656{
657 stop_lttng_relayd_opt 0 0 "$@"
658}
659
660function stop_lttng_relayd_cleanup()
661{
662 stop_lttng_relayd_opt 0 1 "$@"
663}
664
665#First arg: show tap output
666#Second argument: load path for automatic loading
667function start_lttng_sessiond_opt()
668{
669 local withtap=$1
670 local load_path=$2
671
672 # The rest of the arguments will be passed directly to lttng-sessiond.
673 shift 2
674
675 local env_vars=""
676 local consumerd=""
677
678 local long_bit_value=
679 long_bit_value=$(getconf LONG_BIT)
680
681 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
682 # Env variable requested no session daemon
683 return
684 fi
685
686 DIR=$(readlink -f "$TESTDIR")
687
688 # Get long_bit value for 32/64 consumerd
689 case "$long_bit_value" in
690 32)
691 consumerd="--consumerd32-path=$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
692 ;;
693 64)
694 consumerd="--consumerd64-path=$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
695 ;;
696 *)
697 return
698 ;;
699 esac
700
701 # Check for env. variable. Allow the use of LD_PRELOAD etc.
702 if [[ "x${LTTNG_SESSIOND_ENV_VARS}" != "x" ]]; then
703 env_vars="${LTTNG_SESSIOND_ENV_VARS} "
704 fi
705 env_vars="${env_vars}$DIR/../src/bin/lttng-sessiond/$SESSIOND_BIN"
706
707 if ! validate_kernel_version; then
708 fail "Start session daemon"
709 LTTNG_BAIL_OUT "*** Kernel too old for session daemon tests ***"
710 fi
711
712 : "${LTTNG_SESSION_CONFIG_XSD_PATH="${DIR}/../src/common/config/"}"
713 export LTTNG_SESSION_CONFIG_XSD_PATH
714
715 if [ -z "$(lttng_pgrep "${SESSIOND_MATCH}")" ]; then
716 # Have a load path ?
717 if [ -n "$load_path" ]; then
718 # shellcheck disable=SC2086
719 env $env_vars --load "$load_path" --background "$consumerd" "$@"
720 else
721 # shellcheck disable=SC2086
722 env $env_vars --background "$consumerd" "$@"
723 fi
724 #$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
725 status=$?
726 if [ "$withtap" -eq "1" ]; then
727 ok $status "Start session daemon"
728 fi
729 fi
730}
731
732function start_lttng_sessiond()
733{
734 start_lttng_sessiond_opt 1 "$@"
735}
736
737function start_lttng_sessiond_notap()
738{
739 start_lttng_sessiond_opt 0 "$@"
740}
741
742function stop_lttng_sessiond_opt()
743{
744 local withtap=$1
745 local is_cleanup=$2
746 local signal=$3
747 local timeout_s=$4
748 local dtimeleft_s=
749 local retval=0
750 local runas_pids
751 local pids
752
753 if [ -z "$signal" ]; then
754 signal=SIGTERM
755 fi
756
757 # Multiply time by 2 to simplify integer arithmetic
758 if [ -n "$timeout_s" ]; then
759 dtimeleft_s=$((timeout_s * 2))
760 fi
761
762 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
763 # Env variable requested no session daemon
764 return 0
765 fi
766
767 runas_pids=$(lttng_pgrep "$RUNAS_MATCH")
768 pids=$(lttng_pgrep "$SESSIOND_MATCH")
769
770 if [ -n "$runas_pids" ]; then
771 pids="$pids $runas_pids"
772 fi
773
774 if [ -z "$pids" ]; then
775 if [ "$is_cleanup" -eq 1 ]; then
776 :
777 elif [ "$withtap" -eq "1" ]; then
778 fail "No session daemon to kill"
779 else
780 LTTNG_BAIL_OUT "No session daemon to kill"
781 fi
782 return 0
783 fi
784
785 diag "Killing (signal $signal) $SESSIOND_BIN and lt-$SESSIOND_BIN pids: $(echo "$pids" | tr '\n' ' ')"
786
787 # shellcheck disable=SC2086
788 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
789 retval=1
790 if [ "$withtap" -eq "1" ]; then
791 fail "Kill sessions daemon"
792 fi
793 else
794 out=1
795 while [ -n "$out" ]; do
796 out=$(lttng_pgrep "${SESSIOND_MATCH}")
797 if [ -n "$dtimeleft_s" ]; then
798 if [ $dtimeleft_s -lt 0 ]; then
799 out=
800 retval=1
801 fi
802 dtimeleft_s=$((dtimeleft_s - 1))
803 fi
804 sleep 0.5
805 done
806 out=1
807 while [ -n "$out" ]; do
808 out=$(lttng_pgrep "$CONSUMERD_MATCH")
809 if [ -n "$dtimeleft_s" ]; then
810 if [ $dtimeleft_s -lt 0 ]; then
811 out=
812 retval=1
813 fi
814 dtimeleft_s=$((dtimeleft_s - 1))
815 fi
816 sleep 0.5
817 done
818
819 if [ "$withtap" -eq "1" ]; then
820 if [ "$retval" -eq "0" ]; then
821 pass "Wait after kill session daemon"
822 else
823 fail "Wait after kill session daemon"
824 fi
825 fi
826 fi
827 if [ "$signal" = "SIGKILL" ]; then
828 if [ "$(id -u)" -eq "0" ]; then
829 local modules=
830 modules="$(lsmod | grep ^lttng | awk '{print $1}')"
831
832 if [ -n "$modules" ]; then
833 diag "Unloading all LTTng modules"
834 modprobe --remove "$modules"
835 fi
836 fi
837 fi
838
839 return $retval
840}
841
842function stop_lttng_sessiond()
843{
844 stop_lttng_sessiond_opt 1 0 "$@"
845}
846
847function stop_lttng_sessiond_notap()
848{
849 stop_lttng_sessiond_opt 0 0 "$@"
850}
851
852function stop_lttng_sessiond_cleanup()
853{
854 stop_lttng_sessiond_opt 0 1 "$@"
855}
856
857function sigstop_lttng_sessiond_opt()
858{
859 local withtap=$1
860 local signal=SIGSTOP
861 local pids
862
863 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
864 # Env variable requested no session daemon
865 return
866 fi
867
868 pids="$(lttng_pgrep "${SESSIOND_MATCH}") $(lttng_pgrep "$RUNAS_MATCH")"
869
870 if [ "$withtap" -eq "1" ]; then
871 diag "Sending SIGSTOP to lt-$SESSIOND_BIN and $SESSIOND_BIN pids: $(echo "$pids" | tr '\n' ' ')"
872 fi
873
874 # shellcheck disable=SC2086
875 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
876 if [ "$withtap" -eq "1" ]; then
877 fail "Sending SIGSTOP to session daemon"
878 fi
879 else
880 out=1
881 while [ $out -ne 0 ]; do
882 pids="$(lttng_pgrep "$SESSIOND_MATCH")"
883
884 # Wait until state becomes stopped for session
885 # daemon(s).
886 out=0
887 for sessiond_pid in $pids; do
888 state="$(ps -p "$sessiond_pid" -o state= )"
889 if [[ -n "$state" && "$state" != "T" ]]; then
890 out=1
891 fi
892 done
893 sleep 0.5
894 done
895 if [ "$withtap" -eq "1" ]; then
896 pass "Sending SIGSTOP to session daemon"
897 fi
898 fi
899}
900
901function sigstop_lttng_sessiond()
902{
903 sigstop_lttng_sessiond_opt 1 "$@"
904}
905
906function sigstop_lttng_sessiond_notap()
907{
908 sigstop_lttng_sessiond_opt 0 "$@"
909}
910
911function stop_lttng_consumerd_opt()
912{
913 local withtap=$1
914 local is_cleanup=$2
915 local signal=$3
916 local timeout_s=$4
917 local dtimeleft_s=
918 local retval=0
919 local pids
920
921 if [ -z "$signal" ]; then
922 signal=SIGTERM
923 fi
924
925 # Multiply time by 2 to simplify integer arithmetic
926 if [ -n "$timeout_s" ]; then
927 dtimeleft_s=$((timeout_s * 2))
928 fi
929
930 pids="$(lttng_pgrep "$CONSUMERD_MATCH")"
931
932 if [ -z "$pids" ]; then
933 if [ "$is_cleanup" -eq 1 ]; then
934 :
935 elif [ "$withtap" -eq "1" ]; then
936 fail "No consumerd daemon to kill"
937 else
938 LTTNG_BAIL_OUT "No consumerd daemon to kill"
939 fi
940 return 0
941 fi
942
943 diag "Killing (signal $signal) $CONSUMERD_BIN pids: $(echo "$pids" | tr '\n' ' ')"
944
945 # shellcheck disable=SC2086
946 if ! kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST; then
947 retval=1
948 if [ "$withtap" -eq "1" ]; then
949 fail "Kill consumer daemon"
950 fi
951 else
952 out=1
953 while [ $out -ne 0 ]; do
954 pids="$(lttng_pgrep "$CONSUMERD_MATCH")"
955
956 # If consumerds are still present check their status.
957 # A zombie status qualifies the consumerd as *killed*
958 out=0
959 for consumer_pid in $pids; do
960 state="$(ps -p "$consumer_pid" -o state= )"
961 if [[ -n "$state" && "$state" != "Z" ]]; then
962 out=1
963 fi
964 done
965 if [ -n "$dtimeleft_s" ]; then
966 if [ $dtimeleft_s -lt 0 ]; then
967 out=0
968 retval=1
969 fi
970 dtimeleft_s=$((dtimeleft_s - 1))
971 fi
972 sleep 0.5
973 done
974 if [ "$withtap" -eq "1" ]; then
975 if [ "$retval" -eq "0" ]; then
976 pass "Wait after kill consumer daemon"
977 else
978 fail "Wait after kill consumer daemon"
979 fi
980 fi
981 fi
982
983 return $retval
984}
985
986function stop_lttng_consumerd()
987{
988 stop_lttng_consumerd_opt 1 0 "$@"
989}
990
991function stop_lttng_consumerd_notap()
992{
993 stop_lttng_consumerd_opt 0 0 "$@"
994}
995
996function stop_lttng_consumerd_cleanup()
997{
998 stop_lttng_consumerd_opt 0 1 "$@"
999}
1000
1001function sigstop_lttng_consumerd_opt()
1002{
1003 local withtap=$1
1004 local signal=SIGSTOP
1005 local pids
1006
1007 pids="$(lttng_pgrep "$CONSUMERD_MATCH")"
1008
1009 diag "Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo "$pids" | tr '\n' ' ')"
1010
1011 # shellcheck disable=SC2086
1012 kill -s $signal $pids 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1013 retval=$?
1014
1015 if [ $retval -eq 1 ]; then
1016 if [ "$withtap" -eq "1" ]; then
1017 fail "Sending SIGSTOP to consumer daemon"
1018 fi
1019 return 1
1020 else
1021 out=1
1022 while [ $out -ne 0 ]; do
1023 pids="$(lttng_pgrep "$CONSUMERD_MATCH")"
1024
1025 # Wait until state becomes stopped for all
1026 # consumers.
1027 out=0
1028 for consumer_pid in $pids; do
1029 state="$(ps -p "$consumer_pid" -o state= )"
1030 if [[ -n "$state" && "$state" != "T" ]]; then
1031 out=1
1032 fi
1033 done
1034 sleep 0.5
1035 done
1036 if [ "$withtap" -eq "1" ]; then
1037 pass "Sending SIGSTOP to consumer daemon"
1038 fi
1039 fi
1040 return $retval
1041}
1042
1043function sigstop_lttng_consumerd()
1044{
1045 sigstop_lttng_consumerd_opt 1 "$@"
1046}
1047
1048function sigstop_lttng_consumerd_notap()
1049{
1050 sigstop_lttng_consumerd_opt 0 "$@"
1051}
1052
1053function list_lttng_with_opts ()
1054{
1055 local ret
1056 local withtap=$1
1057 shift
1058 local opts=$1
1059 $TESTDIR/../src/bin/lttng/$LTTNG_BIN list $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1060 ret=$?
1061 if [ $withtap -eq "1" ]; then
1062 ok $ret "Lttng-tool list command with option $opts"
1063 fi
1064}
1065
1066function list_lttng_ok ()
1067{
1068 list_lttng_with_opts 1 "$@"
1069}
1070
1071function list_lttng_notap ()
1072{
1073 list_lttng_with_opts 0 "$@"
1074}
1075
1076function create_lttng_session_no_output ()
1077{
1078 local sess_name=$1
1079 local opts="${@:2}"
1080
1081 $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $sess_name --no-output $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1082 ok $? "Create session $sess_name in no-output mode"
1083}
1084
1085function create_lttng_session_uri () {
1086 local sess_name=$1
1087 local uri=$2
1088 local opts="${@:3}"
1089
1090 $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $sess_name -U $uri $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1091 ok $? "Create session $sess_name with uri:$uri and opts: $opts"
1092}
1093
1094function create_lttng_session ()
1095{
1096 local withtap=$1
1097 local expected_to_fail=$2
1098 local sess_name=$3
1099 local trace_path=$4
1100 local opt=$5
1101
1102 if [ -z "$trace_path" ]; then
1103 # Use lttng-sessiond default output.
1104 trace_path=""
1105 else
1106 trace_path="-o $trace_path"
1107 fi
1108
1109 $TESTDIR/../src/bin/lttng/$LTTNG_BIN create "$sess_name" $trace_path $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1110 ret=$?
1111 if [ $expected_to_fail -eq "1" ]; then
1112 test "$ret" -ne "0"
1113 ret=$?
1114 if [ $withtap -eq "1" ]; then
1115 ok $ret "Create session $sess_name in $trace_path failed as expected"
1116 fi
1117 else
1118 if [ $withtap -eq "1" ]; then
1119 ok $ret "Create session $sess_name in $trace_path"
1120 fi
1121 fi
1122 return $ret
1123}
1124
1125function create_lttng_session_ok ()
1126{
1127 create_lttng_session 1 0 "$@"
1128}
1129
1130function create_lttng_session_fail ()
1131{
1132 create_lttng_session 1 1 "$@"
1133}
1134
1135function create_lttng_session_notap ()
1136{
1137 create_lttng_session 0 0 "$@"
1138}
1139
1140
1141function enable_ust_lttng_channel ()
1142{
1143 local withtap=$1
1144 local expected_to_fail=$2
1145 local sess_name=$3
1146 local channel_name=$4
1147 local opts="${@:5}"
1148
1149 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -u $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1150 ret=$?
1151 if [[ $expected_to_fail -eq "1" ]]; then
1152 test "$ret" -ne "0"
1153 ret=$?
1154 if [ $withtap -eq "1" ]; then
1155 ok $ret "Enable channel $channel_name for session $sess_name failed as expected"
1156 fi
1157 else
1158 if [ $withtap -eq "1" ]; then
1159 ok $ret "Enable channel $channel_name for session $sess_name"
1160 fi
1161 fi
1162 return $ret
1163}
1164
1165function enable_ust_lttng_channel_ok ()
1166{
1167 enable_ust_lttng_channel 1 0 "$@"
1168}
1169
1170function enable_ust_lttng_channel_fail ()
1171{
1172 enable_ust_lttng_channel 1 1 "$@"
1173}
1174
1175function enable_ust_lttng_channel_notap ()
1176{
1177 enable_ust_lttng_channel 0 0 "$@"
1178}
1179
1180function disable_ust_lttng_channel()
1181{
1182 local sess_name=$1
1183 local channel_name=$2
1184
1185 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-channel -u $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1186 ok $? "Disable channel $channel_name for session $sess_name"
1187}
1188
1189function enable_lttng_mmap_overwrite_kernel_channel()
1190{
1191 local sess_name=$1
1192 local channel_name=$2
1193
1194 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name $channel_name -k --output mmap --overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1195 ok $? "Enable channel $channel_name for session $sess_name"
1196}
1197
1198function enable_lttng_mmap_discard_small_kernel_channel()
1199{
1200 local sess_name=$1
1201 local channel_name=$2
1202
1203 $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
1204 ok $? "Enable small discard channel $channel_name for session $sess_name"
1205}
1206
1207function enable_lttng_mmap_overwrite_small_kernel_channel()
1208{
1209 local sess_name=$1
1210 local channel_name=$2
1211
1212 $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
1213 ok $? "Enable small discard channel $channel_name for session $sess_name"
1214}
1215
1216function enable_lttng_mmap_overwrite_ust_channel()
1217{
1218 local sess_name=$1
1219 local channel_name=$2
1220
1221 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name $channel_name -u --output mmap --overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1222 ok $? "Enable channel $channel_name for session $sess_name"
1223}
1224
1225function enable_ust_lttng_event ()
1226{
1227 local withtap=$1
1228 local expected_to_fail=$2
1229 local sess_name=$3
1230 local event_name="$4"
1231 local channel_name=$5
1232
1233 if [ -z $channel_name ]; then
1234 # default channel if none specified
1235 chan=""
1236 else
1237 chan="-c $channel_name"
1238 fi
1239
1240 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1241 ret=$?
1242 if [[ $expected_to_fail -eq "1" ]]; then
1243 test $ret -ne "0"
1244 ret=$?
1245 if [[ $withtap -eq "1" ]]; then
1246 ok $ret "Enable ust event $event_name for session $session_name failed as expected"
1247 fi
1248 else
1249 if [[ $withtap -eq "1" ]]; then
1250 ok $ret "Enable ust event $event_name for session $sess_name"
1251 fi
1252 fi
1253 return $ret
1254}
1255
1256function enable_ust_lttng_event_ok ()
1257{
1258 enable_ust_lttng_event 1 0 "$@"
1259}
1260
1261function enable_ust_lttng_event_fail ()
1262{
1263 enable_ust_lttng_event 1 1 "$@"
1264}
1265
1266function enable_ust_lttng_event_notap ()
1267{
1268 enable_ust_lttng_event 0 0 "$@"
1269}
1270
1271function enable_jul_lttng_event()
1272{
1273 sess_name=$1
1274 event_name="$2"
1275 channel_name=$3
1276
1277 if [ -z $channel_name ]; then
1278 # default channel if none specified
1279 chan=""
1280 else
1281 chan="-c $channel_name"
1282 fi
1283
1284 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1285 ok $? "Enable JUL event $event_name for session $sess_name"
1286}
1287
1288function enable_jul_lttng_event_loglevel()
1289{
1290 local sess_name=$1
1291 local event_name="$2"
1292 local loglevel=$3
1293 local channel_name=$4
1294
1295 if [ -z $channel_name ]; then
1296 # default channel if none specified
1297 chan=""
1298 else
1299 chan="-c $channel_name"
1300 fi
1301
1302 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel $loglevel "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1303 ok $? "Enable JUL event $event_name for session $sess_name with loglevel $loglevel"
1304}
1305
1306function enable_log4j_lttng_event()
1307{
1308 local sess_name=$1
1309 local event_name=$2
1310 local channel_name=$3
1311
1312 local chan_opt=()
1313
1314 # default channel if none specified
1315 if [ -n "$channel_name" ]; then
1316 chan_opt=("-c" "$channel_name")
1317 fi
1318
1319 _run_lttng_cmd "$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1320 enable-event "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1321 ok $? "Enable LOG4J event '$event_name' for session '$sess_name'"
1322}
1323
1324function enable_log4j_lttng_event_filter()
1325{
1326 local sess_name=$1
1327 local event_name=$2
1328 local filter=$3
1329
1330 _run_lttng_cmd "$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1331 enable-event "$event_name" -s "$sess_name" --log4j --filter "$filter"
1332 ok $? "Enable LOG4J event '$event_name' with filter '$filter' for session '$sess_name'"
1333}
1334
1335function enable_log4j_lttng_event_filter_loglevel_only()
1336{
1337 local sess_name=$1
1338 local event_name=$2
1339 local filter=$3
1340 local loglevel=$4
1341
1342 _run_lttng_cmd "$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1343 enable-event --loglevel-only "$loglevel" "$event_name" -s "$sess_name" -l --filter "$filter"
1344 ok $? "Enable LOG4J event '$event_name' with filter '$filter' and loglevel-only '$loglevel' for session '$sess_name'"
1345}
1346
1347function enable_log4j_lttng_event_loglevel()
1348{
1349 local sess_name=$1
1350 local event_name=$2
1351 local loglevel=$3
1352 local channel_name=$4
1353
1354
1355 # default channel if none specified
1356 if [ -n "$channel_name" ]; then
1357 chan_opt=("-c" "$channel_name")
1358 fi
1359
1360 _run_lttng_cmd "$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1361 enable-event --loglevel "$loglevel" "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1362 ok $? "Enable LOG4J event '$event_name' for session '$sess_name' with loglevel '$loglevel'"
1363}
1364
1365function enable_log4j_lttng_event_loglevel_only()
1366{
1367 local sess_name=$1
1368 local event_name=$2
1369 local loglevel=$3
1370 local channel_name=$4
1371
1372 local chan_opt=()
1373
1374 # default channel if none specified
1375 if [ -n "$channel_name" ]; then
1376 chan_opt=("-c" "$channel_name")
1377 fi
1378
1379 _run_lttng_cmd "$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1380 enable-event --loglevel-only "$loglevel" "$event_name" "${chan_opt[@]}" -s "$sess_name" --log4j
1381 ok $? "Enable LOG4J event '$event_name' for session '$sess_name' with loglevel-only '$loglevel'"
1382}
1383
1384function enable_python_lttng_event()
1385{
1386 sess_name=$1
1387 event_name="$2"
1388 channel_name=$3
1389
1390 if [ -z $channel_name ]; then
1391 # default channel if none specified
1392 chan=""
1393 else
1394 chan="-c $channel_name"
1395 fi
1396
1397 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1398 ok $? "Enable Python event $event_name for session $sess_name"
1399}
1400
1401function enable_python_lttng_event_loglevel()
1402{
1403 local sess_name=$1
1404 local event_name="$2"
1405 local loglevel=$3
1406 local channel_name=$4
1407
1408 if [ -z $channel_name ]; then
1409 # default channel if none specified
1410 chan=""
1411 else
1412 chan="-c $channel_name"
1413 fi
1414
1415 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel $loglevel "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1416 ok $? "Enable Python event $event_name for session $sess_name with loglevel $loglevel"
1417}
1418
1419function enable_ust_lttng_event_filter()
1420{
1421 local sess_name="$1"
1422 local event_name="$2"
1423 local filter="$3"
1424 local channel_name=$4
1425
1426 if [ -z $channel_name ]; then
1427 # default channel if none specified
1428 chan=""
1429 else
1430 chan="-c $channel_name"
1431 fi
1432
1433 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $chan "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1434 ok $? "Enable event $event_name with filtering for session $sess_name"
1435}
1436
1437function enable_ust_lttng_event_loglevel()
1438{
1439 local sess_name="$1"
1440 local event_name="$2"
1441 local loglevel="$3"
1442
1443 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --loglevel $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1444 ok $? "Enable event $event_name with loglevel $loglevel"
1445}
1446
1447function enable_ust_lttng_event_loglevel_only()
1448{
1449 local sess_name="$1"
1450 local event_name="$2"
1451 local loglevel="$3"
1452
1453 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --loglevel-only $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1454 ok $? "Enable event $event_name with loglevel-only $loglevel"
1455}
1456
1457function disable_ust_lttng_event ()
1458{
1459 local sess_name="$1"
1460 local event_name="$2"
1461 local channel_name="$3"
1462
1463 if [ -z $channel_name ]; then
1464 # default channel if none specified
1465 chan=""
1466 else
1467 chan="-c $channel_name"
1468 fi
1469
1470 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name $chan -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1471 ok $? "Disable event $event_name for session $sess_name"
1472}
1473
1474function disable_jul_lttng_event ()
1475{
1476 local sess_name="$1"
1477 local event_name="$2"
1478
1479 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name -j >/dev/null 2>&1
1480 ok $? "Disable JUL event $event_name for session $sess_name"
1481}
1482
1483function disable_log4j_lttng_event ()
1484{
1485 local sess_name="$1"
1486 local event_name="$2"
1487
1488 _run_lttng_cmd "$OUTPUT_DEST" "$ERROR_OUTPUT_DEST" \
1489 disable-event "$event_name" -s "$sess_name" --log4j
1490 ok $? "Disable LOG4J event '$event_name' for session '$sess_name'"
1491}
1492
1493function disable_python_lttng_event ()
1494{
1495 local sess_name="$1"
1496 local event_name="$2"
1497
1498 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1499 ok $? "Disable Python event $event_name for session $sess_name"
1500}
1501
1502function start_lttng_tracing_opt ()
1503{
1504 local withtap=$1
1505 local expected_to_fail=$2
1506 local sess_name=$3
1507
1508 $TESTDIR/../src/bin/lttng/$LTTNG_BIN start $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1509 ret=$?
1510 if [[ $expected_to_fail -eq "1" ]]; then
1511 test "$ret" -ne "0"
1512 ret=$?
1513 if [ $withtap -eq "1" ]; then
1514 ok $? "Start tracing for session $sess_name failed as expected"
1515 fi
1516 else
1517 if [ $withtap -eq "1" ]; then
1518 ok $ret "Start tracing for session $sess_name"
1519 fi
1520 fi
1521}
1522
1523function start_lttng_tracing_ok ()
1524{
1525 start_lttng_tracing_opt 1 0 "$@"
1526}
1527
1528function start_lttng_tracing_fail ()
1529{
1530 start_lttng_tracing_opt 1 1 "$@"
1531}
1532
1533function start_lttng_tracing_notap ()
1534{
1535 start_lttng_tracing_opt 0 1 "$@"
1536}
1537
1538function stop_lttng_tracing_opt ()
1539{
1540 local withtap=$1
1541 local expected_to_fail=$2
1542 local sess_name=$3
1543
1544 $TESTDIR/../src/bin/lttng/$LTTNG_BIN stop $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1545 ret=$?
1546 if [[ $expected_to_fail -eq "1" ]]; then
1547 test "$ret" -ne "0"
1548 ret=$?
1549 if [ $withtap -eq "1" ]; then
1550 ok $? "Stop lttng tracing for session $sess_name failed as expected"
1551 fi
1552 else
1553 if [ $withtap -eq "1" ]; then
1554 ok $ret "Stop lttng tracing for session $sess_name"
1555 fi
1556 fi
1557}
1558
1559function stop_lttng_tracing_ok ()
1560{
1561 stop_lttng_tracing_opt 1 0 "$@"
1562}
1563
1564function stop_lttng_tracing_fail ()
1565{
1566 stop_lttng_tracing_opt 1 1 "$@"
1567}
1568
1569function stop_lttng_tracing_notap ()
1570{
1571 stop_lttng_tracing_opt 0 0 "$@"
1572}
1573
1574function destroy_lttng_session ()
1575{
1576 local withtap=$1
1577 local expected_to_fail=$2
1578 local sess_name=$3
1579
1580 $TESTDIR/../src/bin/lttng/$LTTNG_BIN destroy $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1581 ret=$?
1582 if [[ $expected_to_fail -eq "1" ]]; then
1583 test "$ret" -ne "0"
1584 ret=$?
1585 if [ $withtap -eq "1" ]; then
1586 ok $ret "Destroy session $sess_name failed as expected"
1587 fi
1588 else
1589 if [ $withtap -eq "1" ]; then
1590 ok $ret "Destroy session $sess_name"
1591 fi
1592 fi
1593}
1594
1595function destroy_lttng_session_ok ()
1596{
1597 destroy_lttng_session 1 0 "$@"
1598
1599}
1600
1601function destroy_lttng_session_fail ()
1602{
1603 destroy_lttng_session 1 1 "$@"
1604}
1605
1606function destroy_lttng_session_notap ()
1607{
1608 destroy_lttng_session 0 0 "$@"
1609}
1610
1611function destroy_lttng_sessions ()
1612{
1613 $TESTDIR/../src/bin/lttng/$LTTNG_BIN destroy --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1614 ok $? "Destroy all lttng sessions"
1615}
1616
1617function lttng_snapshot_add_output ()
1618{
1619 local expected_to_fail=$1
1620 local sess_name=$2
1621 local trace_path=$3
1622 local opts=$4
1623
1624 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot add-output -s $sess_name $trace_path $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1625 ret=$?
1626 if [[ $expected_to_fail -eq 1 ]]; then
1627 test "$ret" -ne "0"
1628 ok $? "Added snapshot output $trace_path failed as expected"
1629 else
1630 ok $ret "Added snapshot output $trace_path"
1631 fi
1632}
1633
1634function lttng_snapshot_add_output_ok ()
1635{
1636 lttng_snapshot_add_output 0 "$@"
1637}
1638
1639function lttng_snapshot_add_output_fail ()
1640{
1641 lttng_snapshot_add_output 1 "$@"
1642}
1643
1644function lttng_snapshot_del_output ()
1645{
1646 local expected_to_fail=$1
1647 local sess_name=$2
1648 local id=$3
1649
1650 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot del-output -s $sess_name $id 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1651 ret=$?
1652 if [[ $expected_to_fail -eq "1" ]]; then
1653 test "$ret" -ne "0"
1654 ok $? "Deleted snapshot output id $id failed as expected"
1655 else
1656 ok $ret "Deleted snapshot output id $id"
1657 fi
1658}
1659
1660function lttng_snapshot_del_output_ok ()
1661{
1662 lttng_snapshot_del_output 0 "$@"
1663}
1664
1665function lttng_snapshot_del_output_fail ()
1666{
1667 lttng_snapshot_del_output 1 "$@"
1668}
1669
1670function lttng_snapshot_record ()
1671{
1672 local sess_name=$1
1673 local trace_path=$2
1674
1675 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s "$sess_name" "$trace_path" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1676 ok $? "Snapshot recorded"
1677}
1678
1679function lttng_snapshot_list ()
1680{
1681 local sess_name=$1
1682 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot list-output -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1683 ok $? "Snapshot list"
1684}
1685
1686function lttng_save()
1687{
1688 local sess_name=$1
1689 local opts=$2
1690
1691 $TESTDIR/../src/bin/lttng/$LTTNG_BIN save $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1692 ok $? "Session saved"
1693}
1694
1695function lttng_load()
1696{
1697 local expected_to_fail=$1
1698 local opts=$2
1699
1700 $TESTDIR/../src/bin/lttng/$LTTNG_BIN load $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1701 ret=$?
1702 if [[ $expected_to_fail -eq "1" ]]; then
1703 test $ret -ne "0"
1704 ok $? "Load command failed as expected with opts: $opts"
1705 else
1706 ok $ret "Load command with opts: $opts"
1707 fi
1708}
1709
1710function lttng_load_ok()
1711{
1712 lttng_load 0 "$@"
1713}
1714
1715function lttng_load_fail()
1716{
1717 lttng_load 1 "$@"
1718}
1719
1720function lttng_track()
1721{
1722 local expected_to_fail="$1"
1723 shift 1
1724 local opts="$@"
1725 $TESTDIR/../src/bin/lttng/$LTTNG_BIN track $opts >$OUTPUT_DEST
1726 ret=$?
1727 if [[ $expected_to_fail -eq "1" ]]; then
1728 test $ret -ne "0"
1729 ok $? "Track command failed as expected with opts: $opts"
1730 else
1731 ok $ret "Track command with opts: $opts"
1732 fi
1733}
1734
1735function lttng_track_ok()
1736{
1737 lttng_track 0 "$@"
1738}
1739
1740function lttng_track_fail()
1741{
1742 lttng_track 1 "$@"
1743}
1744
1745function lttng_untrack()
1746{
1747 local expected_to_fail="$1"
1748 shift 1
1749 local opts="$@"
1750 $TESTDIR/../src/bin/lttng/$LTTNG_BIN untrack $opts >$OUTPUT_DEST
1751 ret=$?
1752 if [[ $expected_to_fail -eq "1" ]]; then
1753 test $ret -ne "0"
1754 ok $? "Untrack command failed as expected with opts: $opts"
1755 else
1756 ok $ret "Untrack command with opts: $opts"
1757 fi
1758}
1759
1760function lttng_untrack_ok()
1761{
1762 lttng_untrack 0 "$@"
1763}
1764
1765function lttng_untrack_fail()
1766{
1767 lttng_untrack 1 "$@"
1768}
1769
1770function lttng_track_pid_ok()
1771{
1772 PID=$1
1773 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" track --kernel --pid=$PID 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1774 ok $? "Lttng track pid on the kernel domain"
1775}
1776
1777function lttng_untrack_kernel_all_ok()
1778{
1779 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" untrack --kernel --pid --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1780 ok $? "Lttng untrack all pid on the kernel domain"
1781}
1782
1783function lttng_track_ust_ok()
1784{
1785 lttng_track_ok -u "$@"
1786}
1787
1788function lttng_track_ust_fail()
1789{
1790 lttng_track_fail -u "$@"
1791}
1792
1793function lttng_track_kernel_ok()
1794{
1795 lttng_track_ok -k "$@"
1796}
1797
1798function lttng_track_kernel_fail()
1799{
1800 lttng_track_fail -k "$@"
1801}
1802
1803function lttng_untrack_ust_ok()
1804{
1805 lttng_untrack_ok -u "$@"
1806}
1807
1808function lttng_untrack_ust_fail()
1809{
1810 lttng_untrack_fail -u "$@"
1811}
1812
1813function lttng_untrack_kernel_ok()
1814{
1815 lttng_untrack_ok -k "$@"
1816}
1817
1818function lttng_untrack_kernel_fail()
1819{
1820 lttng_untrack_fail -k "$@"
1821}
1822
1823function lttng_add_context_list()
1824{
1825 $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-context --list 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1826 ret=$?
1827 ok $ret "Context listing"
1828}
1829
1830function add_context_lttng()
1831{
1832 local expected_to_fail="$1"
1833 local domain="$2"
1834 local session_name="$3"
1835 local channel_name="$4"
1836 local type="$5"
1837
1838 $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-context -s $session_name -c $channel_name -t $type $domain 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1839 ret=$?
1840 if [[ $expected_to_fail -eq "1" ]]; then
1841 test $ret -ne "0"
1842 ok $? "Add context command failed as expected for type: $type"
1843 else
1844 ok $ret "Add context command for type: $type"
1845 fi
1846}
1847
1848function add_context_ust_ok()
1849{
1850 add_context_lttng 0 -u "$@"
1851}
1852
1853function add_context_ust_fail()
1854{
1855 add_context_lttng 1 -u "$@"
1856}
1857
1858function add_context_kernel_ok()
1859{
1860 add_context_lttng 0 -k "$@"
1861}
1862
1863function add_context_kernel_fail()
1864{
1865 add_context_lttng 1 -k "$@"
1866}
1867
1868function wait_live_trace_ready ()
1869{
1870 local url=$1
1871 local zero_client_match=0
1872
1873 diag "Waiting for live trace at url: $url"
1874 while [ $zero_client_match -eq 0 ]; do
1875 zero_client_match=$($BABELTRACE_BIN -i lttng-live $url | grep "0 client(s) connected" | wc -l)
1876 sleep 0.5
1877 done
1878 pass "Waiting for live trace at url: $url"
1879}
1880
1881function wait_live_viewer_connect ()
1882{
1883 local url=$1
1884 local one_client_match=0
1885
1886 diag "Waiting for live viewers on url: $url"
1887 while [ $one_client_match -eq 0 ]; do
1888 one_client_match=$($BABELTRACE_BIN -i lttng-live $url | grep "1 client(s) connected" | wc -l)
1889 sleep 0.5
1890 done
1891 pass "Waiting for live viewers on url: $url"
1892}
1893
1894function bail_out_if_no_babeltrace()
1895{
1896 which "$BABELTRACE_BIN" >/dev/null
1897 if [ $? -ne 0 ]; then
1898 LTTNG_BAIL_OUT "\"$BABELTRACE_BIN\" binary not found. Skipping tests"
1899 fi
1900}
1901
1902function validate_metadata_event ()
1903{
1904 local event_name=$1
1905 local nr_event_id=$2
1906 local trace_path=$3
1907
1908 local metadata_file=$(find $trace_path -name "metadata")
1909 local metadata_path=$(dirname $metadata_file)
1910
1911 which $BABELTRACE_BIN >/dev/null
1912 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1913
1914 local count=$($BABELTRACE_BIN --output-format=ctf-metadata $metadata_path | grep $event_name | wc -l)
1915
1916 if [ "$count" -ne "$nr_event_id" ]; then
1917 fail "Metadata match with the metadata of $count event(s) named $event_name"
1918 diag "$count matching event id found in metadata"
1919 else
1920 pass "Metadata match with the metadata of $count event(s) named $event_name"
1921 fi
1922
1923}
1924
1925function trace_matches ()
1926{
1927 local event_name=$1
1928 local nr_iter=$2
1929 local trace_path=$3
1930
1931 which $BABELTRACE_BIN >/dev/null
1932 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1933
1934 local count=$($BABELTRACE_BIN $trace_path | grep $event_name | wc -l)
1935
1936 if [ "$count" -ne "$nr_iter" ]; then
1937 fail "Trace match"
1938 diag "$count matching events found in trace"
1939 else
1940 pass "Trace match"
1941 fi
1942}
1943
1944function trace_match_only()
1945{
1946 local event_name=$1
1947 local nr_iter=$2
1948 local trace_path=$3
1949
1950 which $BABELTRACE_BIN >/dev/null
1951 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1952
1953 local count=$($BABELTRACE_BIN $trace_path | grep $event_name | wc -l)
1954 local total=$($BABELTRACE_BIN $trace_path | wc -l)
1955
1956 if [ "$nr_iter" -eq "$count" ] && [ "$total" -eq "$nr_iter" ]; then
1957 pass "Trace match with $total event $event_name"
1958 else
1959 fail "Trace match"
1960 diag "$total event(s) found, expecting $nr_iter of event $event_name and only found $count"
1961 fi
1962}
1963
1964function validate_trace
1965{
1966 local event_name=$1
1967 local trace_path=$2
1968
1969 which $BABELTRACE_BIN >/dev/null
1970 if [ $? -ne 0 ]; then
1971 skip 0 "Babeltrace binary not found. Skipping trace validation"
1972 fi
1973
1974 OLDIFS=$IFS
1975 IFS=","
1976 for i in $event_name; do
1977 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
1978 if [ "$traced" -ne 0 ]; then
1979 pass "Validate trace for event $i, $traced events"
1980 else
1981 fail "Validate trace for event $i"
1982 diag "Found $traced occurrences of $i"
1983 fi
1984 done
1985 ret=$?
1986 IFS=$OLDIFS
1987 return $ret
1988}
1989
1990function validate_trace_count
1991{
1992 local event_name=$1
1993 local trace_path=$2
1994 local expected_count=$3
1995
1996 which $BABELTRACE_BIN >/dev/null
1997 if [ $? -ne 0 ]; then
1998 skip 0 "Babeltrace binary not found. Skipping trace validation"
1999 fi
2000
2001 cnt=0
2002 OLDIFS=$IFS
2003 IFS=","
2004 for i in $event_name; do
2005 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
2006 if [ "$traced" -ne 0 ]; then
2007 pass "Validate trace for event $i, $traced events"
2008 else
2009 fail "Validate trace for event $i"
2010 diag "Found $traced occurrences of $i"
2011 fi
2012 cnt=$(($cnt + $traced))
2013 done
2014 IFS=$OLDIFS
2015 test $cnt -eq $expected_count
2016 ok $? "Read a total of $cnt events, expected $expected_count"
2017}
2018
2019function validate_trace_count_range_incl_min_excl_max
2020{
2021 local event_name=$1
2022 local trace_path=$2
2023 local expected_min=$3
2024 local expected_max=$4
2025
2026 which $BABELTRACE_BIN >/dev/null
2027 if [ $? -ne 0 ]; then
2028 skip 0 "Babeltrace binary not found. Skipping trace validation"
2029 fi
2030
2031 cnt=0
2032 OLDIFS=$IFS
2033 IFS=","
2034 for i in $event_name; do
2035 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
2036 if [ "$traced" -ge $expected_min ]; then
2037 pass "Validate trace for event $i, $traced events"
2038 else
2039 fail "Validate trace for event $i"
2040 diag "Found $traced occurrences of $i"
2041 fi
2042 cnt=$(($cnt + $traced))
2043 done
2044 IFS=$OLDIFS
2045 test $cnt -lt $expected_max
2046 ok $? "Read a total of $cnt events, expected between [$expected_min, $expected_max["
2047}
2048
2049function trace_first_line
2050{
2051 local trace_path=$1
2052
2053 which $BABELTRACE_BIN >/dev/null
2054 if [ $? -ne 0 ]; then
2055 skip 0 "Babeltrace binary not found. Skipping trace validation"
2056 fi
2057
2058 $BABELTRACE_BIN $trace_path 2>/dev/null | head -n 1
2059}
2060
2061function validate_trace_exp()
2062{
2063 local event_exp=$1
2064 local trace_path=$2
2065
2066 which $BABELTRACE_BIN >/dev/null
2067 skip $? -ne 0 "Babeltrace binary not found. Skipping trace validation"
2068
2069 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep --extended-regexp ${event_exp} | wc -l)
2070 if [ "$traced" -ne 0 ]; then
2071 pass "Validate trace for expression '${event_exp}', $traced events"
2072 else
2073 fail "Validate trace for expression '${event_exp}'"
2074 diag "Found $traced occurrences of '${event_exp}'"
2075 fi
2076 ret=$?
2077 return $ret
2078}
2079
2080function validate_trace_only_exp()
2081{
2082 local event_exp=$1
2083 local trace_path=$2
2084
2085 which $BABELTRACE_BIN >/dev/null
2086 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
2087
2088 local count=$($BABELTRACE_BIN $trace_path | grep --extended-regexp ${event_exp} | wc -l)
2089 local total=$($BABELTRACE_BIN $trace_path | wc -l)
2090
2091 if [ "$count" -ne 0 ] && [ "$total" -eq "$count" ]; then
2092 pass "Trace match with $total for expression '${event_exp}'"
2093 else
2094 fail "Trace match"
2095 diag "$total syscall event(s) found, only syscalls matching expression '${event_exp}' ($count occurrences) are expected"
2096 fi
2097 ret=$?
2098 return $ret
2099}
2100
2101function validate_trace_empty()
2102{
2103 local trace_path=$1
2104
2105 which $BABELTRACE_BIN >/dev/null
2106 if [ $? -ne 0 ]; then
2107 skip 0 "Babeltrace binary not found. Skipping trace validation"
2108 fi
2109
2110 events=$($BABELTRACE_BIN $trace_path 2>/dev/null)
2111 ret=$?
2112 if [ $ret -ne 0 ]; then
2113 fail "Failed to parse trace"
2114 return $ret
2115 fi
2116
2117 traced=$(echo -n "$events" | wc -l)
2118 if [ "$traced" -eq 0 ]; then
2119 pass "Validate empty trace"
2120 else
2121 fail "Validate empty trace"
2122 diag "Found $traced events in trace"
2123 fi
2124 ret=$?
2125 return $ret
2126}
2127
2128function validate_directory_empty ()
2129{
2130 local trace_path="$1"
2131
2132 # Do not double quote `$trace_path` below as we want wildcards to be
2133 # expanded.
2134 files="$(ls -A $trace_path)"
2135 ret=$?
2136 if [ $ret -ne 0 ]; then
2137 fail "Failed to list content of directory \"$trace_path\""
2138 return $ret
2139 fi
2140
2141 nb_files="$(echo -n "$files" | wc -l)"
2142 ok $nb_files "Directory \"$trace_path\" is empty"
2143}
2144
2145function validate_trace_session_ust_empty()
2146{
2147 validate_directory_empty "$1"/ust
2148}
2149
2150function validate_trace_session_kernel_empty()
2151{
2152 validate_trace_empty "$1"/kernel
2153}
2154
2155function regenerate_metadata ()
2156{
2157 local expected_to_fail=$1
2158 local sess_name=$2
2159
2160 $TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate metadata -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2161 ret=$?
2162 if [[ $expected_to_fail -eq "1" ]]; then
2163 test "$ret" -ne "0"
2164 ok $? "Expected fail on regenerate metadata $sess_name"
2165 else
2166 ok $ret "Metadata regenerate $sess_name"
2167 fi
2168}
2169
2170function regenerate_metadata_ok ()
2171{
2172 regenerate_metadata 0 "$@"
2173}
2174
2175function regenerate_metadata_fail ()
2176{
2177 regenerate_metadata 1 "$@"
2178}
2179
2180function regenerate_statedump ()
2181{
2182 local expected_to_fail=$1
2183 local sess_name=$2
2184
2185 $TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate statedump -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2186 ret=$?
2187 if [[ $expected_to_fail -eq "1" ]]; then
2188 test "$ret" -ne "0"
2189 ok $? "Expected fail on regenerate statedump $sess_name"
2190 else
2191 ok $ret "Statedump regenerate $sess_name"
2192 fi
2193}
2194
2195function regenerate_statedump_ok ()
2196{
2197 regenerate_statedump 0 "$@"
2198}
2199
2200function regenerate_statedump_fail ()
2201{
2202 regenerate_statedump 1 "$@"
2203}
2204
2205function rotate_session ()
2206{
2207 local expected_to_fail=$1
2208 local sess_name=$2
2209
2210 $TESTDIR/../src/bin/lttng/$LTTNG_BIN rotate $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2211 ret=$?
2212 if [[ $expected_to_fail -eq "1" ]]; then
2213 test "$ret" -ne "0"
2214 ok $? "Expected fail on rotate session $sess_name"
2215 else
2216 ok $ret "Rotate session $sess_name"
2217 fi
2218}
2219
2220function rotate_session_ok ()
2221{
2222 rotate_session 0 "$@"
2223}
2224
2225function rotate_session_fail ()
2226{
2227 rotate_session 1 "$@"
2228}
2229
2230function destructive_tests_enabled ()
2231{
2232 if [ "$LTTNG_ENABLE_DESTRUCTIVE_TESTS" = "will-break-my-system" ]; then
2233 return 0
2234 else
2235 return 1
2236 fi
2237}
2238
2239function lttng_enable_rotation_timer ()
2240{
2241 local expected_to_fail=$1
2242 local sess_name=$2
2243 local period=$3
2244
2245 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-rotation -s $sess_name --timer $period 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2246 ret=$?
2247 if [[ $expected_to_fail -eq "1" ]]; then
2248 test "$ret" -ne "0"
2249 ok $? "Expected fail when setting periodic rotation ($period) of session $sess_name"
2250 else
2251 ok $ret "Set periodic rotation ($period) of session $sess_name"
2252 fi
2253}
2254
2255function lttng_enable_rotation_timer_ok ()
2256{
2257 lttng_enable_rotation_timer 0 $@
2258}
2259
2260function lttng_enable_rotation_timer_fail ()
2261{
2262 lttng_enable_rotation_timer 1 $@
2263}
2264
2265function lttng_enable_rotation_size ()
2266{
2267 local expected_to_fail=$1
2268 local sess_name=$2
2269 local size=$3
2270
2271 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-rotation -s $sess_name --size $size 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2272 ret=$?
2273 if [[ $expected_to_fail -eq "1" ]]; then
2274 test "$ret" -ne "0"
2275 ok $? "Expected fail on rotate session $sess_name"
2276 else
2277 ok $ret "Rotate session $sess_name"
2278 fi
2279}
2280
2281function lttng_enable_rotation_size_ok ()
2282{
2283 lttng_enable_rotation_size 0 $@
2284}
2285
2286function lttng_enable_rotation_size_fail ()
2287{
2288 lttng_enable_rotation_size 1 $@
2289}
2290
2291function lttng_clear_session ()
2292{
2293 local expected_to_fail=$1
2294 local sess_name=$2
2295
2296 $TESTDIR/../src/bin/lttng/$LTTNG_BIN clear $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2297 ret=$?
2298 if [[ $expected_to_fail -eq "1" ]]; then
2299 test "$ret" -ne "0"
2300 ok $? "Expected fail on clear session $sess_name"
2301 else
2302 ok $ret "Clear session $sess_name"
2303 fi
2304}
2305
2306function lttng_clear_session_ok ()
2307{
2308 lttng_clear_session 0 $@
2309}
2310
2311function lttng_clear_session_fail ()
2312{
2313 lttng_clear_session 1 $@
2314}
2315
2316function lttng_clear_all ()
2317{
2318 $TESTDIR/../src/bin/lttng/$LTTNG_BIN clear --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
2319 ok $? "Clear all lttng sessions"
2320}
2321
2322function lttng_add_trigger()
2323{
2324 local expected_to_fail="$1"
2325 local trigger_name="$2"
2326 shift 2
2327 local args=("$@")
2328
2329 diag "$TESTDIR/../src/bin/lttng/$LTTNG_BIN add-trigger --name $trigger_name ${args[*]}"
2330 $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-trigger --name "$trigger_name" "${args[@]}" 1> /dev/null 2> /dev/null
2331 ret=$?
2332 if [[ $expected_to_fail -eq "1" ]]; then
2333 test "$ret" -ne "0"
2334 ok $? "Add trigger $trigger_name failed as expected"
2335 else
2336 ok $ret "Add trigger $trigger_name"
2337 fi
2338}
2339
2340function lttng_remove_trigger()
2341{
2342 local expected_to_fail="$1"
2343 local trigger_name="$2"
2344 shift 2
2345
2346 diag "$TESTDIR/../src/bin/lttng/$LTTNG_BIN remove-trigger $trigger_name $*"
2347 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" remove-trigger "$trigger_name" "$@" 1> /dev/null 2> /dev/null
2348 ret=$?
2349 if [[ $expected_to_fail -eq "1" ]]; then
2350 test "$ret" -ne "0"
2351 ok $? "Remove trigger $trigger_name failed as expected"
2352 else
2353 ok $ret "Remove trigger $trigger_name"
2354 fi
2355}
2356
2357function lttng_add_trigger_ok()
2358{
2359 lttng_add_trigger 0 "$@"
2360}
2361
2362function lttng_add_trigger_fail()
2363{
2364 lttng_add_trigger 1 "$@"
2365}
2366
2367function lttng_remove_trigger_ok()
2368{
2369 lttng_remove_trigger 0 "$@"
2370}
2371
2372function list_triggers_matches_ok ()
2373{
2374 local tmp_stdout=$(mktemp --tmpdir -t "tmp.${FUNCNAME[0]}_stdout.XXXXXX")
2375 local tmp_stderr=$(mktemp --tmpdir -t "tmp.${FUNCNAME[0]}_stderr.XXXXXX")
2376
2377 local test_name="$1"
2378 local expected_stdout_file="$2"
2379
2380 diag "$TESTDIR/../src/bin/lttng/$LTTNG_BIN list-triggers"
2381
2382 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" list-triggers > "${tmp_stdout}" 2> "${tmp_stderr}"
2383 ok $? "${test_name}: exit code is 0"
2384
2385 diff -u "${expected_stdout_file}" "${tmp_stdout}"
2386 ok $? "${test_name}: expected stdout"
2387
2388 diff -u /dev/null "${tmp_stderr}"
2389 ok $? "${test_name}: expected stderr"
2390
2391 rm -f "${tmp_stdout}"
2392 rm -f "${tmp_stderr}"
2393}
2394
2395function list_triggers_matches_mi_ok ()
2396{
2397 local tmp_stdout
2398 local tmp_stdout_raw
2399 local tmp_stderr
2400
2401 local test_name="$1"
2402 local expected_stdout_file="$2"
2403
2404 tmp_stdout_raw=$(mktemp --tmpdir -t "tmp.${FUNCNAME[0]}_stdout.XXXXXX")
2405 tmp_stdout=$(mktemp --tmpdir -t "tmp.${FUNCNAME[0]}_stdout.XXXXXX")
2406 tmp_stderr=$(mktemp --tmpdir -t "tmp.${FUNCNAME[0]}_stderr.XXXXXX")
2407
2408 diag "$TESTDIR/../src/bin/lttng/$LTTNG_BIN --mi xml list-triggers"
2409
2410 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" --mi=xml list-triggers > "${tmp_stdout_raw}" 2> "${tmp_stderr}"
2411 ok $? "${test_name}: exit code is 0"
2412
2413 # Pretty-fy xml before further test.
2414 $XML_PRETTY < "${tmp_stdout_raw}" > "${tmp_stdout}"
2415
2416 $MI_VALIDATE "${tmp_stdout}"
2417 ok $? "list-trigger mi is valid"
2418
2419 diff -u "${expected_stdout_file}" "${tmp_stdout}"
2420 ok $? "${test_name}: expected stdout"
2421
2422 diff -u /dev/null "${tmp_stderr}"
2423 ok $? "${test_name}: expected stderr"
2424
2425 rm -f "${tmp_stdout}"
2426 rm -f "${tmp_stdout_raw}"
2427 rm -f "${tmp_stderr}"
2428}
2429
2430function validate_path_pattern ()
2431{
2432 local message=$1
2433 local pattern=$2
2434 # Base path is only used in error case and is used to list the content
2435 # of the base path.
2436 local base_path=$3
2437
2438
2439 [ -f $pattern ]
2440 ret=$?
2441 ok $ret "$message"
2442
2443 if [ "$ret" -ne "0" ]; then
2444 diag "Path pattern expected: $pattern"
2445 # List the tracepath for more info. We use find as a recursive
2446 # directory lister.
2447 diag "The base path content:"
2448 find "$base_path" -print
2449 fi
2450}
2451
2452function validate_trace_path_ust_uid ()
2453{
2454 local trace_path=$1
2455 local session_name=$2
2456 local uid=$UID
2457 local pattern="$trace_path/$session_name-$date_time_pattern/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2458
2459 validate_path_pattern "UST per-uid trace path is valid" "$pattern" "$trace_path"
2460}
2461
2462function validate_trace_path_ust_uid_network ()
2463{
2464 local trace_path=$1
2465 local session_name=$2
2466 local base_path=$3
2467 local uid=$UID
2468 local hostname=$HOSTNAME
2469 local pattern
2470 local ret
2471
2472 # If the session was given a network base path (e.g
2473 # 127.0.0.1/my/custom/path on creation, there is no session name
2474 # component to the path on the relayd side. Caller can simply not pass a
2475 # session name for this scenario.
2476 if [ -n "$session_name" ]; then
2477 session_name="$session_name-$date_time_pattern"
2478 if [ -n "$base_path" ]; then
2479 fail "Session name and base path are mutually exclusive"
2480 return
2481 fi
2482 fi
2483
2484 pattern="$trace_path/$hostname/$base_path/$session_name/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2485
2486 validate_path_pattern "UST per-uid network trace path is valid" "$pattern" "$trace_path"
2487}
2488
2489function validate_trace_path_ust_uid_snapshot_network ()
2490{
2491 local trace_path=$1
2492 local session_name=$2
2493 local snapshot_name=$3
2494 local snapshot_number=$4
2495 local base_path=$5
2496 local hostname=$HOSTNAME
2497 local uid=$UID
2498 local pattern
2499 local ret
2500
2501 # If the session/output was given a network base path (e.g
2502 # 127.0.0.1/my/custom/path on creation, there is no session name
2503 # component to the path on the relayd side. Caller can simply not pass a
2504 # session name for this scenario.
2505 if [ -n "$session_name" ]; then
2506 session_name="$session_name-$date_time_pattern"
2507 if [ -n "$base_path" ]; then
2508 fail "Session name and base path are mutually exclusive"
2509 return
2510 fi
2511 fi
2512
2513 pattern="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2514
2515 validate_path_pattern "UST per-uid network snapshot trace path is valid" "$pattern" "$trace_path"
2516}
2517
2518function validate_trace_path_ust_uid_snapshot ()
2519{
2520 local trace_path=$1
2521 local session_name=$2
2522 local snapshot_name=$3
2523 local snapshot_number=$4
2524 local base_path=$5
2525 local uid=$UID
2526 local pattern
2527 local ret
2528
2529 # If the session/output was given a network base path (e.g
2530 # 127.0.0.1/my/custom/path) on creation, there is no session name
2531 # component to the path on the relayd side. Caller can simply not pass a
2532 # session name for this scenario.
2533 if [ -n "$session_name" ]; then
2534 session_name="$session_name-$date_time_pattern"
2535 if [ -n "$base_path" ]; then
2536 fail "Session name and base path are mutually exclusive"
2537 return
2538 fi
2539 fi
2540
2541 pattern="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
2542
2543 validate_path_pattern "UST per-uid snapshot trace path is valid" "$pattern" "$trace_path"
2544}
2545
2546function validate_trace_path_ust_pid ()
2547{
2548 local trace_path=$1
2549 local session_name=$2
2550 local app_string=$3
2551 local pid=$4
2552 local pattern
2553 local ret
2554
2555 # If the session was given a trace path on creation, there is no session
2556 # name component to the path. Caller can simply not pass a session name
2557 # for this scenario.
2558 if [ -n "$session_name" ]; then
2559 session_name="$session_name-$date_time_pattern"
2560 fi
2561
2562 pattern="$trace_path/$session_name/ust/pid/$pid/$app_string-*-$date_time_pattern/metadata"
2563
2564 validate_path_pattern "UST per-pid trace path is valid" "$pattern" "$trace_path"
2565}
2566
2567function validate_trace_path_kernel ()
2568{
2569 local trace_path=$1
2570 local session_name=$2
2571 local pattern
2572
2573 # If the session was given a trace path on creation, there is no session
2574 # name component to the path. Caller can simply not pass a session name
2575 # for this scenario.
2576 if [ -n "$session_name" ]; then
2577 session_name="$session_name-$date_time_pattern"
2578 fi
2579
2580 pattern="$trace_path/$session_name/kernel/metadata"
2581
2582 validate_path_pattern "Kernel trace path is valid" "$pattern" "$trace_path"
2583}
2584
2585function validate_trace_path_kernel_network ()
2586{
2587 local trace_path=$1
2588 local session_name=$2
2589 local hostname=$HOSTNAME
2590 local pattern="$trace_path/$hostname/$session_name-$date_time_pattern/kernel/metadata"
2591
2592 validate_path_pattern "Kernel network trace path is valid" "$pattern" "$trace_path"
2593}
2594
2595function validate_trace_path_kernel_snapshot ()
2596{
2597 local trace_path=$1
2598 local session_name=$2
2599 local snapshot_name=$3
2600 local snapshot_number=$4
2601 local base_path=$5
2602 local pattern
2603 local ret
2604
2605 # If the session/output was given a network base path (e.g
2606 # 127.0.0.1/my/custom/path on creation, there is no session name
2607 # component to the path on the relayd side. Caller can simply not pass a
2608 # session name for this scenario.
2609 if [ -n "$session_name" ]; then
2610 session_name="$session_name-$date_time_pattern"
2611 if [ -n "$base_path" ]; then
2612 fail "Session name and base path are mutually exclusive"
2613 return
2614 fi
2615 fi
2616
2617 pattern="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
2618
2619 validate_path_pattern "Kernel snapshot trace path is valid" "$pattern" "$trace_path"
2620}
2621
2622function validate_trace_path_kernel_snapshot_network ()
2623{
2624 local trace_path=$1
2625 local session_name=$2
2626 local snapshot_name=$3
2627 local snapshot_number=$4
2628 local base_path=$5
2629 local hostname=$HOSTNAME
2630 local pattern
2631 local ret
2632
2633 # If the session/output was given a network base path (e.g
2634 # 127.0.0.1/my/custom/path on creation, there is no session name
2635 # component to the path on the relayd side. Caller can simply not pass a
2636 # session name for this scenario.
2637 if [ -n "$session_name" ]; then
2638 session_name="$session_name-$date_time_pattern"
2639 if [ -n "$base_path" ]; then
2640 fail "Session name and base path are mutually exclusive"
2641 return
2642 fi
2643 fi
2644
2645 pattern="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
2646
2647 validate_path_pattern "Kernel network snapshot trace path is valid" "$pattern" "$trace_path"
2648}
This page took 0.03169 seconds and 4 git commands to generate.