Add Log4j 2.x agent tests for the 'log4j' domain
[lttng-tools.git] / tests / utils / utils.sh
... / ...
CommitLineData
1# Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
2#
3# SPDX-License-Identifier: LGPL-2.1-only
4#
5
6SESSIOND_BIN="lttng-sessiond"
7SESSIOND_MATCH=".*lttng-sess.*"
8RUNAS_BIN="lttng-runas"
9RUNAS_MATCH=".*lttng-runas.*"
10CONSUMERD_BIN="lttng-consumerd"
11CONSUMERD_MATCH=".*lttng-consumerd.*"
12RELAYD_BIN="lttng-relayd"
13RELAYD_MATCH=".*lttng-relayd.*"
14LTTNG_BIN="lttng"
15BABELTRACE_BIN="babeltrace"
16OUTPUT_DEST=/dev/null
17ERROR_OUTPUT_DEST=/dev/null
18
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
24# Minimal kernel version supported for session daemon tests
25KERNEL_MAJOR_VERSION=2
26KERNEL_MINOR_VERSION=6
27KERNEL_PATCHLEVEL_VERSION=27
28
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.
32export LTTNG_UST_REGISTER_TIMEOUT=-1
33export LTTNG_NETWORK_SOCKET_TIMEOUT=-1
34export LTTNG_APP_SOCKET_TIMEOUT=-1
35
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
42source $TESTDIR/utils/tap/tap.sh
43
44if [ -z ${LTTNG_TEST_TEARDOWN_TIMEOUT+x} ]; then
45 LTTNG_TEST_TEARDOWN_TIMEOUT=60
46fi
47
48function full_cleanup ()
49{
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
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 -- -$$
64 exit 1
65}
66
67function null_pipes ()
68{
69 exec 0>/dev/null
70 exec 1>/dev/null
71 exec 2>/dev/null
72}
73
74trap full_cleanup SIGINT SIGTERM
75
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
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{
104 local desc="$1"
105 diag "$desc"
106}
107
108function validate_kernel_version ()
109{
110 local kern_version=($(uname -r | awk -F. '{ printf("%d.%d.%d\n",$1,$2,$3); }' | tr '.' '\n'))
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
123# Generate a random string
124# $1 = number of characters; defaults to 16
125# $2 = include special characters; 1 = yes, 0 = no; defaults to yes
126function randstring()
127{
128 [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
129 cat /dev/urandom 2>/dev/null | tr -cd "$CHAR" 2>/dev/null | head -c ${1:-16} 2>/dev/null
130 echo
131}
132
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
143# Check if base lttng-modules are present.
144# Bail out on failure
145function validate_lttng_modules_present ()
146{
147 # Check for loadable modules.
148 modprobe -n lttng-tracer 2>/dev/null
149 if [ $? -eq 0 ]; then
150 return 0
151 fi
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."
160}
161
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
176function enable_kernel_lttng_event
177{
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"
183
184 if [ -z "$event_name" ]; then
185 # Enable all event if no event name specified
186 event_name="-a"
187 fi
188
189 if [ -z "$channel_name" ]; then
190 # default channel if none specified
191 chan=""
192 else
193 chan="-c $channel_name"
194 fi
195
196 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
197 ret=$?
198 if [[ $expected_to_fail -eq "1" ]]; then
199 test $ret -ne "0"
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
204 else
205 if [ $withtap -eq "1" ]; then
206 ok $ret "Enable kernel event $event_name for session $sess_name"
207 fi
208 fi
209}
210
211function enable_kernel_lttng_event_ok ()
212{
213 enable_kernel_lttng_event 1 0 "$@"
214}
215
216function enable_kernel_lttng_event_fail ()
217{
218 enable_kernel_lttng_event 1 1 "$@"
219}
220
221function enable_kernel_lttng_event_notap ()
222{
223 enable_kernel_lttng_event 0 0 "$@"
224}
225
226# Old interface
227function lttng_enable_kernel_event
228{
229 enable_kernel_lttng_event_ok "$@"
230}
231
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
251 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
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{
263 lttng_enable_kernel_syscall 0 "$@"
264}
265
266function lttng_enable_kernel_syscall_fail()
267{
268 lttng_enable_kernel_syscall 1 "$@"
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
290 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event --syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
291
292 ret=$?
293 if [[ $expected_to_fail -eq "1" ]]; then
294 test $ret -ne "0"
295 ok $? "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name failed as expected"
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{
303 lttng_disable_kernel_syscall 0 "$@"
304}
305
306function lttng_disable_kernel_syscall_fail()
307{
308 lttng_disable_kernel_syscall 1 "$@"
309}
310
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}
346function lttng_enable_kernel_channel()
347{
348 local withtap=$1
349 local expected_to_fail=$2
350 local sess_name=$3
351 local channel_name=$4
352 local opts="${@:5}"
353
354 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -k $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
355 ret=$?
356 if [[ $expected_to_fail -eq "1" ]]; then
357 test "$ret" -ne "0"
358 ret=$?
359 if [ $withtap -eq "1" ]; then
360 ok $ret "Enable channel $channel_name for session $sess_name failed as expected"
361 fi
362 else
363 if [ $withtap -eq "1" ]; then
364 ok $ret "Enable channel $channel_name for session $sess_name"
365 fi
366 fi
367}
368
369function lttng_enable_kernel_channel_ok()
370{
371 lttng_enable_kernel_channel 1 0 "$@"
372}
373
374function lttng_enable_kernel_channel_fail()
375{
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 "$@"
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
395 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-channel -k $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
396 ret=$?
397 if [[ $expected_to_fail -eq "1" ]]; then
398 test "$ret" -ne "0"
399 ok $? "Disable channel $channel_name for session $sess_name failed as expected"
400 else
401 ok $ret "Disable channel $channel_name for session $sess_name"
402 fi
403}
404
405function lttng_disable_kernel_channel_ok()
406{
407 lttng_disable_kernel_channel 0 "$@"
408}
409
410function lttng_disable_kernel_channel_fail()
411{
412 lttng_disable_kernel_channel 1 "$@"
413}
414
415function start_lttng_relayd_opt()
416{
417 local withtap=$1
418 local process_mode=$2
419 local opt=$3
420
421 DIR=$(readlink -f "$TESTDIR")
422
423 if [ -z $(pgrep $RELAYD_MATCH) ]; then
424 # shellcheck disable=SC2086
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 &
427 if [ $? -eq 1 ]; then
428 if [ $withtap -eq "1" ]; then
429 fail "Start lttng-relayd (process mode: $process_mode opt: $opt)"
430 fi
431 return 1
432 else
433 if [ $withtap -eq "1" ]; then
434 pass "Start lttng-relayd (process mode: $process_mode opt: $opt)"
435 fi
436 fi
437 else
438 pass "Start lttng-relayd (opt: $opt)"
439 fi
440}
441
442function start_lttng_relayd()
443{
444 start_lttng_relayd_opt 1 "-b" "$@"
445}
446
447function start_lttng_relayd_notap()
448{
449 start_lttng_relayd_opt 0 "-b" "$@"
450}
451
452function stop_lttng_relayd_opt()
453{
454 local withtap=$1
455 local signal=$2
456
457 if [ -z "$signal" ]; then
458 signal="SIGTERM"
459 fi
460
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
486 fail "Kill relay daemon"
487 fi
488 else
489 out=1
490 while [ -n "$out" ]; do
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
499 sleep 0.5
500 done
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
507 fi
508 fi
509 return $retval
510}
511
512function stop_lttng_relayd()
513{
514 stop_lttng_relayd_opt 1 "$@"
515}
516
517function stop_lttng_relayd_notap()
518{
519 stop_lttng_relayd_opt 0 "$@"
520}
521
522#First arg: show tap output
523#Second argument: load path for automatic loading
524function start_lttng_sessiond_opt()
525{
526 local withtap=$1
527 local load_path=$2
528
529 local env_vars=""
530 local consumerd=""
531
532 local long_bit_value=
533 long_bit_value=$(getconf LONG_BIT)
534
535 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
536 # Env variable requested no session daemon
537 return
538 fi
539
540 DIR=$(readlink -f "$TESTDIR")
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
555 # Check for env. variable. Allow the use of LD_PRELOAD etc.
556 if [[ "x${LTTNG_SESSIOND_ENV_VARS}" != "x" ]]; then
557 env_vars="${LTTNG_SESSIOND_ENV_VARS} "
558 fi
559 env_vars="${env_vars}$DIR/../src/bin/lttng-sessiond/$SESSIOND_BIN"
560
561 if ! validate_kernel_version; then
562 fail "Start session daemon"
563 BAIL_OUT "*** Kernel too old for session daemon tests ***"
564 fi
565
566 : "${LTTNG_SESSION_CONFIG_XSD_PATH="${DIR}/../src/common/config/"}"
567 export LTTNG_SESSION_CONFIG_XSD_PATH
568
569 if [ -z "$(pgrep "${SESSIOND_MATCH}")" ]; then
570 # Have a load path ?
571 if [ -n "$load_path" ]; then
572 # shellcheck disable=SC2086
573 env $env_vars --load "$load_path" --background "$consumerd"
574 else
575 # shellcheck disable=SC2086
576 env $env_vars --background "$consumerd"
577 fi
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
579 status=$?
580 if [ "$withtap" -eq "1" ]; then
581 ok $status "Start session daemon"
582 fi
583 fi
584}
585
586function start_lttng_sessiond()
587{
588 start_lttng_sessiond_opt 1 "$@"
589}
590
591function start_lttng_sessiond_notap()
592{
593 start_lttng_sessiond_opt 0 "$@"
594}
595
596function stop_lttng_sessiond_opt()
597{
598 local withtap=$1
599 local signal=$2
600
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
614 # Env variable requested no session daemon
615 return 0
616 fi
617
618 local retval=0
619
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"
628 fi
629
630 if [ -z "$pids" ]; then
631 if [ "$withtap" -eq "1" ]; then
632 pass "No session daemon to kill"
633 fi
634 return 0
635 fi
636
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
643 fail "Kill sessions daemon"
644 fi
645 else
646 out=1
647 while [ -n "$out" ]; do
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
656 sleep 0.5
657 done
658 out=1
659 while [ -n "$out" ]; do
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
668 sleep 0.5
669 done
670
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
677 fi
678 fi
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"
686 modprobe --remove "$modules"
687 fi
688 fi
689 fi
690
691 return $retval
692}
693
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
704function sigstop_lttng_sessiond_opt()
705{
706 local withtap=$1
707 local signal=SIGSTOP
708
709 if [ -n "$TEST_NO_SESSIOND" ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
710 # Env variable requested no session daemon
711 return
712 fi
713
714 PID_SESSIOND="$(pgrep "${SESSIOND_MATCH}") $(pgrep "$RUNAS_MATCH")"
715
716 if [ "$withtap" -eq "1" ]; then
717 diag "Sending SIGSTOP to lt-$SESSIOND_BIN and $SESSIOND_BIN pids: $(echo "$PID_SESSIOND" | tr '\n' ' ')"
718 fi
719
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
723 fail "Sending SIGSTOP to session daemon"
724 fi
725 else
726 out=1
727 while [ $out -ne 0 ]; do
728 pid="$(pgrep "$SESSIOND_MATCH")"
729
730 # Wait until state becomes stopped for session
731 # daemon(s).
732 out=0
733 for sessiond_pid in $pid; do
734 state="$(ps -p "$sessiond_pid" -o state= )"
735 if [[ -n "$state" && "$state" != "T" ]]; then
736 out=1
737 fi
738 done
739 sleep 0.5
740 done
741 if [ "$withtap" -eq "1" ]; then
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
757function stop_lttng_consumerd_opt()
758{
759 local withtap=$1
760 local signal=$2
761
762 if [ -z "$signal" ]; then
763 signal=SIGTERM
764 fi
765
766 local timeout_s=$3
767 local dtimeleft_s=
768
769 # Multiply time by 2 to simplify integer arithmetic
770 if [ -n "$timeout_s" ]; then
771 dtimeleft_s=$((timeout_s * 2))
772 fi
773
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
783 fi
784
785 diag "Killing (signal $signal) $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')"
786
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
791 fail "Kill consumer daemon"
792 fi
793 else
794 out=1
795 while [ $out -ne 0 ]; do
796 pid="$(pgrep "$CONSUMERD_MATCH")"
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
802 state="$(ps -p "$consumer_pid" -o state= )"
803 if [[ -n "$state" && "$state" != "Z" ]]; then
804 out=1
805 fi
806 done
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
814 sleep 0.5
815 done
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
822 fi
823 fi
824
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
838function sigstop_lttng_consumerd_opt()
839{
840 local withtap=$1
841 local signal=SIGSTOP
842
843 PID_CONSUMERD="$(pgrep "$CONSUMERD_MATCH")"
844
845 diag "Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')"
846
847 # shellcheck disable=SC2086
848 kill -s $signal $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
849 retval=$?
850
851 if [ $retval -eq 1 ]; then
852 if [ "$withtap" -eq "1" ]; then
853 fail "Sending SIGSTOP to consumer daemon"
854 fi
855 return 1
856 else
857 out=1
858 while [ $out -ne 0 ]; do
859 pid="$(pgrep "$CONSUMERD_MATCH")"
860
861 # Wait until state becomes stopped for all
862 # consumers.
863 out=0
864 for consumer_pid in $pid; do
865 state="$(ps -p "$consumer_pid" -o state= )"
866 if [[ -n "$state" && "$state" != "T" ]]; then
867 out=1
868 fi
869 done
870 sleep 0.5
871 done
872 if [ "$withtap" -eq "1" ]; then
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
889function list_lttng_with_opts ()
890{
891 local opts=$1
892 $TESTDIR/../src/bin/lttng/$LTTNG_BIN list $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
893 ok $? "Lttng-tool list command with option $opts"
894}
895
896function create_lttng_session_no_output ()
897{
898 local sess_name=$1
899 local opts="${@:2}"
900
901 $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $sess_name --no-output $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
902 ok $? "Create session $sess_name in no-output mode"
903}
904
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
914function create_lttng_session ()
915{
916 local withtap=$1
917 local expected_to_fail=$2
918 local sess_name=$3
919 local trace_path=$4
920 local opt=$5
921
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
930 ret=$?
931 if [ $expected_to_fail -eq "1" ]; then
932 test "$ret" -ne "0"
933 ret=$?
934 if [ $withtap -eq "1" ]; then
935 ok $ret "Create session $sess_name in $trace_path failed as expected"
936 fi
937 else
938 if [ $withtap -eq "1" ]; then
939 ok $ret "Create session $sess_name in $trace_path"
940 fi
941 fi
942 return $ret
943}
944
945function create_lttng_session_ok ()
946{
947 create_lttng_session 1 0 "$@"
948}
949
950function create_lttng_session_fail ()
951{
952 create_lttng_session 1 1 "$@"
953}
954
955function create_lttng_session_notap ()
956{
957 create_lttng_session 0 0 "$@"
958}
959
960
961function enable_ust_lttng_channel ()
962{
963 local withtap=$1
964 local expected_to_fail=$2
965 local sess_name=$3
966 local channel_name=$4
967 local opts="${@:5}"
968
969 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -u $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
970 ret=$?
971 if [[ $expected_to_fail -eq "1" ]]; then
972 test "$ret" -ne "0"
973 ret=$?
974 if [ $withtap -eq "1" ]; then
975 ok $ret "Enable channel $channel_name for session $sess_name failed as expected"
976 fi
977 else
978 if [ $withtap -eq "1" ]; then
979 ok $ret "Enable channel $channel_name for session $sess_name"
980 fi
981 fi
982 return $ret
983}
984
985function enable_ust_lttng_channel_ok ()
986{
987 enable_ust_lttng_channel 1 0 "$@"
988}
989
990function enable_ust_lttng_channel_fail ()
991{
992 enable_ust_lttng_channel 1 1 "$@"
993}
994
995function enable_ust_lttng_channel_notap ()
996{
997 enable_ust_lttng_channel 0 0 "$@"
998}
999
1000function disable_ust_lttng_channel()
1001{
1002 local sess_name=$1
1003 local channel_name=$2
1004
1005 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-channel -u $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1006 ok $? "Disable channel $channel_name for session $sess_name"
1007}
1008
1009function enable_lttng_mmap_overwrite_kernel_channel()
1010{
1011 local sess_name=$1
1012 local channel_name=$2
1013
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
1015 ok $? "Enable channel $channel_name for session $sess_name"
1016}
1017
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
1036function enable_lttng_mmap_overwrite_ust_channel()
1037{
1038 local sess_name=$1
1039 local channel_name=$2
1040
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
1042 ok $? "Enable channel $channel_name for session $sess_name"
1043}
1044
1045function enable_ust_lttng_event ()
1046{
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
1052
1053 if [ -z $channel_name ]; then
1054 # default channel if none specified
1055 chan=""
1056 else
1057 chan="-c $channel_name"
1058 fi
1059
1060 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1061 ret=$?
1062 if [[ $expected_to_fail -eq "1" ]]; then
1063 test $ret -ne "0"
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
1068 else
1069 if [[ $withtap -eq "1" ]]; then
1070 ok $ret "Enable ust event $event_name for session $sess_name"
1071 fi
1072 fi
1073 return $ret
1074}
1075
1076function enable_ust_lttng_event_ok ()
1077{
1078 enable_ust_lttng_event 1 0 "$@"
1079}
1080
1081function enable_ust_lttng_event_fail ()
1082{
1083 enable_ust_lttng_event 1 1 "$@"
1084}
1085
1086function enable_ust_lttng_event_notap ()
1087{
1088 enable_ust_lttng_event 0 0 "$@"
1089}
1090
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
1104 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1105 ok $? "Enable JUL event $event_name for session $sess_name"
1106}
1107
1108function enable_jul_lttng_event_loglevel()
1109{
1110 local sess_name=$1
1111 local event_name="$2"
1112 local loglevel=$3
1113 local channel_name=$4
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
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
1123 ok $? "Enable JUL event $event_name for session $sess_name with loglevel $loglevel"
1124}
1125
1126function enable_log4j_lttng_event()
1127{
1128 local sess_name=$1
1129 local event_name=$2
1130 local channel_name=$3
1131
1132 local chan_opt=()
1133
1134 # default channel if none specified
1135 if [ -n "$channel_name" ]; then
1136 chan_opt=("-c" "$channel_name")
1137 fi
1138
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'"
1165}
1166
1167function enable_log4j_lttng_event_loglevel()
1168{
1169 local sess_name=$1
1170 local event_name=$2
1171 local loglevel=$3
1172 local channel_name=$4
1173
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")
1197 fi
1198
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'"
1202}
1203
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
1217 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
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
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
1236 ok $? "Enable Python event $event_name for session $sess_name with loglevel $loglevel"
1237}
1238
1239function enable_ust_lttng_event_filter()
1240{
1241 local sess_name="$1"
1242 local event_name="$2"
1243 local filter="$3"
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
1252
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
1254 ok $? "Enable event $event_name with filtering for session $sess_name"
1255}
1256
1257function enable_ust_lttng_event_loglevel()
1258{
1259 local sess_name="$1"
1260 local event_name="$2"
1261 local loglevel="$3"
1262
1263 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --loglevel $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1264 ok $? "Enable event $event_name with loglevel $loglevel"
1265}
1266
1267function enable_ust_lttng_event_loglevel_only()
1268{
1269 local sess_name="$1"
1270 local event_name="$2"
1271 local loglevel="$3"
1272
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
1274 ok $? "Enable event $event_name with loglevel-only $loglevel"
1275}
1276
1277function disable_ust_lttng_event ()
1278{
1279 local sess_name="$1"
1280 local event_name="$2"
1281 local channel_name="$3"
1282
1283 if [ -z $channel_name ]; then
1284 # default channel if none specified
1285 chan=""
1286 else
1287 chan="-c $channel_name"
1288 fi
1289
1290 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name $chan -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1291 ok $? "Disable event $event_name for session $sess_name"
1292}
1293
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
1303function disable_log4j_lttng_event ()
1304{
1305 local sess_name="$1"
1306 local event_name="$2"
1307
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'"
1311}
1312
1313function disable_python_lttng_event ()
1314{
1315 local sess_name="$1"
1316 local event_name="$2"
1317
1318 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1319 ok $? "Disable Python event $event_name for session $sess_name"
1320}
1321
1322function start_lttng_tracing_opt ()
1323{
1324 local withtap=$1
1325 local expected_to_fail=$2
1326 local sess_name=$3
1327
1328 $TESTDIR/../src/bin/lttng/$LTTNG_BIN start $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1329 ret=$?
1330 if [[ $expected_to_fail -eq "1" ]]; then
1331 test "$ret" -ne "0"
1332 ret=$?
1333 if [ $withtap -eq "1" ]; then
1334 ok $? "Start tracing for session $sess_name failed as expected"
1335 fi
1336 else
1337 if [ $withtap -eq "1" ]; then
1338 ok $ret "Start tracing for session $sess_name"
1339 fi
1340 fi
1341}
1342
1343function start_lttng_tracing_ok ()
1344{
1345 start_lttng_tracing_opt 1 0 "$@"
1346}
1347
1348function start_lttng_tracing_fail ()
1349{
1350 start_lttng_tracing_opt 1 1 "$@"
1351}
1352
1353function start_lttng_tracing_notap ()
1354{
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
1363
1364 $TESTDIR/../src/bin/lttng/$LTTNG_BIN stop $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1365 ret=$?
1366 if [[ $expected_to_fail -eq "1" ]]; then
1367 test "$ret" -ne "0"
1368 ret=$?
1369 if [ $withtap -eq "1" ]; then
1370 ok $? "Stop lttng tracing for session $sess_name failed as expected"
1371 fi
1372 else
1373 if [ $withtap -eq "1" ]; then
1374 ok $ret "Stop lttng tracing for session $sess_name"
1375 fi
1376 fi
1377}
1378
1379function stop_lttng_tracing_ok ()
1380{
1381 stop_lttng_tracing_opt 1 0 "$@"
1382}
1383
1384function stop_lttng_tracing_fail ()
1385{
1386 stop_lttng_tracing_opt 1 1 "$@"
1387}
1388
1389function stop_lttng_tracing_notap ()
1390{
1391 stop_lttng_tracing_opt 0 0 "$@"
1392}
1393
1394function destroy_lttng_session ()
1395{
1396 local withtap=$1
1397 local expected_to_fail=$2
1398 local sess_name=$3
1399
1400 $TESTDIR/../src/bin/lttng/$LTTNG_BIN destroy $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1401 ret=$?
1402 if [[ $expected_to_fail -eq "1" ]]; then
1403 test "$ret" -ne "0"
1404 ret=$?
1405 if [ $withtap -eq "1" ]; then
1406 ok $ret "Destroy session $sess_name failed as expected"
1407 fi
1408 else
1409 if [ $withtap -eq "1" ]; then
1410 ok $ret "Destroy session $sess_name"
1411 fi
1412 fi
1413}
1414
1415function destroy_lttng_session_ok ()
1416{
1417 destroy_lttng_session 1 0 "$@"
1418
1419}
1420
1421function destroy_lttng_session_fail ()
1422{
1423 destroy_lttng_session 1 1 "$@"
1424}
1425
1426function destroy_lttng_session_notap ()
1427{
1428 destroy_lttng_session 0 0 "$@"
1429}
1430
1431function destroy_lttng_sessions ()
1432{
1433 $TESTDIR/../src/bin/lttng/$LTTNG_BIN destroy --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1434 ok $? "Destroy all lttng sessions"
1435}
1436
1437function lttng_snapshot_add_output ()
1438{
1439 local expected_to_fail=$1
1440 local sess_name=$2
1441 local trace_path=$3
1442 local opts=$4
1443
1444 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot add-output -s $sess_name $trace_path $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1445 ret=$?
1446 if [[ $expected_to_fail -eq 1 ]]; then
1447 test "$ret" -ne "0"
1448 ok $? "Added snapshot output $trace_path failed as expected"
1449 else
1450 ok $ret "Added snapshot output $trace_path"
1451 fi
1452}
1453
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
1464function lttng_snapshot_del_output ()
1465{
1466 local expected_to_fail=$1
1467 local sess_name=$2
1468 local id=$3
1469
1470 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot del-output -s $sess_name $id 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1471 ret=$?
1472 if [[ $expected_to_fail -eq "1" ]]; then
1473 test "$ret" -ne "0"
1474 ok $? "Deleted snapshot output id $id failed as expected"
1475 else
1476 ok $ret "Deleted snapshot output id $id"
1477 fi
1478}
1479
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
1490function lttng_snapshot_record ()
1491{
1492 local sess_name=$1
1493 local trace_path=$2
1494
1495 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s "$sess_name" "$trace_path" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1496 ok $? "Snapshot recorded"
1497}
1498
1499function lttng_snapshot_list ()
1500{
1501 local sess_name=$1
1502 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot list-output -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1503 ok $? "Snapshot list"
1504}
1505
1506function lttng_save()
1507{
1508 local sess_name=$1
1509 local opts=$2
1510
1511 $TESTDIR/../src/bin/lttng/$LTTNG_BIN save $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1512 ok $? "Session saved"
1513}
1514
1515function lttng_load()
1516{
1517 local expected_to_fail=$1
1518 local opts=$2
1519
1520 $TESTDIR/../src/bin/lttng/$LTTNG_BIN load $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
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 "$@"
1538}
1539
1540function lttng_track()
1541{
1542 local expected_to_fail="$1"
1543 shift 1
1544 local opts="$@"
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
1551 ok $ret "Track command with opts: $opts"
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{
1567 local expected_to_fail="$1"
1568 shift 1
1569 local opts="$@"
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
1576 ok $ret "Untrack command with opts: $opts"
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
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
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
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
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
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
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
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
1745function trace_matches ()
1746{
1747 local event_name=$1
1748 local nr_iter=$2
1749 local trace_path=$3
1750
1751 which $BABELTRACE_BIN >/dev/null
1752 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1753
1754 local count=$($BABELTRACE_BIN $trace_path | grep $event_name | wc -l)
1755
1756 if [ "$count" -ne "$nr_iter" ]; then
1757 fail "Trace match"
1758 diag "$count matching events found in trace"
1759 else
1760 pass "Trace match"
1761 fi
1762}
1763
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
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
1782}
1783
1784function validate_trace
1785{
1786 local event_name=$1
1787 local trace_path=$2
1788
1789 which $BABELTRACE_BIN >/dev/null
1790 if [ $? -ne 0 ]; then
1791 skip 0 "Babeltrace binary not found. Skipping trace validation"
1792 fi
1793
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
1799 pass "Validate trace for event $i, $traced events"
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
1808}
1809
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
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
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
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
1889 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep --extended-regexp ${event_exp} | wc -l)
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
1908 local count=$($BABELTRACE_BIN $trace_path | grep --extended-regexp ${event_exp} | wc -l)
1909 local total=$($BABELTRACE_BIN $trace_path | wc -l)
1910
1911 if [ "$count" -ne 0 ] && [ "$total" -eq "$count" ]; then
1912 pass "Trace match with $total for expression '${event_exp}'"
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
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)
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}
1947
1948function validate_directory_empty ()
1949{
1950 local trace_path="$1"
1951
1952 # Do not double quote `$trace_path` below as we want wildcards to be
1953 # expanded.
1954 files="$(ls -A $trace_path)"
1955 ret=$?
1956 if [ $ret -ne 0 ]; then
1957 fail "Failed to list content of directory \"$trace_path\""
1958 return $ret
1959 fi
1960
1961 nb_files="$(echo -n "$files" | wc -l)"
1962 ok $nb_files "Directory \"$trace_path\" is empty"
1963}
1964
1965function validate_trace_session_ust_empty()
1966{
1967 validate_directory_empty "$1"/ust
1968}
1969
1970function validate_trace_session_kernel_empty()
1971{
1972 validate_trace_empty "$1"/kernel
1973}
1974
1975function regenerate_metadata ()
1976{
1977 local expected_to_fail=$1
1978 local sess_name=$2
1979
1980 $TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate metadata -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1981 ret=$?
1982 if [[ $expected_to_fail -eq "1" ]]; then
1983 test "$ret" -ne "0"
1984 ok $? "Expected fail on regenerate metadata $sess_name"
1985 else
1986 ok $ret "Metadata regenerate $sess_name"
1987 fi
1988}
1989
1990function regenerate_metadata_ok ()
1991{
1992 regenerate_metadata 0 "$@"
1993}
1994
1995function regenerate_metadata_fail ()
1996{
1997 regenerate_metadata 1 "$@"
1998}
1999
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
2011 ok $ret "Statedump regenerate $sess_name"
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
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
2050function destructive_tests_enabled ()
2051{
2052 if [ "$LTTNG_ENABLE_DESTRUCTIVE_TESTS" = "will-break-my-system" ]; then
2053 return 0
2054 else
2055 return 1
2056 fi
2057}
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"
2069 ok $? "Expected fail when setting periodic rotation ($period) of session $sess_name"
2070 else
2071 ok $ret "Set periodic rotation ($period) of session $sess_name"
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}
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}
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}
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.030063 seconds and 4 git commands to generate.