Filter: index array, sequences, implement bitwise binary 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
bff988fa
MD
27NUM_UST_TESTS=1002
28NUM_KERNEL_TESTS=936
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
685 true_statement
686 "arrfield1[2] & 1 == 1"
687
688 true_statement
689 "arrfield1[2] | 0x111000 == 0x111003"
690
691 true_statement
692 "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
693
694 true_statement
695 "seqfield4[2] & 1 == 1"
696
697 true_statement
698 "seqfield4[2] | 0x111000 == 0x111003"
699
ec7fe110
PP
700 true_statement
701 "intfield < 0xDEADBEEF"
702
703 intfield_lt
704 "intfield < 0x2"
705
706 intfield_lt
707 "intfield < 02"
708
709 true_statement
710 "stringfield2 == \"\\\*\""
711
712 true_statement
713 "1.0 || intfield || 1.0"
714
715 intfield_gt
716 "1 < intfield"
717
718 has_no_event
719 "\$ctx.vtid == 0"
720
721 has_events
722 "\$ctx.vtid != 0"
723
724 has_no_event
725 "0 == \$ctx.vtid"
726
727 has_events
728 "0 != \$ctx.vtid"
729
730 has_no_event
731 "\$ctx.vpid == 0"
732
733 has_events
734 "\$ctx.vpid != 0"
735
736 has_no_event
737 "0 == \$ctx.vpid"
738
739 has_events
740 "0 != \$ctx.vpid"
741
742 has_no_event
743 "\$ctx.procname != \"$BIN_NAME\""
744
745 has_events
746 "\$ctx.procname == \"$BIN_NAME\""
747
748 has_no_event
749 "\"$BIN_NAME\" != \$ctx.procname"
750
751 has_events
752 "\"$BIN_NAME\" == \$ctx.procname"
753
754 has_no_event
755 "\$ctx.procname != \"$BIN_NAME*\""
756
757 has_events
758 "\$ctx.procname == \"$BIN_NAME*\""
759
760 has_no_event
761 "\"$BIN_NAME*\" != \$ctx.procname"
762
763 has_events
764 "\"$BIN_NAME*\" == \$ctx.procname"
765
766 has_no_event
767 "\$ctx.procname != \"*\""
768
769 has_events
770 "\$ctx.procname == \"*\""
771
772 has_no_event
773 "\"*\" != \$ctx.procname"
774
775 has_events
776 "\"*\" == \$ctx.procname"
777
778 has_no_event
779 "!a.f.d"
780
781 has_no_event
782 "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
783
784 has_no_event
785 "\$ctx.vtid.blah == 0"
786
787 has_no_event
788 "asdf.asdfsd.sadf < 4"
789
790 has_no_event
791 "0 == \$ctx.vtid.blah"
792
ec7fe110 793 END
9fec62f7
CB
794)
795
ec7fe110
PP
796UST_STR_FILTERS=(
797 str_has_events
798 'str == "hypothecary"'
799
800 str_has_events
801 '"hypothecary" == str'
802
803 str_has_events
804 'str != "hypothecary"'
805
806 str_has_events
807 '"hypothecary" != str'
808
809 str_has_events
810 'str == "*cary"'
811
812 str_has_events
813 '"*cary" == str'
814
815 str_has_events
816 'str != "*cary"'
817
818 str_has_events
819 '"*cary" != str'
820
821 str_has_events
822 'str == "hypo*"'
823
824 str_has_events
825 '"hypo*" == str'
826
827 str_has_events
828 'str != "hypo*"'
829
830 str_has_events
831 '"hypo*" != str'
832
833 str_has_events
834 'str == "*the*"'
835
836 str_has_events
837 '"*the*" == str'
838
839 str_has_events
840 'str != "*the*"'
841
842 str_has_events
843 '"*the*" != str'
844
845 str_has_events
846 'str == "**"'
847
848 str_has_events
849 '"**" == str'
850
851 str_has_no_event
852 'str != "**"'
853
854 str_has_no_event
855 '"**" != str'
856
857 str_has_events
858 'str == "sc*"'
859
860 str_has_events
861 '"sc*" == str'
862
863 str_has_events
864 'str != "sc*"'
865
866 str_has_events
867 '"sc*" != str'
868
869 str_has_events
870 'str == "de*al"'
871
872 str_has_events
873 '"de*al" == str'
874
875 str_has_events
876 'str != "de*al"'
877
878 str_has_events
879 '"de*al" != str'
880
881 str_has_events
882 'str == "*po*siz*"'
883
884 str_has_events
885 '"*po*siz*" == str'
886
887 str_has_events
888 'str != "*po*siz*"'
889
890 str_has_events
891 '"*po*siz*" != str'
892
893 str_has_events
894 'str == "*po***siz*"'
895
896 str_has_events
897 '"*po***siz*" == str'
898
899 str_has_events
900 'str != "*po***siz*"'
901
902 str_has_events
903 '"*po***siz*" != str'
904
905 str_has_no_event
906 'str == "*po*\**siz*"'
907
908 str_has_no_event
909 '"*po*\**siz*" == str'
910
911 str_has_no_event
912 'str == "*zulu*"'
913
914 str_has_no_event
915 '"*zulu*" == str'
916
917 str_has_no_event
918 'str == "8*"'
919
920 str_has_no_event
921 '"8*" == str'
922
923 str_has_no_event
924 'str == "*8"'
925
926 str_has_no_event
927 '"*8" == str'
928
929 str_has_no_event
930 'str == "de\*al"'
931
932 str_has_no_event
933 '"de\*al" == str'
934
935 str_has_events
936 '"salut*" == "salut vous"'
937
938 str_has_events
939 '"salut*" == "salut vous*"'
940
941 str_has_events
942 '"salut vous*" == "salut*"'
943
944 ${KIRK_KRAUSS_TESTS[@]}
945
946 END
947)
f6788fc4
MD
948
949if [ ! -x "$CURDIR/$BIN_NAME" ]; then
950 BAIL_OUT "No UST nevents binary detected."
951fi
952
80744d94
JR
953IFS="$OLDIFS"
954
f6788fc4 955diag "Test UST valid filters"
9fec62f7 956
f6788fc4
MD
957KERNEL_CHECK=0
958i=0
ec7fe110
PP
959while true; do
960 validator="${UST_FILTERS[$i]}"
961
962 if [ "$validator" = END ]; then
963 break
964 fi
9fec62f7 965
ec7fe110
PP
966 filter="${UST_FILTERS[$(( i + 1 ))]}"
967 test_valid_filter ust -u "tp:tptest" "$filter" "validator_$validator"
9fec62f7
CB
968
969 if [ $? -eq 1 ]; then
970 stop_lttng_sessiond
971 exit 1
972 fi
973
ec7fe110 974 i=$(( i + 2 ))
9fec62f7
CB
975done
976
ec7fe110
PP
977i=0
978while true; do
979 validator="${UST_STR_FILTERS[$i]}"
980
981 if [ "$validator" = END ]; then
982 break
983 fi
984
985 filter="${UST_STR_FILTERS[$(( i + 1 ))]}"
986 test_valid_filter ust_str -u "tp:the_string" "$filter" "validator_$validator"
987
988 if [ $? -eq 1 ]; then
989 stop_lttng_sessiond
990 exit 1
991 fi
992
993 i=$(( i + 2 ))
994done
f6788fc4
MD
995
996### KERNEL TESTS
997
998BIN_NAME="test_valid_filt" # Current script name truncated by kernel
999
1000# One to one mapping between filters and validators
80744d94
JR
1001# Set IFS to newline to facilitate array declaration
1002OLDIFS="$IFS"
1003IFS=$'\n'
ec7fe110
PP
1004KERNEL_FILTERS=(
1005 intfield
1006 "intfield"
1007
1008 intfield_gt
1009 "intfield > 1"
1010
1011 intfield_ge
1012 "intfield >= 1"
1013
1014 intfield_lt
1015 "intfield < 2"
1016
1017 intfield_le
1018 "intfield <= 2"
1019
1020 intfield_eq
1021 "intfield == 1"
1022
1023 intfield_ne
1024 "intfield != 99"
1025
1026 intfield_not
1027 "!intfield"
1028
1029 intfield
1030 "-intfield"
1031
1032 intfield
1033 "--intfield"
1034
1035 intfield
1036 "+intfield"
1037
1038 intfield
1039 "++intfield"
1040
1041 intfield_gt_and_longfield_gt
1042 "intfield > 1 && longfield > 42"
1043
1044 intfield_ge_and_longfield_le
1045 "intfield >= 42 && longfield <= 42"
1046
1047 intfield_lt_or_longfield_gt
1048 "intfield < 1 || longfield > 98"
1049
1050 mixed_str_or_int_and_int
1051 "(stringfield == \"test\" || intfield != 10) && intfield > 33"
1052
1053 has_no_event
1054 "intfield < 42.4242424242"
1055
1056 true_statement
1057 "\"test\" == \"test\""
1058
1059 true_statement
1060 "stringfield == \"test\""
1061
1062 true_statement
1063 "stringfield == \"t*\""
1064
1065 true_statement
1066 "stringfield == \"*\""
1067
1068 intfield
1069 $issue_356_filter
1070
bff988fa
MD
1071 true_statement
1072 "1&1"
1073
1074 true_statement
1075 "0|1"
1076
1077 true_statement
1078 "0^1"
1079
1080 true_statement
1081 "seqfield4[1]==2"
1082
1083 true_statement
1084 "arrfield1[1]==2"
1085
1086 true_statement
1087 "arrfield1[1]==2"
1088
1089 true_statement
1090 "arrfield3[1]==2"
1091
1092 true_statement
1093 "seqfield3[1]==2"
1094
1095 true_statement
1096 "1 | (1 | (1 | 1))"
1097
1098 true_statement
1099 "1 >= (1 >= (1 >= 1))"
1100
1101 true_statement
1102 "0x101 & 0x100 == 0x100"
1103
1104 true_statement
1105 "0x101 | 0x10100 == 0x10101"
1106
1107 true_statement
1108 "0xF00F0F ^ 0xFF0F00 == 0x0F000F"
1109
1110 true_statement
1111 "arrfield1[2] & 1 == 1"
1112
1113 true_statement
1114 "arrfield1[2] | 0x111000 == 0x111003"
1115
1116 true_statement
1117 "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
1118
1119 true_statement
1120 "seqfield4[2] & 1 == 1"
1121
1122 true_statement
1123 "seqfield4[2] | 0x111000 == 0x111003"
1124
ec7fe110
PP
1125 true_statement
1126 "intfield < 0xDEADBEEF"
1127
1128 intfield_lt
1129 "intfield < 0x2"
1130
1131 intfield_lt
1132 "intfield < 02"
f6788fc4 1133
ec7fe110
PP
1134 true_statement
1135 "stringfield2 == \"\\\*\""
1136
1137 has_no_event
1138 "1.0 || intfield || 1.0"
1139
1140 intfield_gt
1141 "1 < intfield"
1142
1143 has_no_event
1144 "\$ctx.vtid == 0"
1145
1146 has_events
1147 "\$ctx.vtid != 0"
1148
1149 has_no_event
1150 "0 == \$ctx.vtid"
1151
1152 has_events
1153 "0 != \$ctx.vtid"
1154
1155 has_no_event
1156 "\$ctx.vpid == 0"
1157
1158 has_events
1159 "\$ctx.vpid != 0"
1160
1161 has_no_event
1162 "0 == \$ctx.vpid"
1163
1164 has_events
1165 "0 != \$ctx.vpid"
1166
1167 has_no_event
1168 "\$ctx.procname != \"$BIN_NAME\""
1169
1170 has_events
1171 "\$ctx.procname == \"$BIN_NAME\""
1172
1173 has_no_event
1174 "\"$BIN_NAME\" != \$ctx.procname"
1175
1176 has_events
1177 "\"$BIN_NAME\" == \$ctx.procname"
1178
1179 has_no_event
1180 "\$ctx.procname != \"$BIN_NAME*\""
1181
1182 has_events
1183 "\$ctx.procname == \"$BIN_NAME*\""
1184
1185 has_no_event
1186 "\"$BIN_NAME*\" != \$ctx.procname"
1187
1188 has_events
1189 "\"$BIN_NAME*\" == \$ctx.procname"
1190
1191 has_no_event
1192 "\$ctx.procname != \"*\""
1193
1194 has_events
1195 "\$ctx.procname == \"*\""
1196
1197 has_no_event
1198 "\"*\" != \$ctx.procname"
1199
1200 has_events
1201 "\"*\" == \$ctx.procname"
1202
1203 has_no_event
1204 "!a.f.d"
1205
1206 has_no_event
1207 "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
1208
1209 has_no_event
1210 "\$ctx.vtid.blah == 0"
1211
1212 has_no_event
1213 "asdf.asdfsd.sadf < 4"
1214
1215 has_no_event
1216 "0 == \$ctx.vtid.blah"
1217
ec7fe110
PP
1218 stringfield_has_events
1219 'stringfield == "test"'
1220
1221 stringfield_has_events
1222 '"test" == stringfield'
1223
1224 has_no_event
1225 'stringfield != "test"'
1226
1227 has_no_event
1228 '"test" != stringfield'
1229
1230 stringfield_has_events
1231 'stringfield == "*st"'
1232
1233 stringfield_has_events
1234 '"*st" == stringfield'
1235
1236 has_no_event
1237 'stringfield != "*st"'
1238
1239 has_no_event
1240 '"*st" != stringfield'
1241
1242 stringfield_has_events
1243 'stringfield == "te*"'
1244
1245 stringfield_has_events
1246 '"te*" == stringfield'
1247
1248 has_no_event
1249 'stringfield != "te*"'
1250
1251 has_no_event
1252 '"te*" != stringfield'
1253
1254 stringfield_has_events
1255 'stringfield == "te*t"'
1256
1257 stringfield_has_events
1258 '"te*t" == stringfield'
1259
1260 has_no_event
1261 'stringfield != "te*t"'
1262
1263 has_no_event
1264 '"te*t" != stringfield'
1265
1266 stringfield_has_events
1267 'stringfield == "tes*t"'
1268
1269 stringfield_has_events
1270 '"tes*t" == stringfield'
1271
1272 has_no_event
1273 'stringfield != "tes*t"'
1274
1275 has_no_event
1276 '"tes*t" != stringfield'
1277
1278 stringfield_has_events
1279 'stringfield == "*test"'
1280
1281 stringfield_has_events
1282 '"*test" == stringfield'
1283
1284 has_no_event
1285 'stringfield != "*test"'
1286
1287 has_no_event
1288 '"*test" != stringfield'
1289
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 == "*"'
1304
1305 stringfield_has_events
1306 '"*" == stringfield'
1307
1308 has_no_event
1309 'stringfield != "*"'
1310
1311 has_no_event
1312 '"*" != stringfield'
1313
1314 has_no_event
1315 'stringfield == "test*2"'
1316
1317 has_no_event
1318 'stringfield == "2*test"'
1319
1320 has_no_event
1321 'stringfield == "te\*st"'
1322
1323 has_no_event
1324 'stringfield == "te*ts"'
1325
1326 has_no_event
1327 'stringfield == "*\*test"'
1328
1329 has_no_event
1330 'stringfield == "test\*"'
1331
1332 ${KIRK_KRAUSS_TESTS[@]}
1333
1334 END
f6788fc4
MD
1335)
1336
80744d94
JR
1337IFS=$OLDIFS
1338
f6788fc4
MD
1339if [ "$(id -u)" == "0" ]; then
1340 isroot=1
1341else
1342 isroot=0
1343fi
1344
1345skip $isroot "Root access is needed. Skipping all kernel valid filter tests." $NUM_KERNEL_TESTS ||
1346{
1347 diag "Test kernel valid filters"
1348
1349 KERNEL_CHECK=1
1350 modprobe lttng-test
ec7fe110 1351
f6788fc4 1352 i=0
ec7fe110
PP
1353 while true; do
1354 validator="${KERNEL_FILTERS[$i]}"
1355
1356 if [ "$validator" = END ]; then
1357 break
1358 fi
f6788fc4 1359
ec7fe110
PP
1360 filter="${KERNEL_FILTERS[$(( i + 1 ))]}"
1361 test_valid_filter kernel -k "lttng_test_filter_event" "$filter" "validator_$validator"
f6788fc4
MD
1362
1363 if [ $? -eq 1 ]; then
1364 stop_lttng_sessiond
1365 exit 1
1366 fi
1367
ec7fe110 1368 i=$(( i + 2 ))
f6788fc4 1369 done
ec7fe110 1370
f6788fc4
MD
1371 rmmod lttng-test
1372}
1373
9fec62f7 1374stop_lttng_sessiond
This page took 0.103246 seconds and 5 git commands to generate.