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