Tests: use babeltrace2 for all tests
[lttng-tools.git] / tests / regression / tools / filtering / test_valid_filter
CommitLineData
9fec62f7
CB
1#!/bin/bash
2#
9d16b343 3# Copyright (C) 2012 Christian Babeux <christian.babeux@efficios.com>
9fec62f7 4#
9d16b343 5# SPDX-License-Identifier: GPL-2.0-only
9fec62f7 6#
9fec62f7
CB
7
8TEST_DESC="Filtering - Valid filters"
9
10CURDIR=$(dirname $0)/
9ac429ef 11TESTDIR=$CURDIR/../../..
9d806fbf 12STATS_BIN="$TESTDIR/utils/babelstats.pl"
9fec62f7 13SESSION_NAME="valid_filter"
9fec62f7 14NR_ITER=100
f6788fc4 15NUM_GLOBAL_TESTS=2
c99adc64
MD
16NUM_UST_TESTS=1122
17NUM_KERNEL_TESTS=1056
f6788fc4 18NUM_TESTS=$(($NUM_UST_TESTS+$NUM_KERNEL_TESTS+$NUM_GLOBAL_TESTS))
9fec62f7 19
9ac429ef 20source $TESTDIR/utils/utils.sh
9fec62f7 21
f6788fc4 22function enable_lttng_event_filter()
9fec62f7 23{
f6788fc4
MD
24 domain="$1"
25 sess_name="$2"
26 event_name="$3"
27 filter="$4"
9fec62f7 28
f6788fc4
MD
29 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $event_name \
30 -s $sess_name $domain --filter "$filter" 2>&1 >/dev/null
31 $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-context \
32 -s $sess_name $domain -t procname 2>&1 >/dev/null
9fec62f7 33
03276eea 34 ok $? "Enable lttng event with filtering"
9fec62f7
CB
35}
36
f6788fc4 37function run_ust
9fec62f7 38{
d7ee608c 39 ./$CURDIR/$BIN_NAME $NR_ITER >/dev/null 2>&1
9fec62f7
CB
40}
41
ec7fe110
PP
42function run_ust_str
43{
44 $TESTDIR/utils/testapp/gen-ust-nevents-str/gen-ust-nevents-str $NR_ITER \
45 hypothec \
46 hypotheca \
47 hypothecary \
48 hypothecate \
49 hypothecation \
50 hypothecator \
51 hypothecium \
52 hypothenar \
53 hypothenuse \
54 hypothermal \
55 hypothermia \
56 hypothermic \
57 hypotheses \
58 hypothesis \
59 hypothesise \
60 hypothesised \
61 hypothesises \
62 hypothesize \
63 hypothesizing \
64 hypothetic \
65 electrothermic \
66 endothermic \
67 exothermic \
68 geothermic \
69 apothecary \
70 hypothecary \
71 peccary \
72 scary \
73 actinomycosis \
74 adenohypophysis \
75 adiposis \
76 emesis \
77 emphasis \
78 conformal \
79 coseismal \
80 decimal \
81 dermal
82}
83
f6788fc4
MD
84function run_kernel
85{
86 # Trigger the event for 100 iterations
87 echo -n "100" > /proc/lttng-test-filter-event
88}
89
9fec62f7
CB
90function test_valid_filter
91{
f6788fc4
MD
92 domain_name="$1"
93 domain="$2"
94 event_name="$3"
95 filter="$4"
96 validator="$5"
33e55711 97 local trace_path=$(mktemp --tmpdir -d tmp.test_filtering_invalid_filters_trace_path.XXXXXX)
9fec62f7 98
f6788fc4 99 diag "Test valid $domain_name filter: $filter"
9fec62f7 100
9fec62f7 101 # Create session
bf6ae429 102 create_lttng_session_ok $SESSION_NAME $trace_path
9fec62f7
CB
103
104 # Enable filter
80744d94 105 enable_lttng_event_filter $domain $SESSION_NAME "$event_name" "$filter"
9fec62f7
CB
106
107 # Trace apps
e563bbdb 108 start_lttng_tracing_ok $SESSION_NAME
f6788fc4 109 run_$domain_name
96340a01 110 stop_lttng_tracing_ok $SESSION_NAME
9fec62f7
CB
111
112 # Destroy session
67b4c664 113 destroy_lttng_session_ok $SESSION_NAME
9fec62f7 114
c125de8f 115 stats=`"$BABELTRACE_BIN" $trace_path | $STATS_BIN --tracepoint $event_name`
9fec62f7 116
3bae2c9a
DG
117 rm -rf $trace_path
118
9fec62f7
CB
119 $validator "$stats"
120
03276eea
CB
121 ok $? "Validate trace filter output"
122
123 rm -rf $trace_path
9fec62f7
CB
124}
125
126function validate_min_max
127{
128 stats="$1"
129 field=$2
130 expected_min=$3
131 expected_max=$4
132
133 echo $stats | grep -q "$field $expected_min $expected_max"
134
135 return $?
136}
137
138function validator_intfield
139{
140 stats="$1"
141 status=0
142
143 validate_min_max "$stats" "intfield" "1" "99"
144 status=$(($status|$?))
145
146 validate_min_max "$stats" "intfield2" "0x1" "0x63"
147 status=$(($status|$?))
148
149 validate_min_max "$stats" "longfield" "1" "99"
150 status=$(($status|$?))
151
152 validate_min_max "$stats" "netintfield" "1" "99"
153 status=$(($status|$?))
154
155 validate_min_max "$stats" "netintfieldhex" "0x1" "0x63"
156 status=$(($status|$?))
157
f6788fc4
MD
158 if [ $KERNEL_CHECK -eq 0 ]; then
159 validate_min_max "$stats" "floatfield" "2222" "2222"
160 status=$(($status|$?))
9fec62f7 161
f6788fc4
MD
162 validate_min_max "$stats" "doublefield" "2" "2"
163 status=$(($status|$?))
164 fi
9fec62f7
CB
165
166 return $status
167}
168
169function validator_intfield_gt
170{
171 stats="$1"
172 status=0
173
174 validate_min_max "$stats" "intfield" "2" "99"
175 status=$(($status|$?))
176
177 return $status
178}
179
6d5d85c7
MD
180function validator_has_no_event
181{
182 stats="$1"
183 status=0
184
185 validate_min_max "$stats" "intfield" "0" "99"
186 status=$(($status|$?))
187
188 if [ $status -eq 0 ]; then
189 return 1
190 else
191 return 0
192 fi
193}
194
ec7fe110
PP
195function validator_str_has_no_event
196{
197 validator_has_no_event "$1"
198}
199
6d5d85c7
MD
200function validator_has_events
201{
202 stats="$1"
203 status=0
204
205 validate_min_max "$stats" "intfield" "0" "99"
206 status=$(($status|$?))
207
208 return $status
209}
210
ec7fe110
PP
211function validator_str_has_events
212{
213 stats="$1"
214 status=0
215
216 echo $stats | grep -q str
217 status=$(($status|$?))
218
219 return $status
220}
221
222function validator_stringfield_has_events
223{
224 stats="$1"
225 status=0
226
227 echo $stats | grep -q stringfield
228 status=$(($status|$?))
229
230 return $status
231}
232
9fec62f7
CB
233function validator_intfield_ge
234{
235 stats="$1"
236 status=0
237
238 validate_min_max "$stats" "intfield" "1" "99"
239 status=$(($status|$?))
240
241 return $status
242}
243
244function validator_intfield_lt
245{
246 stats="$1"
247 status=0
248
249 validate_min_max "$stats" "intfield" "0" "1"
250 status=$(($status|$?))
251
252 return $status
253}
254
255function validator_intfield_le
256{
257 stats="$1"
258 status=0
259
260 validate_min_max "$stats" "intfield" "0" "2"
261 status=$(($status|$?))
262
263 return $status
264}
265
266function validator_intfield_eq
267{
268 stats="$1"
269 status=0
270
271 validate_min_max "$stats" "intfield" "1" "1"
272 status=$(($status|$?))
273
274 return $status
275}
276
277function validator_intfield_ne
278{
279 stats="$1"
280 status=0
281
282 validate_min_max "$stats" "intfield" "0" "98"
283 status=$(($status|$?))
284
285 return $status
286}
287
288function validator_intfield_not
289{
290 stats="$1"
291 status=0
292
293 validate_min_max "$stats" "intfield" "0" "0"
294 status=$(($status|$?))
295
296 return $status
297}
298
299function validator_intfield_gt_and_longfield_gt
300{
301 stats="$1"
302 status=0
303
304 validate_min_max "$stats" "intfield" "43" "99"
305 status=$(($status|$?))
306 validate_min_max "$stats" "longfield" "43" "99"
307 status=$(($status|$?))
308
309 return $status
310}
311
312function validator_intfield_ge_and_longfield_le
313{
314 stats="$1"
315 status=0
316
317 validate_min_max "$stats" "intfield" "42" "42"
318 status=$(($status|$?))
319 validate_min_max "$stats" "longfield" "42" "42"
320 status=$(($status|$?))
321
322 return $status
323}
324
325function validator_intfield_lt_or_longfield_gt
326{
327 stats="$1"
328 status=0
329
330 validate_min_max "$stats" "intfield" "0" "99"
331 status=$(($status|$?))
332 validate_min_max "$stats" "longfield" "0" "99"
333 status=$(($status|$?))
334
335 return $status
336}
337
338function validator_mixed_str_or_int_and_int
339{
340 stats="$1"
341 status=0
342
343 validate_min_max "$stats" "intfield" "34" "99"
344 status=$(($status|$?))
345
346 validate_min_max "$stats" "stringfield" "\"test\"" "\"test\""
347 status=$(($status|$?))
348
349 return $status
350}
351
352function validator_mixed_int_double
353{
354 stats="$1"
355 status=0
356
357 validate_min_max "$stats" "intfield" "0" "42"
358 status=$(($status|$?))
359
360 return $status
361}
362
363function validator_true_statement
364{
365 stats="$1"
366 status=0
367
368 validate_min_max "$stats" "intfield" "0" "99"
369 status=$(($status|$?))
370
371 validate_min_max "$stats" "intfield2" "0x0" "0x63"
372 status=$(($status|$?))
373
374 validate_min_max "$stats" "longfield" "0" "99"
375 status=$(($status|$?))
376
377 validate_min_max "$stats" "netintfield" "0" "99"
378 status=$(($status|$?))
379
380 validate_min_max "$stats" "netintfieldhex" "0x0" "0x63"
381 status=$(($status|$?))
382
f6788fc4
MD
383 if [ $KERNEL_CHECK -eq 0 ]; then
384 validate_min_max "$stats" "floatfield" "2222" "2222"
385 status=$(($status|$?))
9fec62f7 386
f6788fc4
MD
387 validate_min_max "$stats" "doublefield" "2" "2"
388 status=$(($status|$?))
389 fi
9fec62f7
CB
390
391 validate_min_max "$stats" "stringfield" "\"test\"" "\"test\""
392 status=$(($status|$?))
393
394 validate_min_max "$stats" "stringfield2" ""\*"" ""\*""
395 status=$(($status|$?))
396
397 return $status
398}
399
03276eea
CB
400plan_tests $NUM_TESTS
401
e3bef725
CB
402print_test_banner "$TEST_DESC"
403
c125de8f
FD
404bail_out_if_no_babeltrace
405
9fec62f7
CB
406issue_356_filter="intfield > 0 && intfield > 1 && "
407issue_356_filter+="intfield > 2 && intfield > 3 && "
408issue_356_filter+="intfield > 4 && intfield > 5 && "
409issue_356_filter+="intfield > 6 && intfield > 7 && "
410issue_356_filter+="intfield > 8 || intfield > 0"
411
f6788fc4
MD
412start_lttng_sessiond
413
414### UST TESTS
415
416BIN_NAME="gen-ust-events"
417
ec7fe110
PP
418KIRK_KRAUSS_TESTS=(
419 # the tests below were written by Kirk Krauss in this article:
420 # http://www.drdobbs.com/architecture-and-design/matching-wildcards-an-empirical-way-to-t/240169123
421
422 str_has_events
423 '"abcccd" == "*ccd"'
424
425 str_has_events
426 '"mississipissippi" == "*issip*ss*"'
427
428 str_has_no_event
429 '"xxxx\*zzzzzzzzy\*f" == "xxxx*zzy*fffff"'
430
431 str_has_events
432 '"xxxx\*zzzzzzzzy\*f" == "xxx*zzy*f"'
433
434 str_has_no_event
435 '"xxxxzzzzzzzzyf" == "xxxx*zzy*fffff"'
436
437 str_has_events
438 '"xxxxzzzzzzzzyf" == "xxxx*zzy*f"'
439
440 str_has_events
441 '"xyxyxyzyxyz" == "xy*z*xyz"'
442
443 str_has_events
444 '"mississippi" == "*sip*"'
445
446 str_has_events
447 '"xyxyxyxyz" == "xy*xyz"'
448
449 str_has_events
450 '"mississippi" == "mi*sip*"'
451
452 str_has_events
453 '"ababac" == "*abac*"'
454
455 str_has_events
456 '"ababac" == "*abac*"'
457
458 str_has_events
459 '"aaazz" == "a*zz*"'
460
461 str_has_no_event
462 '"a12b12" == "*12*23"'
463
464 str_has_no_event
465 '"a12b12" == "a12b"'
466
467 str_has_events
468 '"a12b12" == "*12*12*"'
469
470 str_has_events
471 '"\*" == "*"'
472
473 str_has_events
474 '"a\*abab" == "a*b"'
475
476 str_has_events
477 '"a\*r" == "a*"'
478
479 str_has_no_event
480 '"a\*ar" == "a*aar"'
481
482 str_has_events
483 '"XYXYXYZYXYz" == "XY*Z*XYz"'
484
485 str_has_events
486 '"missisSIPpi" == "*SIP*"'
487
488 str_has_events
489 '"mississipPI" == "*issip*PI"'
490
491 str_has_events
492 '"xyxyxyxyz" == "xy*xyz"'
493
494 str_has_events
495 '"miSsissippi" == "mi*sip*"'
496
497 str_has_no_event
498 '"miSsissippi" == "mi*Sip*"'
499
500 str_has_events
501 '"abAbac" == "*Abac*"'
502
503 str_has_events
504 '"abAbac" == "*Abac*"'
505
506 str_has_events
507 '"aAazz" == "a*zz*"'
508
509 str_has_no_event
510 '"A12b12" == "*12*23"'
511
512 str_has_events
513 '"a12B12" == "*12*12*"'
514
515 str_has_events
516 '"oWn" == "*oWn*"'
517
518 str_has_events
519 '"bLah" == "bLah"'
520
521 str_has_no_event
522 '"bLah" == "bLaH"'
523
524 str_has_events
525 '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab" == "a*a*a*a*a*a*aa*aaa*a*a*b"'
526
527 str_has_events
528 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*a*aa*aaa*fa*ga*b*"'
529
530 str_has_no_event
531 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*a*x*aaa*fa*ga*b*"'
532
533 str_has_no_event
534 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*aaaa*fa*ga*gggg*b*"'
535
536 str_has_events
537 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*aaaa*fa*ga*ggg*b*"'
538
539 str_has_events
540 '"aaabbaabbaab" == "*aabbaa*a*"'
541
542 str_has_events
543 '"a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*a\*" == "a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
544
545 str_has_events
546 '"aaaaaaaaaaaaaaaaa" == "*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
547
548 str_has_no_event
549 '"aaaaaaaaaaaaaaaa" == "*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
550
551 str_has_no_event
552 '"abc\*abcd\*abcde\*abcdef\*abcdefg\*abcdefgh\*abcdefghi\*abcdefghij\*abcdefghijk\*abcdefghijkl\*abcdefghijklm\*abcdefghijklmn" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*"'
553
554 str_has_events
555 '"abc\*abcd\*abcde\*abcdef\*abcdefg\*abcdefgh\*abcdefghi\*abcdefghij\*abcdefghijk\*abcdefghijkl\*abcdefghijklm\*abcdefghijklmn" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*"'
556
557 str_has_no_event
558 '"abc\*abcd\*abcd\*abc\*abcd" == "abc*abc*abc*abc*abc"'
559
560 str_has_events
561 '"abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abcd" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abcd"'
562)
9fec62f7 563
80744d94
JR
564# Set IFS to newline to facilitate array declaration
565OLDIFS="$IFS"
566IFS=$'\n'
ec7fe110
PP
567UST_FILTERS=(
568 intfield
569 "intfield"
570
571 intfield_gt
572 "intfield > 1"
573
574 intfield_ge
575 "intfield >= 1"
576
577 intfield_lt
578 "intfield < 2"
579
580 intfield_le
581 "intfield <= 2"
582
583 intfield_eq
584 "intfield == 1"
585
586 intfield_ne
587 "intfield != 99"
588
589 intfield_not
590 "!intfield"
591
592 intfield
593 "-intfield"
594
595 intfield
596 "--intfield"
597
598 intfield
599 "+intfield"
600
601 intfield
602 "++intfield"
603
604 intfield_gt_and_longfield_gt
605 "intfield > 1 && longfield > 42"
606
607 intfield_ge_and_longfield_le
608 "intfield >= 42 && longfield <= 42"
609
610 intfield_lt_or_longfield_gt
611 "intfield < 1 || longfield > 98"
612
613 mixed_str_or_int_and_int
614 "(stringfield == \"test\" || intfield != 10) && intfield > 33"
615
616 mixed_int_double
617 "intfield < 42.4242424242"
618
619 # Issue #342
620 true_statement
621 "\"test\" == \"test\""
622
623 true_statement
624 "stringfield == \"test\""
625
626 true_statement
627 "stringfield == \"t*\""
628
629 true_statement
630 "stringfield == \"*\""
631
632 # Issue 356
633 intfield
634 $issue_356_filter
635
bff988fa
MD
636 true_statement
637 "1&1"
638
639 true_statement
640 "0|1"
641
642 true_statement
643 "0^1"
644
645 true_statement
646 "seqfield4[1]==2"
647
648 true_statement
649 "arrfield1[1]==2"
650
651 true_statement
652 "arrfield1[1]==2"
653
654 true_statement
655 "arrfield3[1]==2"
656
657 true_statement
658 "seqfield3[1]==2"
659
660 true_statement
661 "1 | (1 | (1 | 1))"
662
663 true_statement
664 "1 >= (1 >= (1 >= 1))"
665
666 true_statement
cea52dd8 667 "(0x101 & 0x100) == 0x100"
bff988fa
MD
668
669 true_statement
cea52dd8 670 "(0x101 | 0x10100) == 0x10101"
bff988fa
MD
671
672 true_statement
cea52dd8 673 "(0xF00F0F ^ 0xFF0F00) == 0x0F000F"
bff988fa 674
116d3c01
MD
675 true_statement
676 "(1 << 1) == 2"
677
678 true_statement
679 "(4 >> 1) == 2"
680
681 true_statement
682 "(1 << 8) == 256"
683
684 true_statement
685 "(262144 >> 16) == 4"
686
687 true_statement
688 "(~0 & 0xffff) == 0xffff"
689
690 true_statement
691 "(~0 & 0xffffffff) == 0xffffffff"
692
693 true_statement
694 "(~0 & 0xffffffffffffffff) == 0xffffffffffffffff"
695
696 true_statement
697 "-1==~0"
698
0358f3d8
MD
699 true_statement # unsigned bitwise ops
700 "~0>>4==0x0fffffffffffffff"
701
702 has_no_event
703 "1<<-1"
704
705 has_no_event
706 "1<<10000"
707
708 true_statement # comparator is signed, shift is unsigned
709 "(1<<63) < 0"
710
116d3c01 711 true_statement
831b702b 712 "(1<<2!=4)==0" # operator priority: shift before equality
116d3c01 713
831b702b
MD
714 true_statement
715 "1&3==1" # operator priority: masks before equality
716
717 true_statement
718 "(3|1==3)==1" # operator priority: masks before equality
719
720 true_statement
721 "(2^1==3)==1" # operator priority: masks before equality
116d3c01
MD
722
723 true_statement
724 "(1 << 32) == 4294967296"
725
726 true_statement
727 "(1 << 63) == 9223372036854775808"
728
bff988fa 729 true_statement
cea52dd8 730 "(arrfield1[2] & 1) == 1"
bff988fa
MD
731
732 true_statement
cea52dd8 733 "(arrfield1[2] | 0x111000) == 0x111003"
bff988fa
MD
734
735 true_statement
736 "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
737
738 true_statement
cea52dd8 739 "(seqfield4[2] & 1) == 1"
bff988fa
MD
740
741 true_statement
cea52dd8 742 "(seqfield4[2] | 0x111000) == 0x111003"
bff988fa 743
ec7fe110
PP
744 true_statement
745 "intfield < 0xDEADBEEF"
746
747 intfield_lt
748 "intfield < 0x2"
749
750 intfield_lt
751 "intfield < 02"
752
753 true_statement
754 "stringfield2 == \"\\\*\""
755
756 true_statement
757 "1.0 || intfield || 1.0"
758
759 intfield_gt
760 "1 < intfield"
761
762 has_no_event
763 "\$ctx.vtid == 0"
764
765 has_events
766 "\$ctx.vtid != 0"
767
768 has_no_event
769 "0 == \$ctx.vtid"
770
771 has_events
772 "0 != \$ctx.vtid"
773
774 has_no_event
775 "\$ctx.vpid == 0"
776
777 has_events
778 "\$ctx.vpid != 0"
779
780 has_no_event
781 "0 == \$ctx.vpid"
782
783 has_events
784 "0 != \$ctx.vpid"
785
786 has_no_event
787 "\$ctx.procname != \"$BIN_NAME\""
788
789 has_events
790 "\$ctx.procname == \"$BIN_NAME\""
791
792 has_no_event
793 "\"$BIN_NAME\" != \$ctx.procname"
794
795 has_events
796 "\"$BIN_NAME\" == \$ctx.procname"
797
798 has_no_event
799 "\$ctx.procname != \"$BIN_NAME*\""
800
801 has_events
802 "\$ctx.procname == \"$BIN_NAME*\""
803
804 has_no_event
805 "\"$BIN_NAME*\" != \$ctx.procname"
806
807 has_events
808 "\"$BIN_NAME*\" == \$ctx.procname"
809
810 has_no_event
811 "\$ctx.procname != \"*\""
812
813 has_events
814 "\$ctx.procname == \"*\""
815
816 has_no_event
817 "\"*\" != \$ctx.procname"
818
819 has_events
820 "\"*\" == \$ctx.procname"
821
822 has_no_event
823 "!a.f.d"
824
825 has_no_event
826 "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
827
828 has_no_event
829 "\$ctx.vtid.blah == 0"
830
831 has_no_event
832 "asdf.asdfsd.sadf < 4"
833
834 has_no_event
835 "0 == \$ctx.vtid.blah"
836
39ac0a0e
MD
837 # check that bytecode linker refuses to link against a
838 # non-string array.
839 has_no_event
840 'arrfield1 != "dontmatch"'
841
842 # check that bytecode linker refuses to link against a
843 # non-string sequence.
844 has_no_event
845 'seqfield1 != "dontmatch"'
846
ec7fe110 847 END
9fec62f7
CB
848)
849
ec7fe110
PP
850UST_STR_FILTERS=(
851 str_has_events
852 'str == "hypothecary"'
853
854 str_has_events
855 '"hypothecary" == str'
856
857 str_has_events
858 'str != "hypothecary"'
859
860 str_has_events
861 '"hypothecary" != str'
862
863 str_has_events
864 'str == "*cary"'
865
866 str_has_events
867 '"*cary" == str'
868
869 str_has_events
870 'str != "*cary"'
871
872 str_has_events
873 '"*cary" != str'
874
875 str_has_events
876 'str == "hypo*"'
877
878 str_has_events
879 '"hypo*" == str'
880
881 str_has_events
882 'str != "hypo*"'
883
884 str_has_events
885 '"hypo*" != str'
886
887 str_has_events
888 'str == "*the*"'
889
890 str_has_events
891 '"*the*" == str'
892
893 str_has_events
894 'str != "*the*"'
895
896 str_has_events
897 '"*the*" != str'
898
899 str_has_events
900 'str == "**"'
901
902 str_has_events
903 '"**" == str'
904
905 str_has_no_event
906 'str != "**"'
907
908 str_has_no_event
909 '"**" != str'
910
911 str_has_events
912 'str == "sc*"'
913
914 str_has_events
915 '"sc*" == str'
916
917 str_has_events
918 'str != "sc*"'
919
920 str_has_events
921 '"sc*" != str'
922
923 str_has_events
924 'str == "de*al"'
925
926 str_has_events
927 '"de*al" == str'
928
929 str_has_events
930 'str != "de*al"'
931
932 str_has_events
933 '"de*al" != str'
934
935 str_has_events
936 'str == "*po*siz*"'
937
938 str_has_events
939 '"*po*siz*" == str'
940
941 str_has_events
942 'str != "*po*siz*"'
943
944 str_has_events
945 '"*po*siz*" != str'
946
947 str_has_events
948 'str == "*po***siz*"'
949
950 str_has_events
951 '"*po***siz*" == str'
952
953 str_has_events
954 'str != "*po***siz*"'
955
956 str_has_events
957 '"*po***siz*" != str'
958
959 str_has_no_event
960 'str == "*po*\**siz*"'
961
962 str_has_no_event
963 '"*po*\**siz*" == str'
964
965 str_has_no_event
966 'str == "*zulu*"'
967
968 str_has_no_event
969 '"*zulu*" == str'
970
971 str_has_no_event
972 'str == "8*"'
973
974 str_has_no_event
975 '"8*" == str'
976
977 str_has_no_event
978 'str == "*8"'
979
980 str_has_no_event
981 '"*8" == str'
982
983 str_has_no_event
984 'str == "de\*al"'
985
986 str_has_no_event
987 '"de\*al" == str'
988
989 str_has_events
990 '"salut*" == "salut vous"'
991
992 str_has_events
993 '"salut*" == "salut vous*"'
994
995 str_has_events
996 '"salut vous*" == "salut*"'
997
998 ${KIRK_KRAUSS_TESTS[@]}
999
1000 END
1001)
f6788fc4
MD
1002
1003if [ ! -x "$CURDIR/$BIN_NAME" ]; then
1004 BAIL_OUT "No UST nevents binary detected."
1005fi
1006
80744d94
JR
1007IFS="$OLDIFS"
1008
f6788fc4 1009diag "Test UST valid filters"
9fec62f7 1010
f6788fc4
MD
1011KERNEL_CHECK=0
1012i=0
ec7fe110
PP
1013while true; do
1014 validator="${UST_FILTERS[$i]}"
1015
1016 if [ "$validator" = END ]; then
1017 break
1018 fi
9fec62f7 1019
ec7fe110
PP
1020 filter="${UST_FILTERS[$(( i + 1 ))]}"
1021 test_valid_filter ust -u "tp:tptest" "$filter" "validator_$validator"
9fec62f7
CB
1022
1023 if [ $? -eq 1 ]; then
1024 stop_lttng_sessiond
1025 exit 1
1026 fi
1027
ec7fe110 1028 i=$(( i + 2 ))
9fec62f7
CB
1029done
1030
ec7fe110
PP
1031i=0
1032while true; do
1033 validator="${UST_STR_FILTERS[$i]}"
1034
1035 if [ "$validator" = END ]; then
1036 break
1037 fi
1038
1039 filter="${UST_STR_FILTERS[$(( i + 1 ))]}"
1040 test_valid_filter ust_str -u "tp:the_string" "$filter" "validator_$validator"
1041
1042 if [ $? -eq 1 ]; then
1043 stop_lttng_sessiond
1044 exit 1
1045 fi
1046
1047 i=$(( i + 2 ))
1048done
f6788fc4
MD
1049
1050### KERNEL TESTS
1051
1052BIN_NAME="test_valid_filt" # Current script name truncated by kernel
1053
1054# One to one mapping between filters and validators
80744d94
JR
1055# Set IFS to newline to facilitate array declaration
1056OLDIFS="$IFS"
1057IFS=$'\n'
ec7fe110
PP
1058KERNEL_FILTERS=(
1059 intfield
1060 "intfield"
1061
1062 intfield_gt
1063 "intfield > 1"
1064
1065 intfield_ge
1066 "intfield >= 1"
1067
1068 intfield_lt
1069 "intfield < 2"
1070
1071 intfield_le
1072 "intfield <= 2"
1073
1074 intfield_eq
1075 "intfield == 1"
1076
1077 intfield_ne
1078 "intfield != 99"
1079
1080 intfield_not
1081 "!intfield"
1082
1083 intfield
1084 "-intfield"
1085
1086 intfield
1087 "--intfield"
1088
1089 intfield
1090 "+intfield"
1091
1092 intfield
1093 "++intfield"
1094
1095 intfield_gt_and_longfield_gt
1096 "intfield > 1 && longfield > 42"
1097
1098 intfield_ge_and_longfield_le
1099 "intfield >= 42 && longfield <= 42"
1100
1101 intfield_lt_or_longfield_gt
1102 "intfield < 1 || longfield > 98"
1103
1104 mixed_str_or_int_and_int
1105 "(stringfield == \"test\" || intfield != 10) && intfield > 33"
1106
1107 has_no_event
1108 "intfield < 42.4242424242"
1109
1110 true_statement
1111 "\"test\" == \"test\""
1112
1113 true_statement
1114 "stringfield == \"test\""
1115
1116 true_statement
1117 "stringfield == \"t*\""
1118
1119 true_statement
1120 "stringfield == \"*\""
1121
1122 intfield
1123 $issue_356_filter
1124
bff988fa
MD
1125 true_statement
1126 "1&1"
1127
1128 true_statement
1129 "0|1"
1130
1131 true_statement
1132 "0^1"
1133
1134 true_statement
1135 "seqfield4[1]==2"
1136
1137 true_statement
1138 "arrfield1[1]==2"
1139
1140 true_statement
1141 "arrfield1[1]==2"
1142
1143 true_statement
1144 "arrfield3[1]==2"
1145
1146 true_statement
1147 "seqfield3[1]==2"
1148
1149 true_statement
1150 "1 | (1 | (1 | 1))"
1151
1152 true_statement
1153 "1 >= (1 >= (1 >= 1))"
1154
1155 true_statement
cea52dd8 1156 "(0x101 & 0x100) == 0x100"
bff988fa
MD
1157
1158 true_statement
cea52dd8 1159 "(0x101 | 0x10100) == 0x10101"
bff988fa
MD
1160
1161 true_statement
cea52dd8 1162 "(0xF00F0F ^ 0xFF0F00) == 0x0F000F"
bff988fa 1163
116d3c01
MD
1164 true_statement
1165 "(1 << 1) == 2"
1166
1167 true_statement
1168 "(4 >> 1) == 2"
1169
1170 true_statement
1171 "(1 << 8) == 256"
1172
1173 true_statement
1174 "(262144 >> 16) == 4"
1175
1176 true_statement
1177 "(~0 & 0xffff) == 0xffff"
1178
1179 true_statement
1180 "(~0 & 0xffffffff) == 0xffffffff"
1181
1182 true_statement
1183 "(~0 & 0xffffffffffffffff) == 0xffffffffffffffff"
1184
1185 true_statement
1186 "-1==~0"
1187
0358f3d8
MD
1188 true_statement # unsigned bitwise ops
1189 "~0>>4==0x0fffffffffffffff"
1190
1191 has_no_event
1192 "1<<-1"
1193
1194 has_no_event
1195 "1<<10000"
1196
1197 true_statement # comparator is signed, shift is unsigned
1198 "(1<<63) < 0"
1199
116d3c01 1200 true_statement
831b702b 1201 "(1<<2!=4)==0" # operator priority: shift before equality
116d3c01 1202
831b702b
MD
1203 true_statement
1204 "1&3==1" # operator priority: masks before equality
1205
1206 true_statement
1207 "(3|1==3)==1" # operator priority: masks before equality
1208
1209 true_statement
1210 "(2^1==3)==1" # operator priority: masks before equality
116d3c01
MD
1211
1212 true_statement
1213 "(1 << 32) == 4294967296"
1214
1215 true_statement
1216 "(1 << 63) == 9223372036854775808"
1217
bff988fa 1218 true_statement
cea52dd8 1219 "(arrfield1[2] & 1) == 1"
bff988fa
MD
1220
1221 true_statement
cea52dd8 1222 "(arrfield1[2] | 0x111000) == 0x111003"
bff988fa
MD
1223
1224 true_statement
1225 "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
1226
1227 true_statement
cea52dd8 1228 "(seqfield4[2] & 1) == 1"
bff988fa
MD
1229
1230 true_statement
cea52dd8 1231 "(seqfield4[2] | 0x111000) == 0x111003"
bff988fa 1232
ec7fe110
PP
1233 true_statement
1234 "intfield < 0xDEADBEEF"
1235
1236 intfield_lt
1237 "intfield < 0x2"
1238
1239 intfield_lt
1240 "intfield < 02"
f6788fc4 1241
ec7fe110
PP
1242 true_statement
1243 "stringfield2 == \"\\\*\""
1244
1245 has_no_event
1246 "1.0 || intfield || 1.0"
1247
1248 intfield_gt
1249 "1 < intfield"
1250
1251 has_no_event
1252 "\$ctx.vtid == 0"
1253
1254 has_events
1255 "\$ctx.vtid != 0"
1256
1257 has_no_event
1258 "0 == \$ctx.vtid"
1259
1260 has_events
1261 "0 != \$ctx.vtid"
1262
1263 has_no_event
1264 "\$ctx.vpid == 0"
1265
1266 has_events
1267 "\$ctx.vpid != 0"
1268
1269 has_no_event
1270 "0 == \$ctx.vpid"
1271
1272 has_events
1273 "0 != \$ctx.vpid"
1274
1275 has_no_event
1276 "\$ctx.procname != \"$BIN_NAME\""
1277
1278 has_events
1279 "\$ctx.procname == \"$BIN_NAME\""
1280
1281 has_no_event
1282 "\"$BIN_NAME\" != \$ctx.procname"
1283
1284 has_events
1285 "\"$BIN_NAME\" == \$ctx.procname"
1286
1287 has_no_event
1288 "\$ctx.procname != \"$BIN_NAME*\""
1289
1290 has_events
1291 "\$ctx.procname == \"$BIN_NAME*\""
1292
1293 has_no_event
1294 "\"$BIN_NAME*\" != \$ctx.procname"
1295
1296 has_events
1297 "\"$BIN_NAME*\" == \$ctx.procname"
1298
1299 has_no_event
1300 "\$ctx.procname != \"*\""
1301
1302 has_events
1303 "\$ctx.procname == \"*\""
1304
1305 has_no_event
1306 "\"*\" != \$ctx.procname"
1307
1308 has_events
1309 "\"*\" == \$ctx.procname"
1310
1311 has_no_event
1312 "!a.f.d"
1313
1314 has_no_event
1315 "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
1316
1317 has_no_event
1318 "\$ctx.vtid.blah == 0"
1319
1320 has_no_event
1321 "asdf.asdfsd.sadf < 4"
1322
1323 has_no_event
1324 "0 == \$ctx.vtid.blah"
1325
ec7fe110
PP
1326 stringfield_has_events
1327 'stringfield == "test"'
1328
1329 stringfield_has_events
1330 '"test" == stringfield'
1331
1332 has_no_event
1333 'stringfield != "test"'
1334
1335 has_no_event
1336 '"test" != stringfield'
1337
1338 stringfield_has_events
1339 'stringfield == "*st"'
1340
1341 stringfield_has_events
1342 '"*st" == stringfield'
1343
1344 has_no_event
1345 'stringfield != "*st"'
1346
1347 has_no_event
1348 '"*st" != stringfield'
1349
1350 stringfield_has_events
1351 'stringfield == "te*"'
1352
1353 stringfield_has_events
1354 '"te*" == stringfield'
1355
1356 has_no_event
1357 'stringfield != "te*"'
1358
1359 has_no_event
1360 '"te*" != stringfield'
1361
1362 stringfield_has_events
1363 'stringfield == "te*t"'
1364
1365 stringfield_has_events
1366 '"te*t" == stringfield'
1367
1368 has_no_event
1369 'stringfield != "te*t"'
1370
1371 has_no_event
1372 '"te*t" != stringfield'
1373
1374 stringfield_has_events
1375 'stringfield == "tes*t"'
1376
1377 stringfield_has_events
1378 '"tes*t" == stringfield'
1379
1380 has_no_event
1381 'stringfield != "tes*t"'
1382
1383 has_no_event
1384 '"tes*t" != stringfield'
1385
1386 stringfield_has_events
1387 'stringfield == "*test"'
1388
1389 stringfield_has_events
1390 '"*test" == stringfield'
1391
1392 has_no_event
1393 'stringfield != "*test"'
1394
1395 has_no_event
1396 '"*test" != stringfield'
1397
1398 stringfield_has_events
1399 'stringfield == "test*"'
1400
1401 stringfield_has_events
1402 '"test*" == stringfield'
1403
1404 has_no_event
1405 'stringfield != "test*"'
1406
1407 has_no_event
1408 '"test*" != stringfield'
1409
1410 stringfield_has_events
1411 'stringfield == "*"'
1412
1413 stringfield_has_events
1414 '"*" == stringfield'
1415
1416 has_no_event
1417 'stringfield != "*"'
1418
1419 has_no_event
1420 '"*" != stringfield'
1421
1422 has_no_event
1423 'stringfield == "test*2"'
1424
1425 has_no_event
1426 'stringfield == "2*test"'
1427
1428 has_no_event
1429 'stringfield == "te\*st"'
1430
1431 has_no_event
1432 'stringfield == "te*ts"'
1433
1434 has_no_event
1435 'stringfield == "*\*test"'
1436
1437 has_no_event
1438 'stringfield == "test\*"'
1439
c99adc64
MD
1440 # check that bytecode linker refuses to link against a
1441 # non-string array.
1442 has_no_event
1443 'arrfield1 != "dontmatch"'
1444
1445 # check that bytecode linker refuses to link against a
1446 # non-string sequence.
1447 has_no_event
1448 'seqfield1 != "dontmatch"'
1449
ec7fe110
PP
1450 ${KIRK_KRAUSS_TESTS[@]}
1451
1452 END
f6788fc4
MD
1453)
1454
80744d94
JR
1455IFS=$OLDIFS
1456
f6788fc4
MD
1457if [ "$(id -u)" == "0" ]; then
1458 isroot=1
1459else
1460 isroot=0
1461fi
1462
1463skip $isroot "Root access is needed. Skipping all kernel valid filter tests." $NUM_KERNEL_TESTS ||
1464{
1465 diag "Test kernel valid filters"
1466
1467 KERNEL_CHECK=1
1468 modprobe lttng-test
ec7fe110 1469
f6788fc4 1470 i=0
ec7fe110
PP
1471 while true; do
1472 validator="${KERNEL_FILTERS[$i]}"
1473
1474 if [ "$validator" = END ]; then
1475 break
1476 fi
f6788fc4 1477
ec7fe110
PP
1478 filter="${KERNEL_FILTERS[$(( i + 1 ))]}"
1479 test_valid_filter kernel -k "lttng_test_filter_event" "$filter" "validator_$validator"
f6788fc4
MD
1480
1481 if [ $? -eq 1 ]; then
1482 stop_lttng_sessiond
1483 exit 1
1484 fi
1485
ec7fe110 1486 i=$(( i + 2 ))
f6788fc4 1487 done
ec7fe110 1488
d0e263e7 1489 modprobe --remove lttng-test
f6788fc4
MD
1490}
1491
9fec62f7 1492stop_lttng_sessiond
This page took 0.102827 seconds and 4 git commands to generate.