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