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