Fix: tests: handling of subprocesses on bail out
[lttng-tools.git] / tests / utils / utils.sh
1 # Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
2 #
3 # SPDX-License-Identifier: LGPL-2.1-only
4 #
5
6 SESSIOND_BIN="lttng-sessiond"
7 SESSIOND_MATCH=".*lttng-sess.*"
8 RUNAS_BIN="lttng-runas"
9 RUNAS_MATCH=".*lttng-runas.*"
10 CONSUMERD_BIN="lttng-consumerd"
11 CONSUMERD_MATCH=".*lttng-consumerd.*"
12 RELAYD_BIN="lttng-relayd"
13 RELAYD_MATCH=".*lttng-relayd.*"
14 LTTNG_BIN="lttng"
15 BABELTRACE_BIN="babeltrace"
16 OUTPUT_DEST=/dev/null
17 ERROR_OUTPUT_DEST=/dev/null
18
19 # Minimal kernel version supported for session daemon tests
20 KERNEL_MAJOR_VERSION=2
21 KERNEL_MINOR_VERSION=6
22 KERNEL_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.
27 export LTTNG_UST_REGISTER_TIMEOUT=-1
28 export LTTNG_NETWORK_SOCKET_TIMEOUT=-1
29 export 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.
35 export LTTNG_SESSIOND_PATH="/bin/true"
36
37 source $TESTDIR/utils/tap/tap.sh
38
39 if [ -z ${LTTNG_TEST_TEARDOWN_TIMEOUT+x} ]; then
40 LTTNG_TEST_TEARDOWN_TIMEOUT=60
41 fi
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.
48 set -m
49
50 kill_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
71 function 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
85 function full_cleanup ()
86 {
87 cleanup
88 exit 1
89 }
90
91 function LTTNG_BAIL_OUT ()
92 {
93 cleanup
94 BAIL_OUT "$@"
95 }
96
97 function null_pipes ()
98 {
99 exec 0>/dev/null
100 exec 1>/dev/null
101 exec 2>/dev/null
102 }
103
104 trap 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
110 trap null_pipes SIGPIPE
111
112 # Check pgrep from env, default to pgrep if none
113 if [ -z "$PGREP" ]; then
114 PGREP=pgrep
115 fi
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.
124 function 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
148 function 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
158 function 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
168 function print_test_banner ()
169 {
170 local desc="$1"
171 diag "$desc"
172 }
173
174 function 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
192 function 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.
200 function 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
211 function 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
228 function 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
263 function enable_kernel_lttng_event_ok ()
264 {
265 enable_kernel_lttng_event 1 0 "$@"
266 }
267
268 function enable_kernel_lttng_event_fail ()
269 {
270 enable_kernel_lttng_event 1 1 "$@"
271 }
272
273 function enable_kernel_lttng_event_notap ()
274 {
275 enable_kernel_lttng_event 0 0 "$@"
276 }
277
278 # Old interface
279 function lttng_enable_kernel_event
280 {
281 enable_kernel_lttng_event_ok "$@"
282 }
283
284 function 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
313 function lttng_enable_kernel_syscall_ok()
314 {
315 lttng_enable_kernel_syscall 0 "$@"
316 }
317
318 function lttng_enable_kernel_syscall_fail()
319 {
320 lttng_enable_kernel_syscall 1 "$@"
321 }
322
323 function 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
353 function lttng_disable_kernel_syscall_ok()
354 {
355 lttng_disable_kernel_syscall 0 "$@"
356 }
357
358 function lttng_disable_kernel_syscall_fail()
359 {
360 lttng_disable_kernel_syscall 1 "$@"
361 }
362
363 function 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
380 function lttng_enable_kernel_function_event_ok ()
381 {
382 lttng_enable_kernel_function_event 0 "$@"
383 }
384
385 function 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
402 function lttng_enable_kernel_userspace_probe_event_fail ()
403 {
404 lttng_enable_kernel_userspace_probe_event 1 "$@"
405 }
406
407 function lttng_enable_kernel_userspace_probe_event_ok ()
408 {
409 lttng_enable_kernel_userspace_probe_event 0 "$@"
410 }
411
412 function 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 }
420 function 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
443 function lttng_enable_kernel_channel_ok()
444 {
445 lttng_enable_kernel_channel 1 0 "$@"
446 }
447
448 function lttng_enable_kernel_channel_fail()
449 {
450 lttng_enable_kernel_channel 1 1 "$@"
451 }
452
453 function lttng_enable_kernel_channel_notap()
454 {
455 lttng_enable_kernel_channel 0 0 "$@"
456 }
457
458 function enable_kernel_lttng_channel_ok()
459 {
460 lttng_enable_kernel_channel 1 0 "$@"
461 }
462
463 function 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
479 function lttng_disable_kernel_channel_ok()
480 {
481 lttng_disable_kernel_channel 0 "$@"
482 }
483
484 function lttng_disable_kernel_channel_fail()
485 {
486 lttng_disable_kernel_channel 1 "$@"
487 }
488
489 function 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
516 function start_lttng_relayd()
517 {
518 start_lttng_relayd_opt 1 "-b" "$@"
519 }
520
521 function start_lttng_relayd_notap()
522 {
523 start_lttng_relayd_opt 0 "-b" "$@"
524 }
525
526 function 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
591 function stop_lttng_relayd()
592 {
593 stop_lttng_relayd_opt 1 0 "$@"
594 }
595
596 function stop_lttng_relayd_notap()
597 {
598 stop_lttng_relayd_opt 0 0 "$@"
599 }
600
601 function 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
608 function 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
673 function start_lttng_sessiond()
674 {
675 start_lttng_sessiond_opt 1 "$@"
676 }
677
678 function start_lttng_sessiond_notap()
679 {
680 start_lttng_sessiond_opt 0 "$@"
681 }
682
683 function 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
783 function stop_lttng_sessiond()
784 {
785 stop_lttng_sessiond_opt 1 0 "$@"
786 }
787
788 function stop_lttng_sessiond_notap()
789 {
790 stop_lttng_sessiond_opt 0 0 "$@"
791 }
792
793 function stop_lttng_sessiond_cleanup()
794 {
795 stop_lttng_sessiond_opt 0 1 "$@"
796 }
797
798 function 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
842 function sigstop_lttng_sessiond()
843 {
844 sigstop_lttng_sessiond_opt 1 "$@"
845 }
846
847 function sigstop_lttng_sessiond_notap()
848 {
849 sigstop_lttng_sessiond_opt 0 "$@"
850 }
851
852 function 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
927 function stop_lttng_consumerd()
928 {
929 stop_lttng_consumerd_opt 1 0 "$@"
930 }
931
932 function stop_lttng_consumerd_notap()
933 {
934 stop_lttng_consumerd_opt 0 0 "$@"
935 }
936
937 function stop_lttng_consumerd_cleanup()
938 {
939 stop_lttng_consumerd_opt 0 1 "$@"
940 }
941
942 function 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
984 function sigstop_lttng_consumerd()
985 {
986 sigstop_lttng_consumerd_opt 1 "$@"
987 }
988
989 function sigstop_lttng_consumerd_notap()
990 {
991 sigstop_lttng_consumerd_opt 0 "$@"
992 }
993
994 function 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
1001 function 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
1010 function 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
1019 function 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
1050 function create_lttng_session_ok ()
1051 {
1052 create_lttng_session 1 0 "$@"
1053 }
1054
1055 function create_lttng_session_fail ()
1056 {
1057 create_lttng_session 1 1 "$@"
1058 }
1059
1060 function create_lttng_session_notap ()
1061 {
1062 create_lttng_session 0 0 "$@"
1063 }
1064
1065
1066 function 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
1090 function enable_ust_lttng_channel_ok ()
1091 {
1092 enable_ust_lttng_channel 1 0 "$@"
1093 }
1094
1095 function enable_ust_lttng_channel_fail ()
1096 {
1097 enable_ust_lttng_channel 1 1 "$@"
1098 }
1099
1100 function enable_ust_lttng_channel_notap ()
1101 {
1102 enable_ust_lttng_channel 0 0 "$@"
1103 }
1104
1105 function 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
1114 function 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
1123 function 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
1132 function 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
1141 function 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
1150 function 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
1181 function enable_ust_lttng_event_ok ()
1182 {
1183 enable_ust_lttng_event 1 0 "$@"
1184 }
1185
1186 function enable_ust_lttng_event_fail ()
1187 {
1188 enable_ust_lttng_event 1 1 "$@"
1189 }
1190
1191 function enable_ust_lttng_event_notap ()
1192 {
1193 enable_ust_lttng_event 0 0 "$@"
1194 }
1195
1196 function 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
1213 function 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
1231 function 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
1248 function 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
1266 function 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
1283 function 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
1301 function 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
1319 function 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
1329 function 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
1339 function 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
1356 function 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
1365 function 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
1374 function 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
1383 function 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
1404 function start_lttng_tracing_ok ()
1405 {
1406 start_lttng_tracing_opt 1 0 "$@"
1407 }
1408
1409 function start_lttng_tracing_fail ()
1410 {
1411 start_lttng_tracing_opt 1 1 "$@"
1412 }
1413
1414 function start_lttng_tracing_notap ()
1415 {
1416 start_lttng_tracing_opt 0 1 "$@"
1417 }
1418
1419 function 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
1440 function stop_lttng_tracing_ok ()
1441 {
1442 stop_lttng_tracing_opt 1 0 "$@"
1443 }
1444
1445 function stop_lttng_tracing_fail ()
1446 {
1447 stop_lttng_tracing_opt 1 1 "$@"
1448 }
1449
1450 function stop_lttng_tracing_notap ()
1451 {
1452 stop_lttng_tracing_opt 0 0 "$@"
1453 }
1454
1455 function 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
1476 function destroy_lttng_session_ok ()
1477 {
1478 destroy_lttng_session 1 0 "$@"
1479
1480 }
1481
1482 function destroy_lttng_session_fail ()
1483 {
1484 destroy_lttng_session 1 1 "$@"
1485 }
1486
1487 function destroy_lttng_session_notap ()
1488 {
1489 destroy_lttng_session 0 0 "$@"
1490 }
1491
1492 function 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
1498 function 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
1515 function lttng_snapshot_add_output_ok ()
1516 {
1517 lttng_snapshot_add_output 0 "$@"
1518 }
1519
1520 function lttng_snapshot_add_output_fail ()
1521 {
1522 lttng_snapshot_add_output 1 "$@"
1523 }
1524
1525 function 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
1541 function lttng_snapshot_del_output_ok ()
1542 {
1543 lttng_snapshot_del_output 0 "$@"
1544 }
1545
1546 function lttng_snapshot_del_output_fail ()
1547 {
1548 lttng_snapshot_del_output 1 "$@"
1549 }
1550
1551 function 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
1559 function 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
1566 function 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
1575 function 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
1590 function lttng_load_ok()
1591 {
1592 lttng_load 0 "$@"
1593 }
1594
1595 function lttng_load_fail()
1596 {
1597 lttng_load 1 "$@"
1598 }
1599
1600 function 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
1615 function lttng_track_ok()
1616 {
1617 lttng_track 0 "$@"
1618 }
1619
1620 function lttng_track_fail()
1621 {
1622 lttng_track 1 "$@"
1623 }
1624
1625 function 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
1640 function lttng_untrack_ok()
1641 {
1642 lttng_untrack 0 "$@"
1643 }
1644
1645 function lttng_untrack_fail()
1646 {
1647 lttng_untrack 1 "$@"
1648 }
1649
1650 function 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
1657 function 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
1663 function lttng_track_ust_ok()
1664 {
1665 lttng_track_ok -u "$@"
1666 }
1667
1668 function lttng_track_ust_fail()
1669 {
1670 lttng_track_fail -u "$@"
1671 }
1672
1673 function lttng_track_kernel_ok()
1674 {
1675 lttng_track_ok -k "$@"
1676 }
1677
1678 function lttng_track_kernel_fail()
1679 {
1680 lttng_track_fail -k "$@"
1681 }
1682
1683 function lttng_untrack_ust_ok()
1684 {
1685 lttng_untrack_ok -u "$@"
1686 }
1687
1688 function lttng_untrack_ust_fail()
1689 {
1690 lttng_untrack_fail -u "$@"
1691 }
1692
1693 function lttng_untrack_kernel_ok()
1694 {
1695 lttng_untrack_ok -k "$@"
1696 }
1697
1698 function lttng_untrack_kernel_fail()
1699 {
1700 lttng_untrack_fail -k "$@"
1701 }
1702
1703 function 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
1710 function 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
1728 function add_context_ust_ok()
1729 {
1730 add_context_lttng 0 -u "$@"
1731 }
1732
1733 function add_context_ust_fail()
1734 {
1735 add_context_lttng 1 -u "$@"
1736 }
1737
1738 function add_context_kernel_ok()
1739 {
1740 add_context_lttng 0 -k "$@"
1741 }
1742
1743 function add_context_kernel_fail()
1744 {
1745 add_context_lttng 1 -k "$@"
1746 }
1747
1748 function 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
1761 function 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
1774 function 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
1797 function 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
1816 function 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
1836 function 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
1862 function 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
1891 function 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
1921 function 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
1933 function 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
1952 function 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
1973 function 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
2000 function 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
2017 function validate_trace_session_ust_empty()
2018 {
2019 validate_directory_empty "$1"/ust
2020 }
2021
2022 function validate_trace_session_kernel_empty()
2023 {
2024 validate_trace_empty "$1"/kernel
2025 }
2026
2027 function 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
2042 function regenerate_metadata_ok ()
2043 {
2044 regenerate_metadata 0 "$@"
2045 }
2046
2047 function regenerate_metadata_fail ()
2048 {
2049 regenerate_metadata 1 "$@"
2050 }
2051
2052 function 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
2067 function regenerate_statedump_ok ()
2068 {
2069 regenerate_statedump 0 "$@"
2070 }
2071
2072 function regenerate_statedump_fail ()
2073 {
2074 regenerate_statedump 1 "$@"
2075 }
2076
2077 function 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
2092 function rotate_session_ok ()
2093 {
2094 rotate_session 0 "$@"
2095 }
2096
2097 function rotate_session_fail ()
2098 {
2099 rotate_session 1 "$@"
2100 }
2101
2102 function 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
2111 function 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
2127 function lttng_enable_rotation_timer_ok ()
2128 {
2129 lttng_enable_rotation_timer 0 $@
2130 }
2131
2132 function lttng_enable_rotation_timer_fail ()
2133 {
2134 lttng_enable_rotation_timer 1 $@
2135 }
2136
2137 function 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
2153 function lttng_enable_rotation_size_ok ()
2154 {
2155 lttng_enable_rotation_size 0 $@
2156 }
2157
2158 function lttng_enable_rotation_size_fail ()
2159 {
2160 lttng_enable_rotation_size 1 $@
2161 }
2162
2163 function 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
2178 function lttng_clear_session_ok ()
2179 {
2180 lttng_clear_session 0 $@
2181 }
2182
2183 function lttng_clear_session_fail ()
2184 {
2185 lttng_clear_session 1 $@
2186 }
2187
2188 function 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
2194 function 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
2210 function 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
2225 function lttng_add_trigger_ok()
2226 {
2227 lttng_add_trigger 0 "$@"
2228 }
2229
2230 function lttng_add_trigger_fail()
2231 {
2232 lttng_add_trigger 1 "$@"
2233 }
2234
2235 function lttng_remove_trigger_ok()
2236 {
2237 lttng_remove_trigger 0 "$@"
2238 }
This page took 0.074696 seconds and 5 git commands to generate.