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