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