3 # Copyright (C) - 2012 Christian Babeux <christian.babeux@efficios.com>
5 # This program is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License, version 2 only, as
7 # published by the Free Software Foundation.
9 # This program is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 # You should have received a copy of the GNU General Public License along with
15 # this program; if not, write to the Free Software Foundation, Inc., 51
16 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 TEST_DESC
="Filtering - Valid filters"
21 TESTDIR
=$CURDIR/..
/..
/..
23 STATS_BIN
="$TESTDIR/utils/babelstats.pl"
24 SESSION_NAME
="valid_filter"
29 NUM_TESTS
=$
(($NUM_UST_TESTS+$NUM_KERNEL_TESTS+$NUM_GLOBAL_TESTS))
31 source $TESTDIR/utils
/utils.sh
33 function enable_lttng_event_filter
()
40 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
$event_name \
41 -s $sess_name $domain --filter "$filter" 2>&1 >/dev
/null
42 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN add-context \
43 -s $sess_name $domain -t procname
2>&1 >/dev
/null
45 ok $?
"Enable lttng event with filtering"
50 .
/$CURDIR/$BIN_NAME $NR_ITER >/dev
/null
2>&1
55 # Trigger the event for 100 iterations
56 echo -n "100" > /proc
/lttng-test-filter-event
59 function test_valid_filter
67 diag
"Test valid $domain_name filter: $filter"
69 trace_path
=$
(mktemp
-d)
72 create_lttng_session_ok
$SESSION_NAME $trace_path
75 enable_lttng_event_filter
$domain $SESSION_NAME "$event_name" "$filter"
78 start_lttng_tracing_ok
$SESSION_NAME
80 stop_lttng_tracing_ok
$SESSION_NAME
83 destroy_lttng_session_ok
$SESSION_NAME
85 stats
=`babeltrace $trace_path | $STATS_BIN --tracepoint $event_name`
91 ok $?
"Validate trace filter output"
96 function validate_min_max
103 echo $stats |
grep -q "$field $expected_min $expected_max"
108 function validator_intfield
113 validate_min_max
"$stats" "intfield" "1" "99"
114 status
=$
(($status|$?
))
116 validate_min_max
"$stats" "intfield2" "0x1" "0x63"
117 status
=$
(($status|$?
))
119 validate_min_max
"$stats" "longfield" "1" "99"
120 status
=$
(($status|$?
))
122 validate_min_max
"$stats" "netintfield" "1" "99"
123 status
=$
(($status|$?
))
125 validate_min_max
"$stats" "netintfieldhex" "0x1" "0x63"
126 status
=$
(($status|$?
))
128 if [ $KERNEL_CHECK -eq 0 ]; then
129 validate_min_max
"$stats" "floatfield" "2222" "2222"
130 status
=$
(($status|$?
))
132 validate_min_max
"$stats" "doublefield" "2" "2"
133 status
=$
(($status|$?
))
139 function validator_intfield_gt
144 validate_min_max
"$stats" "intfield" "2" "99"
145 status
=$
(($status|$?
))
150 function validator_has_no_event
155 validate_min_max
"$stats" "intfield" "0" "99"
156 status
=$
(($status|$?
))
158 if [ $status -eq 0 ]; then
165 function validator_has_events
170 validate_min_max
"$stats" "intfield" "0" "99"
171 status
=$
(($status|$?
))
176 function validator_intfield_ge
181 validate_min_max
"$stats" "intfield" "1" "99"
182 status
=$
(($status|$?
))
187 function validator_intfield_lt
192 validate_min_max
"$stats" "intfield" "0" "1"
193 status
=$
(($status|$?
))
198 function validator_intfield_le
203 validate_min_max
"$stats" "intfield" "0" "2"
204 status
=$
(($status|$?
))
209 function validator_intfield_eq
214 validate_min_max
"$stats" "intfield" "1" "1"
215 status
=$
(($status|$?
))
220 function validator_intfield_ne
225 validate_min_max
"$stats" "intfield" "0" "98"
226 status
=$
(($status|$?
))
231 function validator_intfield_not
236 validate_min_max
"$stats" "intfield" "0" "0"
237 status
=$
(($status|$?
))
242 function validator_intfield_gt_and_longfield_gt
247 validate_min_max
"$stats" "intfield" "43" "99"
248 status
=$
(($status|$?
))
249 validate_min_max
"$stats" "longfield" "43" "99"
250 status
=$
(($status|$?
))
255 function validator_intfield_ge_and_longfield_le
260 validate_min_max
"$stats" "intfield" "42" "42"
261 status
=$
(($status|$?
))
262 validate_min_max
"$stats" "longfield" "42" "42"
263 status
=$
(($status|$?
))
268 function validator_intfield_lt_or_longfield_gt
273 validate_min_max
"$stats" "intfield" "0" "99"
274 status
=$
(($status|$?
))
275 validate_min_max
"$stats" "longfield" "0" "99"
276 status
=$
(($status|$?
))
281 function validator_mixed_str_or_int_and_int
286 validate_min_max
"$stats" "intfield" "34" "99"
287 status
=$
(($status|$?
))
289 validate_min_max
"$stats" "stringfield" "\"test\"" "\"test\""
290 status
=$
(($status|$?
))
295 function validator_mixed_int_double
300 validate_min_max
"$stats" "intfield" "0" "42"
301 status
=$
(($status|$?
))
306 function validator_true_statement
311 validate_min_max
"$stats" "intfield" "0" "99"
312 status
=$
(($status|$?
))
314 validate_min_max
"$stats" "intfield2" "0x0" "0x63"
315 status
=$
(($status|$?
))
317 validate_min_max
"$stats" "longfield" "0" "99"
318 status
=$
(($status|$?
))
320 validate_min_max
"$stats" "netintfield" "0" "99"
321 status
=$
(($status|$?
))
323 validate_min_max
"$stats" "netintfieldhex" "0x0" "0x63"
324 status
=$
(($status|$?
))
326 if [ $KERNEL_CHECK -eq 0 ]; then
327 validate_min_max
"$stats" "floatfield" "2222" "2222"
328 status
=$
(($status|$?
))
330 validate_min_max
"$stats" "doublefield" "2" "2"
331 status
=$
(($status|$?
))
334 validate_min_max
"$stats" "stringfield" "\"test\"" "\"test\""
335 status
=$
(($status|$?
))
337 validate_min_max
"$stats" "stringfield2" ""\
*"" ""\
*""
338 status
=$
(($status|$?
))
343 plan_tests
$NUM_TESTS
345 print_test_banner
"$TEST_DESC"
347 issue_356_filter
="intfield > 0 && intfield > 1 && "
348 issue_356_filter
+="intfield > 2 && intfield > 3 && "
349 issue_356_filter
+="intfield > 4 && intfield > 5 && "
350 issue_356_filter
+="intfield > 6 && intfield > 7 && "
351 issue_356_filter
+="intfield > 8 || intfield > 0"
357 BIN_NAME
="gen-ust-events"
359 # One to one mapping between filters and validators
361 # Set IFS to newline to facilitate array declaration
364 UST_FILTERS
=("intfield" #1
376 "intfield > 1 && longfield > 42" #13
377 "intfield >= 42 && longfield <= 42" #14
378 "intfield < 1 || longfield > 98" #15
379 "(stringfield == \"test\" || intfield != 10) && intfield > 33" #16
380 "intfield < 42.4242424242" #17
381 "\"test\" == \"test\"" #18 #Issue #342
382 "stringfield == \"test\"" #19
383 "stringfield == \"t*\"" #20
384 "stringfield == \"*\"" #21
385 $issue_356_filter #22 #Issue #356
386 "intfield < 0xDEADBEEF" #23
389 "stringfield2 == \"\\\*\"" #26
390 "1.0 || intfield || 1.0" #27
392 "\$ctx.vtid == 0" #29
393 "\$ctx.vtid != 0" #30
394 "0 == \$ctx.vtid" #31
395 "0 != \$ctx.vtid" #32
396 "\$ctx.vpid == 0" #33
397 "\$ctx.vpid != 0" #34
398 "0 == \$ctx.vpid" #35
399 "0 != \$ctx.vpid" #36
400 "\$ctx.procname != \"$BIN_NAME\"" #37
401 "\$ctx.procname == \"$BIN_NAME\"" #38
402 "\"$BIN_NAME\" != \$ctx.procname" #39
403 "\"$BIN_NAME\" == \$ctx.procname" #40
404 "\$ctx.procname != \"$BIN_NAME*\"" #41
405 "\$ctx.procname == \"$BIN_NAME*\"" #42
406 "\"$BIN_NAME*\" != \$ctx.procname" #43
407 "\"$BIN_NAME*\" == \$ctx.procname" #44
408 "\$ctx.procname != \"*\"" #45
409 "\$ctx.procname == \"*\"" #46
410 "\"*\" != \$ctx.procname" #47
411 "\"*\" == \$ctx.procname" #48
414 UST_FILTER_COUNT
=${#UST_FILTERS[@]}
416 if [ ! -x "$CURDIR/$BIN_NAME" ]; then
417 BAIL_OUT
"No UST nevents binary detected."
420 UST_VALIDATOR
=("validator_intfield" #1
421 "validator_intfield_gt" #2
422 "validator_intfield_ge" #3
423 "validator_intfield_lt" #4
424 "validator_intfield_le" #5
425 "validator_intfield_eq" #6
426 "validator_intfield_ne" #7
427 "validator_intfield_not" #8
428 "validator_intfield" #9
429 "validator_intfield" #10
430 "validator_intfield" #11
431 "validator_intfield" #12
432 "validator_intfield_gt_and_longfield_gt" #13
433 "validator_intfield_ge_and_longfield_le" #14
434 "validator_intfield_lt_or_longfield_gt" #15
435 "validator_mixed_str_or_int_and_int" #16
436 "validator_mixed_int_double" #17
437 "validator_true_statement" #18
438 "validator_true_statement" #19
439 "validator_true_statement" #20
440 "validator_true_statement" #21
441 "validator_intfield" #22
442 "validator_true_statement" #23
443 "validator_intfield_lt" #24
444 "validator_intfield_lt" #25
445 "validator_true_statement" #26
446 "validator_true_statement" #27
447 "validator_intfield_gt" #28
448 "validator_has_no_event" #29
449 "validator_has_events" #30
450 "validator_has_no_event" #31
451 "validator_has_events" #32
452 "validator_has_no_event" #33
453 "validator_has_events" #34
454 "validator_has_no_event" #35
455 "validator_has_events" #36
456 "validator_has_no_event" #36
457 "validator_has_events" #37
458 "validator_has_no_event" #38
459 "validator_has_events" #39
460 "validator_has_no_event" #41
461 "validator_has_events" #42
462 "validator_has_no_event" #43
463 "validator_has_events" #44
464 "validator_has_no_event" #45
465 "validator_has_events" #46
466 "validator_has_no_event" #47
467 "validator_has_events" #48
472 diag
"Test UST valid filters"
476 while [ "$i" -lt "$UST_FILTER_COUNT" ]; do
478 test_valid_filter ust
-u "tp:tptest" "${UST_FILTERS[$i]}" "${UST_VALIDATOR[$i]}"
480 if [ $?
-eq 1 ]; then
491 BIN_NAME
="test_valid_filt" # Current script name truncated by kernel
493 # One to one mapping between filters and validators
494 # Set IFS to newline to facilitate array declaration
497 KERNEL_FILTERS
=("intfield" #1
509 "intfield > 1 && longfield > 42" #13
510 "intfield >= 42 && longfield <= 42" #14
511 "intfield < 1 || longfield > 98" #15
512 "(stringfield == \"test\" || intfield != 10) && intfield > 33" #16
513 "intfield < 42.4242424242" #17
514 "\"test\" == \"test\"" #18 #Issue #342
515 "stringfield == \"test\"" #19
516 "stringfield == \"t*\"" #20
517 "stringfield == \"*\"" #21
518 $issue_356_filter #22 #Issue #356
519 "intfield < 0xDEADBEEF" #23
522 "stringfield2 == \"\\\*\"" #26
523 "1.0 || intfield || 1.0" #27
525 "\$ctx.vtid == 0" #29
526 "\$ctx.vtid != 0" #30
527 "0 == \$ctx.vtid" #31
528 "0 != \$ctx.vtid" #32
529 "\$ctx.vpid == 0" #33
530 "\$ctx.vpid != 0" #34
531 "0 == \$ctx.vpid" #35
532 "0 != \$ctx.vpid" #36
533 "\$ctx.procname != \"$BIN_NAME\"" #37
534 "\$ctx.procname == \"$BIN_NAME\"" #38
535 "\"$BIN_NAME\" != \$ctx.procname" #39
536 "\"$BIN_NAME\" == \$ctx.procname" #40
537 "\$ctx.procname != \"$BIN_NAME*\"" #41
538 "\$ctx.procname == \"$BIN_NAME*\"" #42
539 "\"$BIN_NAME*\" != \$ctx.procname" #43
540 "\"$BIN_NAME*\" == \$ctx.procname" #44
541 "\$ctx.procname != \"*\"" #45
542 "\$ctx.procname == \"*\"" #46
543 "\"*\" != \$ctx.procname" #47
544 "\"*\" == \$ctx.procname" #48
547 KERNEL_FILTER_COUNT
=${#KERNEL_FILTERS[@]}
549 KERNEL_VALIDATOR
=("validator_intfield" #1
550 "validator_intfield_gt" #2
551 "validator_intfield_ge" #3
552 "validator_intfield_lt" #4
553 "validator_intfield_le" #5
554 "validator_intfield_eq" #6
555 "validator_intfield_ne" #7
556 "validator_intfield_not" #8
557 "validator_intfield" #9
558 "validator_intfield" #10
559 "validator_intfield" #11
560 "validator_intfield" #12
561 "validator_intfield_gt_and_longfield_gt" #13
562 "validator_intfield_ge_and_longfield_le" #14
563 "validator_intfield_lt_or_longfield_gt" #15
564 "validator_mixed_str_or_int_and_int" #16
565 "validator_has_no_event" #17 #Unsupported by kernel
566 "validator_true_statement" #18
567 "validator_true_statement" #19
568 "validator_true_statement" #20
569 "validator_true_statement" #21
570 "validator_intfield" #22
571 "validator_true_statement" #23
572 "validator_intfield_lt" #24
573 "validator_intfield_lt" #25
574 "validator_true_statement" #26
575 "validator_has_no_event" #27 #Unsupported by kernel
576 "validator_intfield_gt" #28
577 "validator_has_no_event" #29
578 "validator_has_events" #30
579 "validator_has_no_event" #31
580 "validator_has_events" #32
581 "validator_has_no_event" #33
582 "validator_has_events" #34
583 "validator_has_no_event" #35
584 "validator_has_events" #36
585 "validator_has_no_event" #36
586 "validator_has_events" #37
587 "validator_has_no_event" #38
588 "validator_has_events" #39
589 "validator_has_no_event" #41
590 "validator_has_events" #42
591 "validator_has_no_event" #43
592 "validator_has_events" #44
593 "validator_has_no_event" #45
594 "validator_has_events" #46
595 "validator_has_no_event" #47
596 "validator_has_events" #48
601 if [ "$(id -u)" == "0" ]; then
607 skip
$isroot "Root access is needed. Skipping all kernel valid filter tests." $NUM_KERNEL_TESTS ||
609 diag
"Test kernel valid filters"
614 while [ "$i" -lt "$KERNEL_FILTER_COUNT" ]; do
616 test_valid_filter kernel
-k "lttng_test_filter_event" \
617 "${KERNEL_FILTERS[$i]}" "${KERNEL_VALIDATOR[$i]}"
619 if [ $?
-eq 1 ]; then