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"
30 source $TESTDIR/utils
/utils.sh
32 print_test_banner
"$TEST_DESC"
34 if [ ! -x "$CURDIR/$BIN_NAME" ]; then
35 BAIL_OUT
"No UST nevents binary detected."
38 function enable_ust_lttng_event_filter
()
44 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN enable-event
$event_name -s $sess_name -u --filter "$filter" 2>&1 >/dev
/null
46 ok $?
"Enable lttng event with filtering"
51 .
/$CURDIR/$BIN_NAME $NR_ITER & >/dev
/null
2>&1
56 while [ -n "$(pidof $BIN_NAME)" ]; do
59 pass
"Wait for application end"
62 function test_valid_filter
67 diag
"Test valid filter: $1"
69 trace_path
=$
(mktemp
-d)
72 create_lttng_session
$SESSION_NAME $trace_path
75 enable_ust_lttng_event_filter
$SESSION_NAME $EVENT_NAME $filter
78 start_lttng_tracing
$SESSION_NAME
81 stop_lttng_tracing
$SESSION_NAME
84 destroy_lttng_session
$SESSION_NAME
86 stats
=`babeltrace $trace_path | $CURDIR/$STATS_BIN --tracepoint $EVENT_NAME`
92 ok $?
"Validate trace filter output"
97 function validate_min_max
104 echo $stats |
grep -q "$field $expected_min $expected_max"
109 function validator_intfield
114 validate_min_max
"$stats" "intfield" "1" "99"
115 status
=$
(($status|$?
))
117 validate_min_max
"$stats" "intfield2" "0x1" "0x63"
118 status
=$
(($status|$?
))
120 validate_min_max
"$stats" "longfield" "1" "99"
121 status
=$
(($status|$?
))
123 validate_min_max
"$stats" "netintfield" "1" "99"
124 status
=$
(($status|$?
))
126 validate_min_max
"$stats" "netintfieldhex" "0x1" "0x63"
127 status
=$
(($status|$?
))
129 validate_min_max
"$stats" "floatfield" "2222" "2222"
130 status
=$
(($status|$?
))
132 validate_min_max
"$stats" "doublefield" "2" "2"
133 status
=$
(($status|$?
))
138 function validator_intfield_gt
143 validate_min_max
"$stats" "intfield" "2" "99"
144 status
=$
(($status|$?
))
149 function validator_intfield_ge
154 validate_min_max
"$stats" "intfield" "1" "99"
155 status
=$
(($status|$?
))
160 function validator_intfield_lt
165 validate_min_max
"$stats" "intfield" "0" "1"
166 status
=$
(($status|$?
))
171 function validator_intfield_le
176 validate_min_max
"$stats" "intfield" "0" "2"
177 status
=$
(($status|$?
))
182 function validator_intfield_eq
187 validate_min_max
"$stats" "intfield" "1" "1"
188 status
=$
(($status|$?
))
193 function validator_intfield_ne
198 validate_min_max
"$stats" "intfield" "0" "98"
199 status
=$
(($status|$?
))
204 function validator_intfield_not
209 validate_min_max
"$stats" "intfield" "0" "0"
210 status
=$
(($status|$?
))
215 function validator_intfield_gt_and_longfield_gt
220 validate_min_max
"$stats" "intfield" "43" "99"
221 status
=$
(($status|$?
))
222 validate_min_max
"$stats" "longfield" "43" "99"
223 status
=$
(($status|$?
))
228 function validator_intfield_ge_and_longfield_le
233 validate_min_max
"$stats" "intfield" "42" "42"
234 status
=$
(($status|$?
))
235 validate_min_max
"$stats" "longfield" "42" "42"
236 status
=$
(($status|$?
))
241 function validator_intfield_lt_or_longfield_gt
246 validate_min_max
"$stats" "intfield" "0" "99"
247 status
=$
(($status|$?
))
248 validate_min_max
"$stats" "longfield" "0" "99"
249 status
=$
(($status|$?
))
254 function validator_mixed_str_or_int_and_int
259 validate_min_max
"$stats" "intfield" "34" "99"
260 status
=$
(($status|$?
))
262 validate_min_max
"$stats" "stringfield" "\"test\"" "\"test\""
263 status
=$
(($status|$?
))
268 function validator_mixed_int_double
273 validate_min_max
"$stats" "intfield" "0" "42"
274 status
=$
(($status|$?
))
279 function validator_true_statement
284 validate_min_max
"$stats" "intfield" "0" "99"
285 status
=$
(($status|$?
))
287 validate_min_max
"$stats" "intfield2" "0x0" "0x63"
288 status
=$
(($status|$?
))
290 validate_min_max
"$stats" "longfield" "0" "99"
291 status
=$
(($status|$?
))
293 validate_min_max
"$stats" "netintfield" "0" "99"
294 status
=$
(($status|$?
))
296 validate_min_max
"$stats" "netintfieldhex" "0x0" "0x63"
297 status
=$
(($status|$?
))
299 validate_min_max
"$stats" "floatfield" "2222" "2222"
300 status
=$
(($status|$?
))
302 validate_min_max
"$stats" "doublefield" "2" "2"
303 status
=$
(($status|$?
))
305 validate_min_max
"$stats" "stringfield" "\"test\"" "\"test\""
306 status
=$
(($status|$?
))
308 validate_min_max
"$stats" "stringfield2" ""\
*"" ""\
*""
309 status
=$
(($status|$?
))
314 plan_tests
$NUM_TESTS
318 issue_356_filter
="intfield > 0 && intfield > 1 && "
319 issue_356_filter
+="intfield > 2 && intfield > 3 && "
320 issue_356_filter
+="intfield > 4 && intfield > 5 && "
321 issue_356_filter
+="intfield > 6 && intfield > 7 && "
322 issue_356_filter
+="intfield > 8 || intfield > 0"
324 # One to one mapping between filters and validators
326 FILTERS
=("intfield" #1
338 "intfield > 1 && longfield > 42" #13
339 "intfield >= 42 && longfield <= 42" #14
340 "intfield < 1 || longfield > 98" #15
341 "(stringfield == \"test\" || intfield != 10) && intfield > 33" #16
342 "intfield < 42.4242424242" #17
343 "\"test\" == \"test\"" #18 #Issue #342
344 "stringfield == \"test\"" #19
345 "stringfield == \"t*\"" #20
346 "stringfield == \"*\"" #21
347 $issue_356_filter #22 #Issue #356
348 "intfield < 0xDEADBEEF" #23
351 "stringfield2 == \"\\\*\"" #26
352 "1.0 || intfield || 1.0" #27
356 VALIDATOR
=("validator_intfield" #1
357 "validator_intfield_gt" #2
358 "validator_intfield_ge" #3
359 "validator_intfield_lt" #4
360 "validator_intfield_le" #5
361 "validator_intfield_eq" #6
362 "validator_intfield_ne" #7
363 "validator_intfield_not" #8
364 "validator_intfield" #9
365 "validator_intfield" #10
366 "validator_intfield" #11
367 "validator_intfield" #12
368 "validator_intfield_gt_and_longfield_gt" #13
369 "validator_intfield_ge_and_longfield_le" #14
370 "validator_intfield_lt_or_longfield_gt" #15
371 "validator_mixed_str_or_int_and_int" #16
372 "validator_mixed_int_double" #17
373 "validator_true_statement" #18
374 "validator_true_statement" #19
375 "validator_true_statement" #20
376 "validator_true_statement" #21
377 "validator_intfield" #22
378 "validator_true_statement" #23
379 "validator_intfield_lt" #24
380 "validator_intfield_lt" #25
381 "validator_true_statement" #26
382 "validator_true_statement" #27
383 "validator_intfield_gt" #28
386 FILTER_COUNT
=${#FILTERS[@]}
391 while [ "$i" -lt "$FILTER_COUNT" ]; do
393 test_valid_filter
"${FILTERS[$i]}" "${VALIDATOR[$i]}"
395 if [ $?
-eq 1 ]; then