Cleanup: tests: name all temporary files to better identify leakage
[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
f6788fc4 115 stats=`babeltrace $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
9fec62f7
CB
404issue_356_filter="intfield > 0 && intfield > 1 && "
405issue_356_filter+="intfield > 2 && intfield > 3 && "
406issue_356_filter+="intfield > 4 && intfield > 5 && "
407issue_356_filter+="intfield > 6 && intfield > 7 && "
408issue_356_filter+="intfield > 8 || intfield > 0"
409
f6788fc4
MD
410start_lttng_sessiond
411
412### UST TESTS
413
414BIN_NAME="gen-ust-events"
415
ec7fe110
PP
416KIRK_KRAUSS_TESTS=(
417 # the tests below were written by Kirk Krauss in this article:
418 # http://www.drdobbs.com/architecture-and-design/matching-wildcards-an-empirical-way-to-t/240169123
419
420 str_has_events
421 '"abcccd" == "*ccd"'
422
423 str_has_events
424 '"mississipissippi" == "*issip*ss*"'
425
426 str_has_no_event
427 '"xxxx\*zzzzzzzzy\*f" == "xxxx*zzy*fffff"'
428
429 str_has_events
430 '"xxxx\*zzzzzzzzy\*f" == "xxx*zzy*f"'
431
432 str_has_no_event
433 '"xxxxzzzzzzzzyf" == "xxxx*zzy*fffff"'
434
435 str_has_events
436 '"xxxxzzzzzzzzyf" == "xxxx*zzy*f"'
437
438 str_has_events
439 '"xyxyxyzyxyz" == "xy*z*xyz"'
440
441 str_has_events
442 '"mississippi" == "*sip*"'
443
444 str_has_events
445 '"xyxyxyxyz" == "xy*xyz"'
446
447 str_has_events
448 '"mississippi" == "mi*sip*"'
449
450 str_has_events
451 '"ababac" == "*abac*"'
452
453 str_has_events
454 '"ababac" == "*abac*"'
455
456 str_has_events
457 '"aaazz" == "a*zz*"'
458
459 str_has_no_event
460 '"a12b12" == "*12*23"'
461
462 str_has_no_event
463 '"a12b12" == "a12b"'
464
465 str_has_events
466 '"a12b12" == "*12*12*"'
467
468 str_has_events
469 '"\*" == "*"'
470
471 str_has_events
472 '"a\*abab" == "a*b"'
473
474 str_has_events
475 '"a\*r" == "a*"'
476
477 str_has_no_event
478 '"a\*ar" == "a*aar"'
479
480 str_has_events
481 '"XYXYXYZYXYz" == "XY*Z*XYz"'
482
483 str_has_events
484 '"missisSIPpi" == "*SIP*"'
485
486 str_has_events
487 '"mississipPI" == "*issip*PI"'
488
489 str_has_events
490 '"xyxyxyxyz" == "xy*xyz"'
491
492 str_has_events
493 '"miSsissippi" == "mi*sip*"'
494
495 str_has_no_event
496 '"miSsissippi" == "mi*Sip*"'
497
498 str_has_events
499 '"abAbac" == "*Abac*"'
500
501 str_has_events
502 '"abAbac" == "*Abac*"'
503
504 str_has_events
505 '"aAazz" == "a*zz*"'
506
507 str_has_no_event
508 '"A12b12" == "*12*23"'
509
510 str_has_events
511 '"a12B12" == "*12*12*"'
512
513 str_has_events
514 '"oWn" == "*oWn*"'
515
516 str_has_events
517 '"bLah" == "bLah"'
518
519 str_has_no_event
520 '"bLah" == "bLaH"'
521
522 str_has_events
523 '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab" == "a*a*a*a*a*a*aa*aaa*a*a*b"'
524
525 str_has_events
526 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*a*aa*aaa*fa*ga*b*"'
527
528 str_has_no_event
529 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*a*x*aaa*fa*ga*b*"'
530
531 str_has_no_event
532 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*aaaa*fa*ga*gggg*b*"'
533
534 str_has_events
535 '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*aaaa*fa*ga*ggg*b*"'
536
537 str_has_events
538 '"aaabbaabbaab" == "*aabbaa*a*"'
539
540 str_has_events
541 '"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*"'
542
543 str_has_events
544 '"aaaaaaaaaaaaaaaaa" == "*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
545
546 str_has_no_event
547 '"aaaaaaaaaaaaaaaa" == "*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
548
549 str_has_no_event
550 '"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*"'
551
552 str_has_events
553 '"abc\*abcd\*abcde\*abcdef\*abcdefg\*abcdefgh\*abcdefghi\*abcdefghij\*abcdefghijk\*abcdefghijkl\*abcdefghijklm\*abcdefghijklmn" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*"'
554
555 str_has_no_event
556 '"abc\*abcd\*abcd\*abc\*abcd" == "abc*abc*abc*abc*abc"'
557
558 str_has_events
559 '"abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abcd" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abcd"'
560)
9fec62f7 561
80744d94
JR
562# Set IFS to newline to facilitate array declaration
563OLDIFS="$IFS"
564IFS=$'\n'
ec7fe110
PP
565UST_FILTERS=(
566 intfield
567 "intfield"
568
569 intfield_gt
570 "intfield > 1"
571
572 intfield_ge
573 "intfield >= 1"
574
575 intfield_lt
576 "intfield < 2"
577
578 intfield_le
579 "intfield <= 2"
580
581 intfield_eq
582 "intfield == 1"
583
584 intfield_ne
585 "intfield != 99"
586
587 intfield_not
588 "!intfield"
589
590 intfield
591 "-intfield"
592
593 intfield
594 "--intfield"
595
596 intfield
597 "+intfield"
598
599 intfield
600 "++intfield"
601
602 intfield_gt_and_longfield_gt
603 "intfield > 1 && longfield > 42"
604
605 intfield_ge_and_longfield_le
606 "intfield >= 42 && longfield <= 42"
607
608 intfield_lt_or_longfield_gt
609 "intfield < 1 || longfield > 98"
610
611 mixed_str_or_int_and_int
612 "(stringfield == \"test\" || intfield != 10) && intfield > 33"
613
614 mixed_int_double
615 "intfield < 42.4242424242"
616
617 # Issue #342
618 true_statement
619 "\"test\" == \"test\""
620
621 true_statement
622 "stringfield == \"test\""
623
624 true_statement
625 "stringfield == \"t*\""
626
627 true_statement
628 "stringfield == \"*\""
629
630 # Issue 356
631 intfield
632 $issue_356_filter
633
bff988fa
MD
634 true_statement
635 "1&1"
636
637 true_statement
638 "0|1"
639
640 true_statement
641 "0^1"
642
643 true_statement
644 "seqfield4[1]==2"
645
646 true_statement
647 "arrfield1[1]==2"
648
649 true_statement
650 "arrfield1[1]==2"
651
652 true_statement
653 "arrfield3[1]==2"
654
655 true_statement
656 "seqfield3[1]==2"
657
658 true_statement
659 "1 | (1 | (1 | 1))"
660
661 true_statement
662 "1 >= (1 >= (1 >= 1))"
663
664 true_statement
cea52dd8 665 "(0x101 & 0x100) == 0x100"
bff988fa
MD
666
667 true_statement
cea52dd8 668 "(0x101 | 0x10100) == 0x10101"
bff988fa
MD
669
670 true_statement
cea52dd8 671 "(0xF00F0F ^ 0xFF0F00) == 0x0F000F"
bff988fa 672
116d3c01
MD
673 true_statement
674 "(1 << 1) == 2"
675
676 true_statement
677 "(4 >> 1) == 2"
678
679 true_statement
680 "(1 << 8) == 256"
681
682 true_statement
683 "(262144 >> 16) == 4"
684
685 true_statement
686 "(~0 & 0xffff) == 0xffff"
687
688 true_statement
689 "(~0 & 0xffffffff) == 0xffffffff"
690
691 true_statement
692 "(~0 & 0xffffffffffffffff) == 0xffffffffffffffff"
693
694 true_statement
695 "-1==~0"
696
0358f3d8
MD
697 true_statement # unsigned bitwise ops
698 "~0>>4==0x0fffffffffffffff"
699
700 has_no_event
701 "1<<-1"
702
703 has_no_event
704 "1<<10000"
705
706 true_statement # comparator is signed, shift is unsigned
707 "(1<<63) < 0"
708
116d3c01 709 true_statement
831b702b 710 "(1<<2!=4)==0" # operator priority: shift before equality
116d3c01 711
831b702b
MD
712 true_statement
713 "1&3==1" # operator priority: masks before equality
714
715 true_statement
716 "(3|1==3)==1" # operator priority: masks before equality
717
718 true_statement
719 "(2^1==3)==1" # operator priority: masks before equality
116d3c01
MD
720
721 true_statement
722 "(1 << 32) == 4294967296"
723
724 true_statement
725 "(1 << 63) == 9223372036854775808"
726
bff988fa 727 true_statement
cea52dd8 728 "(arrfield1[2] & 1) == 1"
bff988fa
MD
729
730 true_statement
cea52dd8 731 "(arrfield1[2] | 0x111000) == 0x111003"
bff988fa
MD
732
733 true_statement
734 "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
735
736 true_statement
cea52dd8 737 "(seqfield4[2] & 1) == 1"
bff988fa
MD
738
739 true_statement
cea52dd8 740 "(seqfield4[2] | 0x111000) == 0x111003"
bff988fa 741
ec7fe110
PP
742 true_statement
743 "intfield < 0xDEADBEEF"
744
745 intfield_lt
746 "intfield < 0x2"
747
748 intfield_lt
749 "intfield < 02"
750
751 true_statement
752 "stringfield2 == \"\\\*\""
753
754 true_statement
755 "1.0 || intfield || 1.0"
756
757 intfield_gt
758 "1 < intfield"
759
760 has_no_event
761 "\$ctx.vtid == 0"
762
763 has_events
764 "\$ctx.vtid != 0"
765
766 has_no_event
767 "0 == \$ctx.vtid"
768
769 has_events
770 "0 != \$ctx.vtid"
771
772 has_no_event
773 "\$ctx.vpid == 0"
774
775 has_events
776 "\$ctx.vpid != 0"
777
778 has_no_event
779 "0 == \$ctx.vpid"
780
781 has_events
782 "0 != \$ctx.vpid"
783
784 has_no_event
785 "\$ctx.procname != \"$BIN_NAME\""
786
787 has_events
788 "\$ctx.procname == \"$BIN_NAME\""
789
790 has_no_event
791 "\"$BIN_NAME\" != \$ctx.procname"
792
793 has_events
794 "\"$BIN_NAME\" == \$ctx.procname"
795
796 has_no_event
797 "\$ctx.procname != \"$BIN_NAME*\""
798
799 has_events
800 "\$ctx.procname == \"$BIN_NAME*\""
801
802 has_no_event
803 "\"$BIN_NAME*\" != \$ctx.procname"
804
805 has_events
806 "\"$BIN_NAME*\" == \$ctx.procname"
807
808 has_no_event
809 "\$ctx.procname != \"*\""
810
811 has_events
812 "\$ctx.procname == \"*\""
813
814 has_no_event
815 "\"*\" != \$ctx.procname"
816
817 has_events
818 "\"*\" == \$ctx.procname"
819
820 has_no_event
821 "!a.f.d"
822
823 has_no_event
824 "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
825
826 has_no_event
827 "\$ctx.vtid.blah == 0"
828
829 has_no_event
830 "asdf.asdfsd.sadf < 4"
831
832 has_no_event
833 "0 == \$ctx.vtid.blah"
834
39ac0a0e
MD
835 # check that bytecode linker refuses to link against a
836 # non-string array.
837 has_no_event
838 'arrfield1 != "dontmatch"'
839
840 # check that bytecode linker refuses to link against a
841 # non-string sequence.
842 has_no_event
843 'seqfield1 != "dontmatch"'
844
ec7fe110 845 END
9fec62f7
CB
846)
847
ec7fe110
PP
848UST_STR_FILTERS=(
849 str_has_events
850 'str == "hypothecary"'
851
852 str_has_events
853 '"hypothecary" == str'
854
855 str_has_events
856 'str != "hypothecary"'
857
858 str_has_events
859 '"hypothecary" != str'
860
861 str_has_events
862 'str == "*cary"'
863
864 str_has_events
865 '"*cary" == str'
866
867 str_has_events
868 'str != "*cary"'
869
870 str_has_events
871 '"*cary" != str'
872
873 str_has_events
874 'str == "hypo*"'
875
876 str_has_events
877 '"hypo*" == str'
878
879 str_has_events
880 'str != "hypo*"'
881
882 str_has_events
883 '"hypo*" != str'
884
885 str_has_events
886 'str == "*the*"'
887
888 str_has_events
889 '"*the*" == str'
890
891 str_has_events
892 'str != "*the*"'
893
894 str_has_events
895 '"*the*" != str'
896
897 str_has_events
898 'str == "**"'
899
900 str_has_events
901 '"**" == str'
902
903 str_has_no_event
904 'str != "**"'
905
906 str_has_no_event
907 '"**" != str'
908
909 str_has_events
910 'str == "sc*"'
911
912 str_has_events
913 '"sc*" == str'
914
915 str_has_events
916 'str != "sc*"'
917
918 str_has_events
919 '"sc*" != str'
920
921 str_has_events
922 'str == "de*al"'
923
924 str_has_events
925 '"de*al" == str'
926
927 str_has_events
928 'str != "de*al"'
929
930 str_has_events
931 '"de*al" != str'
932
933 str_has_events
934 'str == "*po*siz*"'
935
936 str_has_events
937 '"*po*siz*" == str'
938
939 str_has_events
940 'str != "*po*siz*"'
941
942 str_has_events
943 '"*po*siz*" != str'
944
945 str_has_events
946 'str == "*po***siz*"'
947
948 str_has_events
949 '"*po***siz*" == str'
950
951 str_has_events
952 'str != "*po***siz*"'
953
954 str_has_events
955 '"*po***siz*" != str'
956
957 str_has_no_event
958 'str == "*po*\**siz*"'
959
960 str_has_no_event
961 '"*po*\**siz*" == str'
962
963 str_has_no_event
964 'str == "*zulu*"'
965
966 str_has_no_event
967 '"*zulu*" == str'
968
969 str_has_no_event
970 'str == "8*"'
971
972 str_has_no_event
973 '"8*" == str'
974
975 str_has_no_event
976 'str == "*8"'
977
978 str_has_no_event
979 '"*8" == str'
980
981 str_has_no_event
982 'str == "de\*al"'
983
984 str_has_no_event
985 '"de\*al" == str'
986
987 str_has_events
988 '"salut*" == "salut vous"'
989
990 str_has_events
991 '"salut*" == "salut vous*"'
992
993 str_has_events
994 '"salut vous*" == "salut*"'
995
996 ${KIRK_KRAUSS_TESTS[@]}
997
998 END
999)
f6788fc4
MD
1000
1001if [ ! -x "$CURDIR/$BIN_NAME" ]; then
1002 BAIL_OUT "No UST nevents binary detected."
1003fi
1004
80744d94
JR
1005IFS="$OLDIFS"
1006
f6788fc4 1007diag "Test UST valid filters"
9fec62f7 1008
f6788fc4
MD
1009KERNEL_CHECK=0
1010i=0
ec7fe110
PP
1011while true; do
1012 validator="${UST_FILTERS[$i]}"
1013
1014 if [ "$validator" = END ]; then
1015 break
1016 fi
9fec62f7 1017
ec7fe110
PP
1018 filter="${UST_FILTERS[$(( i + 1 ))]}"
1019 test_valid_filter ust -u "tp:tptest" "$filter" "validator_$validator"
9fec62f7
CB
1020
1021 if [ $? -eq 1 ]; then
1022 stop_lttng_sessiond
1023 exit 1
1024 fi
1025
ec7fe110 1026 i=$(( i + 2 ))
9fec62f7
CB
1027done
1028
ec7fe110
PP
1029i=0
1030while true; do
1031 validator="${UST_STR_FILTERS[$i]}"
1032
1033 if [ "$validator" = END ]; then
1034 break
1035 fi
1036
1037 filter="${UST_STR_FILTERS[$(( i + 1 ))]}"
1038 test_valid_filter ust_str -u "tp:the_string" "$filter" "validator_$validator"
1039
1040 if [ $? -eq 1 ]; then
1041 stop_lttng_sessiond
1042 exit 1
1043 fi
1044
1045 i=$(( i + 2 ))
1046done
f6788fc4
MD
1047
1048### KERNEL TESTS
1049
1050BIN_NAME="test_valid_filt" # Current script name truncated by kernel
1051
1052# One to one mapping between filters and validators
80744d94
JR
1053# Set IFS to newline to facilitate array declaration
1054OLDIFS="$IFS"
1055IFS=$'\n'
ec7fe110
PP
1056KERNEL_FILTERS=(
1057 intfield
1058 "intfield"
1059
1060 intfield_gt
1061 "intfield > 1"
1062
1063 intfield_ge
1064 "intfield >= 1"
1065
1066 intfield_lt
1067 "intfield < 2"
1068
1069 intfield_le
1070 "intfield <= 2"
1071
1072 intfield_eq
1073 "intfield == 1"
1074
1075 intfield_ne
1076 "intfield != 99"
1077
1078 intfield_not
1079 "!intfield"
1080
1081 intfield
1082 "-intfield"
1083
1084 intfield
1085 "--intfield"
1086
1087 intfield
1088 "+intfield"
1089
1090 intfield
1091 "++intfield"
1092
1093 intfield_gt_and_longfield_gt
1094 "intfield > 1 && longfield > 42"
1095
1096 intfield_ge_and_longfield_le
1097 "intfield >= 42 && longfield <= 42"
1098
1099 intfield_lt_or_longfield_gt
1100 "intfield < 1 || longfield > 98"
1101
1102 mixed_str_or_int_and_int
1103 "(stringfield == \"test\" || intfield != 10) && intfield > 33"
1104
1105 has_no_event
1106 "intfield < 42.4242424242"
1107
1108 true_statement
1109 "\"test\" == \"test\""
1110
1111 true_statement
1112 "stringfield == \"test\""
1113
1114 true_statement
1115 "stringfield == \"t*\""
1116
1117 true_statement
1118 "stringfield == \"*\""
1119
1120 intfield
1121 $issue_356_filter
1122
bff988fa
MD
1123 true_statement
1124 "1&1"
1125
1126 true_statement
1127 "0|1"
1128
1129 true_statement
1130 "0^1"
1131
1132 true_statement
1133 "seqfield4[1]==2"
1134
1135 true_statement
1136 "arrfield1[1]==2"
1137
1138 true_statement
1139 "arrfield1[1]==2"
1140
1141 true_statement
1142 "arrfield3[1]==2"
1143
1144 true_statement
1145 "seqfield3[1]==2"
1146
1147 true_statement
1148 "1 | (1 | (1 | 1))"
1149
1150 true_statement
1151 "1 >= (1 >= (1 >= 1))"
1152
1153 true_statement
cea52dd8 1154 "(0x101 & 0x100) == 0x100"
bff988fa
MD
1155
1156 true_statement
cea52dd8 1157 "(0x101 | 0x10100) == 0x10101"
bff988fa
MD
1158
1159 true_statement
cea52dd8 1160 "(0xF00F0F ^ 0xFF0F00) == 0x0F000F"
bff988fa 1161
116d3c01
MD
1162 true_statement
1163 "(1 << 1) == 2"
1164
1165 true_statement
1166 "(4 >> 1) == 2"
1167
1168 true_statement
1169 "(1 << 8) == 256"
1170
1171 true_statement
1172 "(262144 >> 16) == 4"
1173
1174 true_statement
1175 "(~0 & 0xffff) == 0xffff"
1176
1177 true_statement
1178 "(~0 & 0xffffffff) == 0xffffffff"
1179
1180 true_statement
1181 "(~0 & 0xffffffffffffffff) == 0xffffffffffffffff"
1182
1183 true_statement
1184 "-1==~0"
1185
0358f3d8
MD
1186 true_statement # unsigned bitwise ops
1187 "~0>>4==0x0fffffffffffffff"
1188
1189 has_no_event
1190 "1<<-1"
1191
1192 has_no_event
1193 "1<<10000"
1194
1195 true_statement # comparator is signed, shift is unsigned
1196 "(1<<63) < 0"
1197
116d3c01 1198 true_statement
831b702b 1199 "(1<<2!=4)==0" # operator priority: shift before equality
116d3c01 1200
831b702b
MD
1201 true_statement
1202 "1&3==1" # operator priority: masks before equality
1203
1204 true_statement
1205 "(3|1==3)==1" # operator priority: masks before equality
1206
1207 true_statement
1208 "(2^1==3)==1" # operator priority: masks before equality
116d3c01
MD
1209
1210 true_statement
1211 "(1 << 32) == 4294967296"
1212
1213 true_statement
1214 "(1 << 63) == 9223372036854775808"
1215
bff988fa 1216 true_statement
cea52dd8 1217 "(arrfield1[2] & 1) == 1"
bff988fa
MD
1218
1219 true_statement
cea52dd8 1220 "(arrfield1[2] | 0x111000) == 0x111003"
bff988fa
MD
1221
1222 true_statement
1223 "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
1224
1225 true_statement
cea52dd8 1226 "(seqfield4[2] & 1) == 1"
bff988fa
MD
1227
1228 true_statement
cea52dd8 1229 "(seqfield4[2] | 0x111000) == 0x111003"
bff988fa 1230
ec7fe110
PP
1231 true_statement
1232 "intfield < 0xDEADBEEF"
1233
1234 intfield_lt
1235 "intfield < 0x2"
1236
1237 intfield_lt
1238 "intfield < 02"
f6788fc4 1239
ec7fe110
PP
1240 true_statement
1241 "stringfield2 == \"\\\*\""
1242
1243 has_no_event
1244 "1.0 || intfield || 1.0"
1245
1246 intfield_gt
1247 "1 < intfield"
1248
1249 has_no_event
1250 "\$ctx.vtid == 0"
1251
1252 has_events
1253 "\$ctx.vtid != 0"
1254
1255 has_no_event
1256 "0 == \$ctx.vtid"
1257
1258 has_events
1259 "0 != \$ctx.vtid"
1260
1261 has_no_event
1262 "\$ctx.vpid == 0"
1263
1264 has_events
1265 "\$ctx.vpid != 0"
1266
1267 has_no_event
1268 "0 == \$ctx.vpid"
1269
1270 has_events
1271 "0 != \$ctx.vpid"
1272
1273 has_no_event
1274 "\$ctx.procname != \"$BIN_NAME\""
1275
1276 has_events
1277 "\$ctx.procname == \"$BIN_NAME\""
1278
1279 has_no_event
1280 "\"$BIN_NAME\" != \$ctx.procname"
1281
1282 has_events
1283 "\"$BIN_NAME\" == \$ctx.procname"
1284
1285 has_no_event
1286 "\$ctx.procname != \"$BIN_NAME*\""
1287
1288 has_events
1289 "\$ctx.procname == \"$BIN_NAME*\""
1290
1291 has_no_event
1292 "\"$BIN_NAME*\" != \$ctx.procname"
1293
1294 has_events
1295 "\"$BIN_NAME*\" == \$ctx.procname"
1296
1297 has_no_event
1298 "\$ctx.procname != \"*\""
1299
1300 has_events
1301 "\$ctx.procname == \"*\""
1302
1303 has_no_event
1304 "\"*\" != \$ctx.procname"
1305
1306 has_events
1307 "\"*\" == \$ctx.procname"
1308
1309 has_no_event
1310 "!a.f.d"
1311
1312 has_no_event
1313 "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
1314
1315 has_no_event
1316 "\$ctx.vtid.blah == 0"
1317
1318 has_no_event
1319 "asdf.asdfsd.sadf < 4"
1320
1321 has_no_event
1322 "0 == \$ctx.vtid.blah"
1323
ec7fe110
PP
1324 stringfield_has_events
1325 'stringfield == "test"'
1326
1327 stringfield_has_events
1328 '"test" == stringfield'
1329
1330 has_no_event
1331 'stringfield != "test"'
1332
1333 has_no_event
1334 '"test" != stringfield'
1335
1336 stringfield_has_events
1337 'stringfield == "*st"'
1338
1339 stringfield_has_events
1340 '"*st" == stringfield'
1341
1342 has_no_event
1343 'stringfield != "*st"'
1344
1345 has_no_event
1346 '"*st" != stringfield'
1347
1348 stringfield_has_events
1349 'stringfield == "te*"'
1350
1351 stringfield_has_events
1352 '"te*" == stringfield'
1353
1354 has_no_event
1355 'stringfield != "te*"'
1356
1357 has_no_event
1358 '"te*" != stringfield'
1359
1360 stringfield_has_events
1361 'stringfield == "te*t"'
1362
1363 stringfield_has_events
1364 '"te*t" == stringfield'
1365
1366 has_no_event
1367 'stringfield != "te*t"'
1368
1369 has_no_event
1370 '"te*t" != stringfield'
1371
1372 stringfield_has_events
1373 'stringfield == "tes*t"'
1374
1375 stringfield_has_events
1376 '"tes*t" == stringfield'
1377
1378 has_no_event
1379 'stringfield != "tes*t"'
1380
1381 has_no_event
1382 '"tes*t" != stringfield'
1383
1384 stringfield_has_events
1385 'stringfield == "*test"'
1386
1387 stringfield_has_events
1388 '"*test" == stringfield'
1389
1390 has_no_event
1391 'stringfield != "*test"'
1392
1393 has_no_event
1394 '"*test" != stringfield'
1395
1396 stringfield_has_events
1397 'stringfield == "test*"'
1398
1399 stringfield_has_events
1400 '"test*" == stringfield'
1401
1402 has_no_event
1403 'stringfield != "test*"'
1404
1405 has_no_event
1406 '"test*" != stringfield'
1407
1408 stringfield_has_events
1409 'stringfield == "*"'
1410
1411 stringfield_has_events
1412 '"*" == stringfield'
1413
1414 has_no_event
1415 'stringfield != "*"'
1416
1417 has_no_event
1418 '"*" != stringfield'
1419
1420 has_no_event
1421 'stringfield == "test*2"'
1422
1423 has_no_event
1424 'stringfield == "2*test"'
1425
1426 has_no_event
1427 'stringfield == "te\*st"'
1428
1429 has_no_event
1430 'stringfield == "te*ts"'
1431
1432 has_no_event
1433 'stringfield == "*\*test"'
1434
1435 has_no_event
1436 'stringfield == "test\*"'
1437
c99adc64
MD
1438 # check that bytecode linker refuses to link against a
1439 # non-string array.
1440 has_no_event
1441 'arrfield1 != "dontmatch"'
1442
1443 # check that bytecode linker refuses to link against a
1444 # non-string sequence.
1445 has_no_event
1446 'seqfield1 != "dontmatch"'
1447
ec7fe110
PP
1448 ${KIRK_KRAUSS_TESTS[@]}
1449
1450 END
f6788fc4
MD
1451)
1452
80744d94
JR
1453IFS=$OLDIFS
1454
f6788fc4
MD
1455if [ "$(id -u)" == "0" ]; then
1456 isroot=1
1457else
1458 isroot=0
1459fi
1460
1461skip $isroot "Root access is needed. Skipping all kernel valid filter tests." $NUM_KERNEL_TESTS ||
1462{
1463 diag "Test kernel valid filters"
1464
1465 KERNEL_CHECK=1
1466 modprobe lttng-test
ec7fe110 1467
f6788fc4 1468 i=0
ec7fe110
PP
1469 while true; do
1470 validator="${KERNEL_FILTERS[$i]}"
1471
1472 if [ "$validator" = END ]; then
1473 break
1474 fi
f6788fc4 1475
ec7fe110
PP
1476 filter="${KERNEL_FILTERS[$(( i + 1 ))]}"
1477 test_valid_filter kernel -k "lttng_test_filter_event" "$filter" "validator_$validator"
f6788fc4
MD
1478
1479 if [ $? -eq 1 ]; then
1480 stop_lttng_sessiond
1481 exit 1
1482 fi
1483
ec7fe110 1484 i=$(( i + 2 ))
f6788fc4 1485 done
ec7fe110 1486
d0e263e7 1487 modprobe --remove lttng-test
f6788fc4
MD
1488}
1489
9fec62f7 1490stop_lttng_sessiond
This page took 0.101821 seconds and 4 git commands to generate.