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