tests: test kernel snapshot with discard buffers
[lttng-tools.git] / tests / utils / utils.sh
1 #!/src/bin/bash
2 #
3 # Copyright (C) - 2012 David Goulet <dgoulet@efficios.com>
4 #
5 # This library is free software; you can redistribute it and/or modify it under
6 # the terms of the GNU Lesser General Public License as published by the Free
7 # Software Foundation; version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 # details.
13 #
14 # You should have received a copy of the GNU Lesser General Public License
15 # along with this library; if not, write to the Free Software Foundation, Inc.,
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18 SESSIOND_BIN="lttng-sessiond"
19 RUNAS_BIN="lttng-runas"
20 CONSUMERD_BIN="lttng-consumerd"
21 RELAYD_BIN="lttng-relayd"
22 LTTNG_BIN="lttng"
23 BABELTRACE_BIN="babeltrace"
24 OUTPUT_DEST=/dev/null
25 ERROR_OUTPUT_DEST=/dev/null
26
27 # Minimal kernel version supported for session daemon tests
28 KERNEL_MAJOR_VERSION=2
29 KERNEL_MINOR_VERSION=6
30 KERNEL_PATCHLEVEL_VERSION=27
31
32 # We set the default UST register timeout to "wait forever", so that
33 # basic tests don't have to worry about hitting timeouts on busy
34 # systems. Specialized tests should test those corner-cases.
35 export LTTNG_UST_REGISTER_TIMEOUT=-1
36
37 # We set the default lttng-sessiond path to /bin/true to prevent the spawning
38 # of a daemonized sessiond. This is necessary since 'lttng create' will spawn
39 # its own sessiond if none is running. It also ensures that 'lttng create'
40 # fails when no sessiond is running.
41 export LTTNG_SESSIOND_PATH="/bin/true"
42
43 source $TESTDIR/utils/tap/tap.sh
44
45 function print_ok ()
46 {
47 # Check if we are a terminal
48 if [ -t 1 ]; then
49 echo -e "\e[1;32mOK\e[0m"
50 else
51 echo -e "OK"
52 fi
53 }
54
55 function print_fail ()
56 {
57 # Check if we are a terminal
58 if [ -t 1 ]; then
59 echo -e "\e[1;31mFAIL\e[0m"
60 else
61 echo -e "FAIL"
62 fi
63 }
64
65 function print_test_banner ()
66 {
67 local desc="$1"
68 diag "$desc"
69 }
70
71 function validate_kernel_version ()
72 {
73 local kern_version=($(uname -r | awk -F. '{ printf("%d.%d.%d\n",$1,$2,$3); }' | tr '.' '\n'))
74 if [ ${kern_version[0]} -gt $KERNEL_MAJOR_VERSION ]; then
75 return 0
76 fi
77 if [ ${kern_version[1]} -gt $KERNEL_MINOR_VERSION ]; then
78 return 0
79 fi
80 if [ ${kern_version[2]} -ge $KERNEL_PATCHLEVEL_VERSION ]; then
81 return 0
82 fi
83 return 1
84 }
85
86 # Generate a random string
87 # $1 = number of characters; defaults to 16
88 # $2 = include special characters; 1 = yes, 0 = no; defaults to yes
89 function randstring()
90 {
91 [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
92 cat /dev/urandom 2>/dev/null | tr -cd "$CHAR" 2>/dev/null | head -c ${1:-16} 2>/dev/null
93 echo
94 }
95
96 # Return the number of _configured_ CPUs.
97 function conf_proc_count()
98 {
99 getconf _NPROCESSORS_CONF
100 if [ $? -ne 0 ]; then
101 diag "Failed to get the number of configured CPUs"
102 fi
103 echo
104 }
105
106 function enable_kernel_lttng_event
107 {
108 local expected_to_fail="$1"
109 local sess_name="$2"
110 local event_name="$3"
111 local channel_name="$4"
112
113 if [ -z "$event_name" ]; then
114 # Enable all event if no event name specified
115 event_name="-a"
116 fi
117
118 if [ -z "$channel_name" ]; then
119 # default channel if none specified
120 chan=""
121 else
122 chan="-c $channel_name"
123 fi
124
125 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
126 ret=$?
127 if [[ $expected_to_fail -eq "1" ]]; then
128 test $ret -ne "0"
129 ok $? "Enable kernel event $event_name for session $session_name on channel $channel_name failed as expected"
130 else
131 ok $ret "Enable kernel event $event_name for session $sess_name"
132 fi
133 }
134
135 function enable_kernel_lttng_event_ok ()
136 {
137 enable_kernel_lttng_event 0 "$@"
138 }
139
140 function enable_kernel_lttng_event_fail ()
141 {
142 enable_kernel_lttng_event 1 "$@"
143 }
144
145 # Old interface
146 function lttng_enable_kernel_event
147 {
148 enable_kernel_lttng_event_ok "$@"
149 }
150
151 function lttng_enable_kernel_syscall()
152 {
153 local expected_to_fail=$1
154 local sess_name=$2
155 local syscall_name=$3
156 local channel_name=$4
157
158 if [ -z $syscall_name ]; then
159 # Enable all event if no syscall name specified
160 syscall_name="-a"
161 fi
162
163 if [ -z $channel_name ]; then
164 # default channel if none specified
165 chan=""
166 else
167 chan="-c $channel_name"
168 fi
169
170 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
171 ret=$?
172 if [[ $expected_to_fail -eq "1" ]]; then
173 test $ret -ne "0"
174 ok $? "Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name fail as expected"
175 else
176 ok $ret "Enable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
177 fi
178 }
179
180 function lttng_enable_kernel_syscall_ok()
181 {
182 lttng_enable_kernel_syscall 0 "$@"
183 }
184
185 function lttng_enable_kernel_syscall_fail()
186 {
187 lttng_enable_kernel_syscall 1 "$@"
188 }
189
190 function lttng_disable_kernel_syscall()
191 {
192 local expected_to_fail=$1
193 local sess_name=$2
194 local syscall_name=$3
195 local channel_name=$4
196
197 if [ -z $syscall_name ]; then
198 # Enable all event if no syscall name specified
199 syscall_name="-a"
200 fi
201
202 if [ -z $channel_name ]; then
203 # default channel if none specified
204 chan=""
205 else
206 chan="-c $channel_name"
207 fi
208
209 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event --syscall "$syscall_name" $chan -s $sess_name -k 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
210
211 ret=$?
212 if [[ $expected_to_fail -eq "1" ]]; then
213 test $ret -ne "0"
214 ok $? "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name failed as expected"
215 else
216 ok $ret "Disable kernel syscall $syscall_name for session $sess_name on channel $channel_name"
217 fi
218 }
219
220 function lttng_disable_kernel_syscall_ok()
221 {
222 lttng_disable_kernel_syscall 0 "$@"
223 }
224
225 function lttng_disable_kernel_syscall_fail()
226 {
227 lttng_disable_kernel_syscall 1 "$@"
228 }
229
230 function lttng_enable_kernel_channel()
231 {
232 local expected_to_fail=$1
233 local sess_name=$2
234 local channel_name=$3
235
236 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -k $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
237 ret=$?
238 if [[ $expected_to_fail -eq "1" ]]; then
239 test "$ret" -ne "0"
240 ok $? "Enable channel $channel_name for session $sess_name failed as expected"
241 else
242 ok $ret "Enable channel $channel_name for session $sess_name"
243 fi
244 }
245
246 function lttng_enable_kernel_channel_ok()
247 {
248 lttng_enable_kernel_channel 0 "$@"
249 }
250
251 function lttng_enable_kernel_channel_fail()
252 {
253 lttng_enable_kernel_channel 1 "$@"
254 }
255
256 function lttng_disable_kernel_channel()
257 {
258 local expected_to_fail=$1
259 local sess_name=$2
260 local channel_name=$3
261
262 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-channel -k $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
263 ret=$?
264 if [[ $expected_to_fail -eq "1" ]]; then
265 test "$ret" -ne "0"
266 ok $? "Disable channel $channel_name for session $sess_name failed as expected"
267 else
268 ok $ret "Disable channel $channel_name for session $sess_name"
269 fi
270 }
271
272 function lttng_disable_kernel_channel_ok()
273 {
274 lttng_disable_kernel_channel 0 "$@"
275 }
276
277 function lttng_disable_kernel_channel_fail()
278 {
279 lttng_disable_kernel_channel 1 "$@"
280 }
281
282 function start_lttng_relayd_opt()
283 {
284 local withtap=$1
285 local opt=$2
286
287 DIR=$(readlink -f $TESTDIR)
288
289 if [ -z $(pgrep --full lt-$RELAYD_BIN) ]; then
290 $DIR/../src/bin/lttng-relayd/$RELAYD_BIN -b $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
291 #$DIR/../src/bin/lttng-relayd/$RELAYD_BIN $opt -vvv >>/tmp/relayd.log 2>&1 &
292 if [ $? -eq 1 ]; then
293 if [ $withtap -eq "1" ]; then
294 fail "Start lttng-relayd (opt: $opt)"
295 fi
296 return 1
297 else
298 if [ $withtap -eq "1" ]; then
299 pass "Start lttng-relayd (opt: $opt)"
300 fi
301 fi
302 else
303 pass "Start lttng-relayd (opt: $opt)"
304 fi
305 }
306
307 function start_lttng_relayd()
308 {
309 start_lttng_relayd_opt 1 "$@"
310 }
311
312 function start_lttng_relayd_notap()
313 {
314 start_lttng_relayd_opt 0 "$@"
315 }
316
317 function stop_lttng_relayd_opt()
318 {
319 local withtap=$1
320
321 PID_RELAYD=`pgrep --full lt-$RELAYD_BIN`
322
323 if [ $withtap -eq "1" ]; then
324 diag "Killing lttng-relayd (pid: $PID_RELAYD)"
325 fi
326 kill $PID_RELAYD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
327 retval=$?
328
329 if [ $? -eq 1 ]; then
330 if [ $withtap -eq "1" ]; then
331 fail "Kill relay daemon"
332 fi
333 return 1
334 else
335 out=1
336 while [ -n "$out" ]; do
337 out=$(pgrep --full lt-$RELAYD_BIN)
338 sleep 0.5
339 done
340 if [ $withtap -eq "1" ]; then
341 pass "Kill relay daemon"
342 fi
343 fi
344 return $retval
345 }
346
347 function stop_lttng_relayd()
348 {
349 stop_lttng_relayd_opt 1 "$@"
350 }
351
352 function stop_lttng_relayd_notap()
353 {
354 stop_lttng_relayd_opt 0 "$@"
355 }
356
357 #First arg: show tap output
358 #Second argument: load path for automatic loading
359 function start_lttng_sessiond_opt()
360 {
361 local withtap=$1
362 local load_path=$2
363
364 if [ -n $TEST_NO_SESSIOND ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
365 # Env variable requested no session daemon
366 return
367 fi
368
369 validate_kernel_version
370 if [ $? -ne 0 ]; then
371 fail "Start session daemon"
372 BAIL_OUT "*** Kernel too old for session daemon tests ***"
373 fi
374
375 DIR=$(readlink -f $TESTDIR)
376 : ${LTTNG_SESSION_CONFIG_XSD_PATH=${DIR}/../src/common/config/}
377 export LTTNG_SESSION_CONFIG_XSD_PATH
378
379 if [ -z $(pgrep --full lt-$SESSIOND_BIN) ]; then
380 # Have a load path ?
381 if [ -n "$load_path" ]; then
382 $DIR/../src/bin/lttng-sessiond/$SESSIOND_BIN --load "$load_path" --background --consumerd32-path="$DIR/../src/bin/lttng-consumerd/lttng-consumerd" --consumerd64-path="$DIR/../src/bin/lttng-consumerd/lttng-consumerd"
383 else
384 $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"
385 fi
386 #$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
387 status=$?
388 if [ $withtap -eq "1" ]; then
389 ok $status "Start session daemon"
390 fi
391 fi
392 }
393
394 function start_lttng_sessiond()
395 {
396 start_lttng_sessiond_opt 1 "$@"
397 }
398
399 function start_lttng_sessiond_notap()
400 {
401 start_lttng_sessiond_opt 0 "$@"
402 }
403
404 function stop_lttng_sessiond_opt()
405 {
406 local withtap=$1
407 local signal=$2
408 local kill_opt=""
409
410 if [ -n $TEST_NO_SESSIOND ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
411 # Env variable requested no session daemon
412 return
413 fi
414
415 PID_SESSIOND="$(pgrep --full lt-$SESSIOND_BIN) $(pgrep --full $RUNAS_BIN)"
416
417 if [ -n "$2" ]; then
418 kill_opt="$kill_opt -s $signal"
419 fi
420 if [ $withtap -eq "1" ]; then
421 diag "Killing lt-$SESSIOND_BIN pids: $(echo $PID_SESSIOND | tr '\n' ' ')"
422 fi
423 kill $kill_opt $PID_SESSIOND 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
424
425 if [ $? -eq 1 ]; then
426 if [ $withtap -eq "1" ]; then
427 fail "Kill sessions daemon"
428 fi
429 else
430 out=1
431 while [ -n "$out" ]; do
432 out=$(pgrep --full lt-$SESSIOND_BIN)
433 sleep 0.5
434 done
435 out=1
436 while [ -n "$out" ]; do
437 out=$(pgrep --full $CONSUMERD_BIN)
438 sleep 0.5
439 done
440 if [ $withtap -eq "1" ]; then
441 pass "Kill session daemon"
442 fi
443 fi
444 }
445
446 function stop_lttng_sessiond()
447 {
448 stop_lttng_sessiond_opt 1 "$@"
449 }
450
451 function stop_lttng_sessiond_notap()
452 {
453 stop_lttng_sessiond_opt 0 "$@"
454 }
455
456 function sigstop_lttng_sessiond_opt()
457 {
458 local withtap=$1
459 local signal=SIGSTOP
460 local kill_opt=""
461
462 if [ -n $TEST_NO_SESSIOND ] && [ "$TEST_NO_SESSIOND" == "1" ]; then
463 # Env variable requested no session daemon
464 return
465 fi
466
467 PID_SESSIOND="$(pgrep --full lt-$SESSIOND_BIN) $(pgrep --full $RUNAS_BIN)"
468
469 kill_opt="$kill_opt -s $signal"
470
471 if [ $withtap -eq "1" ]; then
472 diag "Sending SIGSTOP to lt-$SESSIOND_BIN pids: $(echo $PID_SESSIOND | tr '\n' ' ')"
473 fi
474 kill $kill_opt $PID_SESSIOND 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
475
476 if [ $? -eq 1 ]; then
477 if [ $withtap -eq "1" ]; then
478 fail "Sending SIGSTOP to session daemon"
479 fi
480 else
481 out=1
482 while [ $out -ne 0 ]; do
483 pid=$(pgrep --full lt-$SESSIOND_BIN)
484
485 # Wait until state becomes stopped for session
486 # daemon(s).
487 out=0
488 for sessiond_pid in $pid; do
489 state=$(ps -p $sessiond_pid -o state= )
490 if [[ -n "$state" && "$state" != "T" ]]; then
491 out=1
492 fi
493 done
494 sleep 0.5
495 done
496 if [ $withtap -eq "1" ]; then
497 pass "Sending SIGSTOP to session daemon"
498 fi
499 fi
500 }
501
502 function sigstop_lttng_sessiond()
503 {
504 sigstop_lttng_sessiond_opt 1 "$@"
505 }
506
507 function sigstop_lttng_sessiond_notap()
508 {
509 sigstop_lttng_sessiond_opt 0 "$@"
510 }
511
512 function stop_lttng_consumerd_opt()
513 {
514 local withtap=$1
515 local signal=$2
516 local kill_opt=""
517
518 PID_CONSUMERD=`pgrep --full $CONSUMERD_BIN`
519
520 if [ -n "$2" ]; then
521 kill_opt="$kill_opt -s $signal"
522 fi
523
524 if [ $withtap -eq "1" ]; then
525 diag "Killing $CONSUMERD_BIN pids: $(echo $PID_CONSUMERD | tr '\n' ' ')"
526 fi
527 kill $kill_opt $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
528 retval=$?
529 set +x
530
531 if [ $? -eq 1 ]; then
532 if [ $withtap -eq "1" ]; then
533 fail "Kill consumer daemon"
534 fi
535 return 1
536 else
537 out=1
538 while [ $out -ne 0 ]; do
539 pid=$(pgrep --full $CONSUMERD_BIN)
540
541 # If consumerds are still present check their status.
542 # A zombie status qualifies the consumerd as *killed*
543 out=0
544 for consumer_pid in $pid; do
545 state=$(ps -p $consumer_pid -o state= )
546 if [[ -n "$state" && "$state" != "Z" ]]; then
547 out=1
548 fi
549 done
550 sleep 0.5
551 done
552 if [ $withtap -eq "1" ]; then
553 pass "Kill consumer daemon"
554 fi
555 fi
556 return $retval
557 }
558
559 function stop_lttng_consumerd()
560 {
561 stop_lttng_consumerd_opt 1 "$@"
562 }
563
564 function stop_lttng_consumerd_notap()
565 {
566 stop_lttng_consumerd_opt 0 "$@"
567 }
568
569 function sigstop_lttng_consumerd_opt()
570 {
571 local withtap=$1
572 local signal=SIGSTOP
573 local kill_opt=""
574
575 PID_CONSUMERD=`pgrep --full $CONSUMERD_BIN`
576
577 kill_opt="$kill_opt -s $signal"
578
579 if [ $withtap -eq "1" ]; then
580 diag "Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo $PID_CONSUMERD | tr '\n' ' ')"
581 fi
582 kill $kill_opt $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
583 retval=$?
584 set +x
585
586 if [ $? -eq 1 ]; then
587 if [ $withtap -eq "1" ]; then
588 fail "Sending SIGSTOP to consumer daemon"
589 fi
590 return 1
591 else
592 out=1
593 while [ $out -ne 0 ]; do
594 pid=$(pgrep --full $CONSUMERD_BIN)
595
596 # Wait until state becomes stopped for all
597 # consumers.
598 out=0
599 for consumer_pid in $pid; do
600 state=$(ps -p $consumer_pid -o state= )
601 if [[ -n "$state" && "$state" != "T" ]]; then
602 out=1
603 fi
604 done
605 sleep 0.5
606 done
607 if [ $withtap -eq "1" ]; then
608 pass "Sending SIGSTOP to consumer daemon"
609 fi
610 fi
611 return $retval
612 }
613
614 function sigstop_lttng_consumerd()
615 {
616 sigstop_lttng_consumerd_opt 1 "$@"
617 }
618
619 function sigstop_lttng_consumerd_notap()
620 {
621 sigstop_lttng_consumerd_opt 0 "$@"
622 }
623
624 function list_lttng_with_opts ()
625 {
626 local opts=$1
627 $TESTDIR/../src/bin/lttng/$LTTNG_BIN list $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
628 ok $? "Lttng-tool list command with option $opts"
629 }
630
631 function create_lttng_session_no_output ()
632 {
633 local sess_name=$1
634
635 $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $sess_name --no-output 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
636 ok $? "Create session $sess_name in no-output mode"
637 }
638
639 function create_lttng_session ()
640 {
641 local expected_to_fail=$1
642 local sess_name=$2
643 local trace_path=$3
644 local opt=$4
645
646 $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $sess_name -o $trace_path $opt > $OUTPUT_DEST
647 ret=$?
648 if [[ $expected_to_fail -eq "1" ]]; then
649 test "$ret" -ne "0"
650 ok $? "Create session $sess_name in $trace_path failed as expected"
651 else
652 ok $ret "Create session $sess_name in $trace_path"
653 fi
654 }
655
656 function create_lttng_session_ok ()
657 {
658 create_lttng_session 0 "$@"
659 }
660
661 function create_lttng_session_fail ()
662 {
663 create_lttng_session 1 "$@"
664 }
665
666
667 function enable_ust_lttng_channel ()
668 {
669 local expected_to_fail=$1
670 local sess_name=$2
671 local channel_name=$3
672 local opt=$4
673
674 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -u $channel_name -s $sess_name $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
675 ret=$?
676 if [[ $expected_to_fail -eq "1" ]]; then
677 test "$ret" -ne "0"
678 ok $? "Enable channel $channel_name for session $sess_name failed as expected"
679 else
680 ok $ret "Enable channel $channel_name for session $sess_name"
681 fi
682 }
683
684 function enable_ust_lttng_channel_ok ()
685 {
686 enable_ust_lttng_channel 0 "$@"
687 }
688
689 function enable_ust_lttng_channel_fail ()
690 {
691 enable_ust_lttng_channel 1 "$@"
692 }
693
694 function disable_ust_lttng_channel()
695 {
696 local sess_name=$1
697 local channel_name=$2
698
699 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-channel -u $channel_name -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
700 ok $? "Disable channel $channel_name for session $sess_name"
701 }
702
703 function enable_lttng_mmap_overwrite_kernel_channel()
704 {
705 local sess_name=$1
706 local channel_name=$2
707
708 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name $channel_name -k --output mmap --overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
709 ok $? "Enable channel $channel_name for session $sess_name"
710 }
711
712 function enable_lttng_mmap_discard_small_kernel_channel()
713 {
714 local sess_name=$1
715 local channel_name=$2
716
717 $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
718 ok $? "Enable small discard channel $channel_name for session $sess_name"
719 }
720
721 function enable_lttng_mmap_overwrite_small_kernel_channel()
722 {
723 local sess_name=$1
724 local channel_name=$2
725
726 $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
727 ok $? "Enable small discard channel $channel_name for session $sess_name"
728 }
729
730 function enable_lttng_mmap_overwrite_ust_channel()
731 {
732 local sess_name=$1
733 local channel_name=$2
734
735 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name $channel_name -u --output mmap --overwrite 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
736 ok $? "Enable channel $channel_name for session $sess_name"
737 }
738
739 function enable_ust_lttng_event ()
740 {
741 local expected_to_fail=$1
742 local sess_name=$2
743 local event_name="$3"
744 local channel_name=$4
745
746 if [ -z $channel_name ]; then
747 # default channel if none specified
748 chan=""
749 else
750 chan="-c $channel_name"
751 fi
752
753 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
754 ret=$?
755 if [[ $expected_to_fail -eq "1" ]]; then
756 test $ret -ne "0"
757 ok $? "Enable ust event $event_name for session $session_name failed as expected"
758 else
759 ok $ret "Enable ust event $event_name for session $sess_name"
760 fi
761 }
762
763 function enable_ust_lttng_event_ok ()
764 {
765 enable_ust_lttng_event 0 "$@"
766 }
767
768 function enable_ust_lttng_event_fail ()
769 {
770 enable_ust_lttng_event 1 "$@"
771 }
772
773 function enable_jul_lttng_event()
774 {
775 sess_name=$1
776 event_name="$2"
777 channel_name=$3
778
779 if [ -z $channel_name ]; then
780 # default channel if none specified
781 chan=""
782 else
783 chan="-c $channel_name"
784 fi
785
786 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
787 ok $? "Enable JUL event $event_name for session $sess_name"
788 }
789
790 function enable_jul_lttng_event_loglevel()
791 {
792 local sess_name=$1
793 local event_name="$2"
794 local loglevel=$3
795 local channel_name=$4
796
797 if [ -z $channel_name ]; then
798 # default channel if none specified
799 chan=""
800 else
801 chan="-c $channel_name"
802 fi
803
804 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel $loglevel "$event_name" $chan -s $sess_name -j 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
805 ok $? "Enable JUL event $event_name for session $sess_name with loglevel $loglevel"
806 }
807
808 function enable_log4j_lttng_event()
809 {
810 sess_name=$1
811 event_name="$2"
812 channel_name=$3
813
814 if [ -z $channel_name ]; then
815 # default channel if none specified
816 chan=""
817 else
818 chan="-c $channel_name"
819 fi
820
821 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -l 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
822 ok $? "Enable LOG4J event $event_name for session $sess_name"
823 }
824
825 function enable_log4j_lttng_event_loglevel()
826 {
827 local sess_name=$1
828 local event_name="$2"
829 local loglevel=$3
830 local channel_name=$4
831
832 if [ -z $channel_name ]; then
833 # default channel if none specified
834 chan=""
835 else
836 chan="-c $channel_name"
837 fi
838
839 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel $loglevel "$event_name" $chan -s $sess_name -l 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
840 ok $? "Enable LOG4J event $event_name for session $sess_name with loglevel $loglevel"
841 }
842
843 function enable_python_lttng_event()
844 {
845 sess_name=$1
846 event_name="$2"
847 channel_name=$3
848
849 if [ -z $channel_name ]; then
850 # default channel if none specified
851 chan=""
852 else
853 chan="-c $channel_name"
854 fi
855
856 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
857 ok $? "Enable Python event $event_name for session $sess_name"
858 }
859
860 function enable_python_lttng_event_loglevel()
861 {
862 local sess_name=$1
863 local event_name="$2"
864 local loglevel=$3
865 local channel_name=$4
866
867 if [ -z $channel_name ]; then
868 # default channel if none specified
869 chan=""
870 else
871 chan="-c $channel_name"
872 fi
873
874 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel $loglevel "$event_name" $chan -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
875 ok $? "Enable Python event $event_name for session $sess_name with loglevel $loglevel"
876 }
877
878 function enable_ust_lttng_event_filter()
879 {
880 local sess_name="$1"
881 local event_name="$2"
882 local filter="$3"
883
884 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
885 ok $? "Enable event $event_name with filtering for session $sess_name"
886 }
887
888 function enable_ust_lttng_event_loglevel()
889 {
890 local sess_name="$1"
891 local event_name="$2"
892 local loglevel="$3"
893
894 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --loglevel $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
895 ok $? "Enable event $event_name with loglevel $loglevel"
896 }
897
898 function enable_ust_lttng_event_loglevel_only()
899 {
900 local sess_name="$1"
901 local event_name="$2"
902 local loglevel="$3"
903
904 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --loglevel-only $loglevel 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
905 ok $? "Enable event $event_name with loglevel-only $loglevel"
906 }
907
908 function disable_ust_lttng_event ()
909 {
910 local sess_name="$1"
911 local event_name="$2"
912 local channel_name="$3"
913
914 if [ -z $channel_name ]; then
915 # default channel if none specified
916 chan=""
917 else
918 chan="-c $channel_name"
919 fi
920
921 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name $chan -u 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
922 ok $? "Disable event $event_name for session $sess_name"
923 }
924
925 function disable_jul_lttng_event ()
926 {
927 local sess_name="$1"
928 local event_name="$2"
929
930 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name -j >/dev/null 2>&1
931 ok $? "Disable JUL event $event_name for session $sess_name"
932 }
933
934 function disable_log4j_lttng_event ()
935 {
936 local sess_name="$1"
937 local event_name="$2"
938
939 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name -l >/dev/null 2>&1
940 ok $? "Disable LOG4J event $event_name for session $sess_name"
941 }
942
943 function disable_python_lttng_event ()
944 {
945 local sess_name="$1"
946 local event_name="$2"
947
948 $TESTDIR/../src/bin/lttng/$LTTNG_BIN disable-event "$event_name" -s $sess_name -p 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
949 ok $? "Disable Python event $event_name for session $sess_name"
950 }
951
952 function start_lttng_tracing ()
953 {
954 local expected_to_fail=$1
955 local sess_name=$2
956
957 $TESTDIR/../src/bin/lttng/$LTTNG_BIN start $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
958 ret=$?
959 if [[ $expected_to_fail -eq "1" ]]; then
960 test "$ret" -ne "0"
961 ok $? "Start tracing for session $sess_name failed as expected"
962 else
963 ok $ret "Start tracing for session $sess_name"
964 fi
965 }
966
967 function start_lttng_tracing_ok ()
968 {
969 start_lttng_tracing 0 "$@"
970 }
971
972 function start_lttng_tracing_fail ()
973 {
974 start_lttng_tracing 1 "$@"
975 }
976
977 function stop_lttng_tracing ()
978 {
979 local expected_to_fail=$1
980 local sess_name=$2
981
982 $TESTDIR/../src/bin/lttng/$LTTNG_BIN stop $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
983 ret=$?
984 if [[ $expected_to_fail -eq "1" ]]; then
985 test "$ret" -ne "0"
986 ok $? "Stop lttng tracing for session $sess_name failed as expected"
987 else
988 ok $ret "Stop lttng tracing for session $sess_name"
989 fi
990 }
991
992 function stop_lttng_tracing_ok ()
993 {
994 stop_lttng_tracing 0 "$@"
995 }
996
997 function stop_lttng_tracing_fail ()
998 {
999 stop_lttng_tracing 1 "$@"
1000 }
1001
1002 function destroy_lttng_session ()
1003 {
1004 local expected_to_fail=$1
1005 local sess_name=$2
1006
1007 $TESTDIR/../src/bin/lttng/$LTTNG_BIN destroy $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1008 ret=$?
1009 if [[ $expected_to_fail -eq "1" ]]; then
1010 test "$ret" -ne "0"
1011 ok $? "Destroy session $sess_name failed as expected"
1012 else
1013 ok $ret "Destroy session $sess_name"
1014 fi
1015 }
1016
1017 function destroy_lttng_session_ok ()
1018 {
1019 destroy_lttng_session 0 "$@"
1020
1021 }
1022
1023 function destroy_lttng_session_fail ()
1024 {
1025 destroy_lttng_session 1 "$@"
1026 }
1027
1028
1029 function destroy_lttng_sessions ()
1030 {
1031 $TESTDIR/../src/bin/lttng/$LTTNG_BIN destroy --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1032 ok $? "Destroy all lttng sessions"
1033 }
1034
1035 function lttng_snapshot_add_output ()
1036 {
1037 local expected_to_fail=$1
1038 local sess_name=$2
1039 local trace_path=$3
1040
1041 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot add-output -s $sess_name file://$trace_path 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1042 ret=$?
1043 if [[ $expected_to_fail -eq 1 ]]; then
1044 test "$ret" -ne "0"
1045 ok $? "Added snapshot output file://$trace_path failed as expected"
1046 else
1047 ok $ret "Added snapshot output file://$trace_path"
1048 fi
1049 }
1050
1051 function lttng_snapshot_add_output_ok ()
1052 {
1053 lttng_snapshot_add_output 0 "$@"
1054 }
1055
1056 function lttng_snapshot_add_output_fail ()
1057 {
1058 lttng_snapshot_add_output 1 "$@"
1059 }
1060
1061 function lttng_snapshot_del_output ()
1062 {
1063 local expected_to_fail=$1
1064 local sess_name=$2
1065 local id=$3
1066
1067 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot del-output -s $sess_name $id 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1068 ret=$?
1069 if [[ $expected_to_fail -eq "1" ]]; then
1070 test "$ret" -ne "0"
1071 ok $? "Deleted snapshot output id $id failed as expected"
1072 else
1073 ok $ret "Deleted snapshot output id $id"
1074 fi
1075 }
1076
1077 function lttng_snapshot_del_output_ok ()
1078 {
1079 lttng_snapshot_del_output 0 "$@"
1080 }
1081
1082 function lttng_snapshot_del_output_fail ()
1083 {
1084 lttng_snapshot_del_output 1 "$@"
1085 }
1086
1087 function lttng_snapshot_record ()
1088 {
1089 local sess_name=$1
1090 local trace_path=$2
1091
1092 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1093 ok $? "Snapshot recorded"
1094 }
1095
1096 function lttng_snapshot_list ()
1097 {
1098 local sess_name=$1
1099 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot list-output -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1100 ok $? "Snapshot list"
1101 }
1102
1103 function lttng_save()
1104 {
1105 local sess_name=$1
1106 local opts=$2
1107
1108 $TESTDIR/../src/bin/lttng/$LTTNG_BIN save $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1109 ok $? "Session saved"
1110 }
1111
1112 function lttng_load()
1113 {
1114 local opts=$1
1115
1116 $TESTDIR/../src/bin/lttng/$LTTNG_BIN load $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1117 ok $? "Load command with opts: $opts"
1118 }
1119
1120 function lttng_track()
1121 {
1122 local expected_to_fail=$1
1123 local opts=$2
1124 $TESTDIR/../src/bin/lttng/$LTTNG_BIN track $opts >$OUTPUT_DEST
1125 ret=$?
1126 if [[ $expected_to_fail -eq "1" ]]; then
1127 test $ret -ne "0"
1128 ok $? "Track command failed as expected with opts: $opts"
1129 else
1130 ok $ret "Track command with opts: $opts"
1131 fi
1132 }
1133
1134 function lttng_track_ok()
1135 {
1136 lttng_track 0 "$@"
1137 }
1138
1139 function lttng_track_fail()
1140 {
1141 lttng_track 1 "$@"
1142 }
1143
1144 function lttng_untrack()
1145 {
1146 local expected_to_fail=$1
1147 local opts=$2
1148 $TESTDIR/../src/bin/lttng/$LTTNG_BIN untrack $opts >$OUTPUT_DEST
1149 ret=$?
1150 if [[ $expected_to_fail -eq "1" ]]; then
1151 test $ret -ne "0"
1152 ok $? "Untrack command failed as expected with opts: $opts"
1153 else
1154 ok $ret "Untrack command with opts: $opts"
1155 fi
1156 }
1157
1158 function lttng_untrack_ok()
1159 {
1160 lttng_untrack 0 "$@"
1161 }
1162
1163 function lttng_untrack_fail()
1164 {
1165 lttng_untrack 1 "$@"
1166 }
1167
1168 function add_context_lttng()
1169 {
1170 local expected_to_fail="$1"
1171 local domain="$2"
1172 local session_name="$3"
1173 local channel_name="$4"
1174 local type="$5"
1175
1176 $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-context -s $session_name -c $channel_name -t $type $domain 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1177 ret=$?
1178 if [[ $expected_to_fail -eq "1" ]]; then
1179 test $ret -ne "0"
1180 ok $? "Add context command failed as expected for type: $type"
1181 else
1182 ok $ret "Add context command for type: $type"
1183 fi
1184 }
1185
1186 function add_context_ust_ok()
1187 {
1188 add_context_lttng 0 -u "$@"
1189 }
1190
1191 function add_context_ust_fail()
1192 {
1193 add_context_lttng 1 -u "$@"
1194 }
1195
1196 function add_context_kernel_ok()
1197 {
1198 add_context_lttng 0 -k "$@"
1199 }
1200
1201 function add_context_kernel_fail()
1202 {
1203 add_context_lttng 1 -k "$@"
1204 }
1205
1206 function trace_matches ()
1207 {
1208 local event_name=$1
1209 local nr_iter=$2
1210 local trace_path=$3
1211
1212 which $BABELTRACE_BIN >/dev/null
1213 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1214
1215 local count=$($BABELTRACE_BIN $trace_path | grep $event_name | wc -l)
1216
1217 if [ "$count" -ne "$nr_iter" ]; then
1218 fail "Trace match"
1219 diag "$count events found in trace"
1220 else
1221 pass "Trace match"
1222 fi
1223 }
1224
1225 function trace_match_only()
1226 {
1227 local event_name=$1
1228 local nr_iter=$2
1229 local trace_path=$3
1230
1231 which $BABELTRACE_BIN >/dev/null
1232 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1233
1234 local count=$($BABELTRACE_BIN $trace_path | grep $event_name | wc -l)
1235 local total=$($BABELTRACE_BIN $trace_path | wc -l)
1236
1237 if [ "$nr_iter" -eq "$count" ] && [ "$total" -eq "$nr_iter" ]; then
1238 pass "Trace match with $total event $event_name"
1239 else
1240 fail "Trace match"
1241 diag "$total event(s) found, expecting $nr_iter of event $event_name and only found $count"
1242 fi
1243 }
1244
1245 function validate_trace
1246 {
1247 local event_name=$1
1248 local trace_path=$2
1249
1250 which $BABELTRACE_BIN >/dev/null
1251 if [ $? -ne 0 ]; then
1252 skip 0 "Babeltrace binary not found. Skipping trace validation"
1253 fi
1254
1255 OLDIFS=$IFS
1256 IFS=","
1257 for i in $event_name; do
1258 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
1259 if [ "$traced" -ne 0 ]; then
1260 pass "Validate trace for event $i, $traced events"
1261 else
1262 fail "Validate trace for event $i"
1263 diag "Found $traced occurences of $i"
1264 fi
1265 done
1266 ret=$?
1267 IFS=$OLDIFS
1268 return $ret
1269 }
1270
1271 function trace_first_line
1272 {
1273 local trace_path=$1
1274
1275 which $BABELTRACE_BIN >/dev/null
1276 if [ $? -ne 0 ]; then
1277 skip 0 "Babeltrace binary not found. Skipping trace validation"
1278 fi
1279
1280 $BABELTRACE_BIN $trace_path 2>/dev/null | head -n 1
1281 }
1282
1283 function validate_trace_exp()
1284 {
1285 local event_exp=$1
1286 local trace_path=$2
1287
1288 which $BABELTRACE_BIN >/dev/null
1289 skip $? -ne 0 "Babeltrace binary not found. Skipping trace validation"
1290
1291 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep ${event_exp} | wc -l)
1292 if [ "$traced" -ne 0 ]; then
1293 pass "Validate trace for expression '${event_exp}', $traced events"
1294 else
1295 fail "Validate trace for expression '${event_exp}'"
1296 diag "Found $traced occurences of '${event_exp}'"
1297 fi
1298 ret=$?
1299 return $ret
1300 }
1301
1302 function validate_trace_only_exp()
1303 {
1304 local event_exp=$1
1305 local trace_path=$2
1306
1307 which $BABELTRACE_BIN >/dev/null
1308 skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
1309
1310 local count=$($BABELTRACE_BIN $trace_path | grep ${event_exp} | wc -l)
1311 local total=$($BABELTRACE_BIN $trace_path | wc -l)
1312
1313 if [ "$count" -ne 0 ] && [ "$total" -eq "$count" ]; then
1314 pass "Trace match with $total for expression '${event_exp}"
1315 else
1316 fail "Trace match"
1317 diag "$total syscall event(s) found, only syscalls matching expression '${event_exp}' ($count occurrences) are expected"
1318 fi
1319 ret=$?
1320 return $ret
1321 }
1322
1323 function validate_trace_empty()
1324 {
1325 local trace_path=$1
1326
1327 which $BABELTRACE_BIN >/dev/null
1328 if [ $? -ne 0 ]; then
1329 skip 0 "Babeltrace binary not found. Skipping trace validation"
1330 fi
1331
1332 traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | wc -l)
1333 if [ "$traced" -eq 0 ]; then
1334 pass "Validate empty trace"
1335 else
1336 fail "Validate empty trace"
1337 diag "Found $traced events in trace"
1338 fi
1339 ret=$?
1340 return $ret
1341 }
1342
1343 function metadata_regenerate ()
1344 {
1345 local expected_to_fail=$1
1346 local sess_name=$2
1347
1348 $TESTDIR/../src/bin/lttng/$LTTNG_BIN metadata regenerate -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
1349 ret=$?
1350 if [[ $expected_to_fail -eq "1" ]]; then
1351 test "$ret" -ne "0"
1352 ok $? "Expected fail on regenerate $sess_name"
1353 else
1354 ok $ret "Metadata regenerate $sess_name"
1355 fi
1356 }
1357
1358 function metadata_regenerate_ok ()
1359 {
1360 metadata_regenerate 0 "$@"
1361 }
1362
1363 function metadata_regenerate_fail ()
1364 {
1365 metadata_regenerate 1 "$@"
1366 }
1367
1368 function destructive_tests_enabled ()
1369 {
1370 if [ ${LTTNG_ENABLE_DESTRUCTIVE_TESTS} = "will-break-my-system" ]; then
1371 return 0
1372 else
1373 return 1
1374 fi
1375 }
This page took 0.057972 seconds and 6 git commands to generate.