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