3 # Copyright (C) - 2012 Christian Babeux <christian.babeux@efficios.com>
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.
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
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.
18 TEST_DESC
="Filtering - Invalid filters"
21 TESTDIR
=$CURDIR/..
/..
/..
23 SESSION_NAME
="filter-invalid"
25 ENABLE_EVENT_STDERR
="/tmp/invalid-filters-stderr"
26 TRACE_PATH
=$
(mktemp
-d)
30 NUM_TESTS
=$
(($NUM_UST_TESTS+$NUM_KERNEL_TESTS+$NUM_GLOBAL_TESTS))
32 source $TESTDIR/utils
/utils.sh
34 function enable_lttng_event_filter
41 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
$event_name -s $sess_name \
42 $domain --filter "$filter" 2> $ENABLE_EVENT_STDERR 1> /dev
/null
46 fail
"Enable lttng event with filtering and invalid filter"
49 pass
"Enable lttng event with filtering and invalid filter"
54 function test_invalid_filter
57 test_invalid_filter
="$2"
59 diag
"Test filter expression with invalid filter"
60 diag
"Filter: $test_invalid_filter"
63 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
66 enable_lttng_event_filter
$domain $SESSION_NAME $EVENT_NAME "$test_invalid_filter"
69 destroy_lttng_session_ok
$SESSION_NAME
72 function test_bytecode_limit
76 # Current bytecode limitation is 65536 bytes long.
77 # Generate a huge bytecode with some perl-fu
78 BYTECODE_LIMIT
=`perl -e 'print "intfield" . " && 1" x5460'`
80 diag
"Test filter bytecode limits (64KiB)"
83 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
86 enable_lttng_event_filter
$domain $SESSION_NAME $EVENT_NAME "$BYTECODE_LIMIT"
89 destroy_lttng_session_ok
$SESSION_NAME
94 print_test_banner
"$TEST_DESC"
114 "asdfas
< 2332 || asdf
+ 1 > 1"
115 "!+-+++-------+++++++++++-----!!--!44+1"
116 "aaa||
(gg
)+(333----1)"
118 # Unmatched parenthesis
119 "((((((((((((((intfield
)))))))))))))"
120 '0 || ("abc
" != "def
")) && (3 < 4)'
125 "asdfasdf-
>asdfasdf
< 2"
126 # String can\'t be root node
128 # Unary op on string not allowed
130 # Comparison with string type not allowed
131 "\"somestring
\" > 42"
132 "\"somestring
\" > 42.0"
133 "42 > \"somestring
\""
134 "42.0 > \"somestring
\""
135 # Logical operator with string type not allowed
136 "\"somestring
\" ||
1"
137 "1 ||
\"somestring
\""
138 # Nesting of binary operator not allowed
143 # Only \$ctx is supported for now
144 "\
$global.value
== 0"
145 "0 == \
$global.value
"
146 # Cannot compare two full star globbing patterns
147 '"hello
*world
" == "yes*man
"'
148 '"hello
*world
" == "yesman
*"'
149 '"helloworld
*" == "yes*man
"'
150 # May only use != and == operators when one of them is a full
151 # star globbing pattern
152 '"hello
*world
" < field'
153 '"hello
*world
" <= field'
154 '"hello
*world
" >= field'
155 '"hello
*world
" > field'
156 '"hello
*world
" || field'
157 '"hello
*world
" && field'
158 'field < "hello
*world
"'
159 'field <= "hello
*world
"'
160 'field >= "hello
*world
"'
161 'field > "hello
*world
"'
162 'field && "hello
*world
"'
163 'field || "hello
*world
"'
168 diag "Test UST filters
"
171 while [ "$i" -lt "${#INVALID_FILTERS[@]}" ]; do
172 echo "${INVALID_FILTERS[$i]}"
173 test_invalid_filter -u "${INVALID_FILTERS[$i]}"
177 test_bytecode_limit -u
179 if [ "$
(id
-u)" == "0" ]; then
185 skip $isroot "Root access is needed. Skipping all kernel invalid filter tests.
" $NUM_KERNEL_TESTS ||
187 diag "Test kernel filters
"
189 while [ "$i" -lt "${#INVALID_FILTERS[@]}" ]; do
190 echo "${INVALID_FILTERS[$i]}"
191 test_invalid_filter -k "${INVALID_FILTERS[$i]}"
195 test_bytecode_limit -k
199 rm -f $ENABLE_EVENT_STDERR