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