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 - Valid filters"
21 TESTDIR
=$CURDIR/..
/..
/..
23 BIN_NAME
="gen-ust-events"
24 STATS_BIN
="babelstats.pl"
25 SESSION_NAME
="valid_filter"
26 EVENT_NAME
="tp:tptest"
29 source $TESTDIR/utils
/utils.sh
31 print_test_banner
"$TEST_DESC"
33 if [ ! -x "$CURDIR/$BIN_NAME" ]; then
34 echo -e "No UST nevents binary detected. Passing."
38 function enable_ust_lttng_event_filter
()
43 echo -n "Enabling lttng event with filtering "
45 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
$event_name -s $sess_name -u --filter "$filter" 2>&1 >/dev
/null
58 .
/$CURDIR/$BIN_NAME $NR_ITER & >/dev
/null
2>&1
63 echo "Waiting for applications to end"
64 while [ -n "$(pidof $BIN_NAME)" ]; do
71 function test_valid_filter
77 echo -e "=== Testing valid filter: $1"
79 trace_path
=$
(mktemp
-d)
82 create_lttng_session
$SESSION_NAME $trace_path
85 enable_ust_lttng_event_filter
$SESSION_NAME $EVENT_NAME $filter
88 start_lttng_tracing
$SESSION_NAME
91 stop_lttng_tracing
$SESSION_NAME
94 destroy_lttng_session
$SESSION_NAME
96 echo -n "Validating filter output "
97 stats
=`babeltrace $trace_path | $CURDIR/$STATS_BIN --tracepoint $EVENT_NAME`
103 if [ $?
-eq 0 ]; then
113 function validate_min_max
120 echo $stats |
grep -q "$field $expected_min $expected_max"
125 function validator_intfield
130 validate_min_max
"$stats" "intfield" "1" "99"
131 status
=$
(($status|$?
))
133 validate_min_max
"$stats" "intfield2" "0x1" "0x63"
134 status
=$
(($status|$?
))
136 validate_min_max
"$stats" "longfield" "1" "99"
137 status
=$
(($status|$?
))
139 validate_min_max
"$stats" "netintfield" "1" "99"
140 status
=$
(($status|$?
))
142 validate_min_max
"$stats" "netintfieldhex" "0x1" "0x63"
143 status
=$
(($status|$?
))
145 validate_min_max
"$stats" "floatfield" "2222" "2222"
146 status
=$
(($status|$?
))
148 validate_min_max
"$stats" "doublefield" "2" "2"
149 status
=$
(($status|$?
))
154 function validator_intfield_gt
159 validate_min_max
"$stats" "intfield" "2" "99"
160 status
=$
(($status|$?
))
165 function validator_intfield_ge
170 validate_min_max
"$stats" "intfield" "1" "99"
171 status
=$
(($status|$?
))
176 function validator_intfield_lt
181 validate_min_max
"$stats" "intfield" "0" "1"
182 status
=$
(($status|$?
))
187 function validator_intfield_le
192 validate_min_max
"$stats" "intfield" "0" "2"
193 status
=$
(($status|$?
))
198 function validator_intfield_eq
203 validate_min_max
"$stats" "intfield" "1" "1"
204 status
=$
(($status|$?
))
209 function validator_intfield_ne
214 validate_min_max
"$stats" "intfield" "0" "98"
215 status
=$
(($status|$?
))
220 function validator_intfield_not
225 validate_min_max
"$stats" "intfield" "0" "0"
226 status
=$
(($status|$?
))
231 function validator_intfield_gt_and_longfield_gt
236 validate_min_max
"$stats" "intfield" "43" "99"
237 status
=$
(($status|$?
))
238 validate_min_max
"$stats" "longfield" "43" "99"
239 status
=$
(($status|$?
))
244 function validator_intfield_ge_and_longfield_le
249 validate_min_max
"$stats" "intfield" "42" "42"
250 status
=$
(($status|$?
))
251 validate_min_max
"$stats" "longfield" "42" "42"
252 status
=$
(($status|$?
))
257 function validator_intfield_lt_or_longfield_gt
262 validate_min_max
"$stats" "intfield" "0" "99"
263 status
=$
(($status|$?
))
264 validate_min_max
"$stats" "longfield" "0" "99"
265 status
=$
(($status|$?
))
270 function validator_mixed_str_or_int_and_int
275 validate_min_max
"$stats" "intfield" "34" "99"
276 status
=$
(($status|$?
))
278 validate_min_max
"$stats" "stringfield" "\"test\"" "\"test\""
279 status
=$
(($status|$?
))
284 function validator_mixed_int_double
289 validate_min_max
"$stats" "intfield" "0" "42"
290 status
=$
(($status|$?
))
295 function validator_true_statement
300 validate_min_max
"$stats" "intfield" "0" "99"
301 status
=$
(($status|$?
))
303 validate_min_max
"$stats" "intfield2" "0x0" "0x63"
304 status
=$
(($status|$?
))
306 validate_min_max
"$stats" "longfield" "0" "99"
307 status
=$
(($status|$?
))
309 validate_min_max
"$stats" "netintfield" "0" "99"
310 status
=$
(($status|$?
))
312 validate_min_max
"$stats" "netintfieldhex" "0x0" "0x63"
313 status
=$
(($status|$?
))
315 validate_min_max
"$stats" "floatfield" "2222" "2222"
316 status
=$
(($status|$?
))
318 validate_min_max
"$stats" "doublefield" "2" "2"
319 status
=$
(($status|$?
))
321 validate_min_max
"$stats" "stringfield" "\"test\"" "\"test\""
322 status
=$
(($status|$?
))
324 validate_min_max
"$stats" "stringfield2" ""\
*"" ""\
*""
325 status
=$
(($status|$?
))
332 issue_356_filter
="intfield > 0 && intfield > 1 && "
333 issue_356_filter
+="intfield > 2 && intfield > 3 && "
334 issue_356_filter
+="intfield > 4 && intfield > 5 && "
335 issue_356_filter
+="intfield > 6 && intfield > 7 && "
336 issue_356_filter
+="intfield > 8 || intfield > 0"
338 # One to one mapping between filters and validators
340 FILTERS
=("intfield" #1
352 "intfield > 1 && longfield > 42" #13
353 "intfield >= 42 && longfield <= 42" #14
354 "intfield < 1 || longfield > 98" #15
355 "(stringfield == \"test\" || intfield != 10) && intfield > 33" #16
356 "intfield < 42.4242424242" #17
357 "\"test\" == \"test\"" #18 #Issue #342
358 "stringfield == \"test\"" #19
359 "stringfield == \"t*\"" #20
360 "stringfield == \"*\"" #21
361 $issue_356_filter #22 #Issue #356
362 "intfield < 0xDEADBEEF" #23
365 "stringfield2 == \"\\\*\"" #26
366 "1.0 || intfield || 1.0" #27
370 VALIDATOR
=("validator_intfield" #1
371 "validator_intfield_gt" #2
372 "validator_intfield_ge" #3
373 "validator_intfield_lt" #4
374 "validator_intfield_le" #5
375 "validator_intfield_eq" #6
376 "validator_intfield_ne" #7
377 "validator_intfield_not" #8
378 "validator_intfield" #9
379 "validator_intfield" #10
380 "validator_intfield" #11
381 "validator_intfield" #12
382 "validator_intfield_gt_and_longfield_gt" #13
383 "validator_intfield_ge_and_longfield_le" #14
384 "validator_intfield_lt_or_longfield_gt" #15
385 "validator_mixed_str_or_int_and_int" #16
386 "validator_mixed_int_double" #17
387 "validator_true_statement" #18
388 "validator_true_statement" #19
389 "validator_true_statement" #20
390 "validator_true_statement" #21
391 "validator_intfield" #22
392 "validator_true_statement" #23
393 "validator_intfield_lt" #24
394 "validator_intfield_lt" #25
395 "validator_true_statement" #26
396 "validator_true_statement" #27
397 "validator_intfield_gt" #28
400 FILTER_COUNT
=${#FILTERS[@]}
405 while [ "$i" -lt "$FILTER_COUNT" ]; do
407 test_valid_filter
"${FILTERS[$i]}" "${VALIDATOR[$i]}"
409 if [ $?
-eq 1 ]; then