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