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