Tests: Fix missing TAP output in overlap test
[lttng-tools.git] / tests / regression / tools / filtering / test_valid_filter
CommitLineData
9fec62f7
CB
1#!/bin/bash
2#
3# Copyright (C) - 2012 Christian Babeux <christian.babeux@efficios.com>
4#
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.
8#
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
12# more details.
13#
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.
17
18TEST_DESC="Filtering - Valid filters"
19
20CURDIR=$(dirname $0)/
9ac429ef 21TESTDIR=$CURDIR/../../..
9fec62f7
CB
22LTTNG_BIN="lttng"
23BIN_NAME="gen-ust-events"
24STATS_BIN="babelstats.pl"
25SESSION_NAME="valid_filter"
26EVENT_NAME="tp:tptest"
27NR_ITER=100
03276eea 28NUM_TESTS=198
9fec62f7 29
9ac429ef 30source $TESTDIR/utils/utils.sh
9fec62f7
CB
31
32print_test_banner "$TEST_DESC"
33
34if [ ! -x "$CURDIR/$BIN_NAME" ]; then
03276eea 35 BAIL_OUT "No UST nevents binary detected."
9fec62f7
CB
36fi
37
38function enable_ust_lttng_event_filter()
39{
40 sess_name="$1"
41 event_name="$2"
42 filter="$3"
9fec62f7
CB
43
44 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $event_name -s $sess_name -u --filter "$filter" 2>&1 >/dev/null
45
03276eea 46 ok $? "Enable lttng event with filtering"
9fec62f7
CB
47}
48
49function run_apps
50{
51 ./$CURDIR/$BIN_NAME $NR_ITER & >/dev/null 2>&1
52}
53
54function wait_apps
55{
9fec62f7 56 while [ -n "$(pidof $BIN_NAME)" ]; do
9fec62f7
CB
57 sleep 1
58 done
03276eea 59 pass "Wait for application end"
9fec62f7
CB
60}
61
62function test_valid_filter
63{
64 filter="$1"
65 validator="$2"
66
03276eea 67 diag "Test valid filter: $1"
9fec62f7
CB
68
69 trace_path=$(mktemp -d)
70
71 # Create session
72 create_lttng_session $SESSION_NAME $trace_path
73
74 # Enable filter
75 enable_ust_lttng_event_filter $SESSION_NAME $EVENT_NAME $filter
76
77 # Trace apps
78 start_lttng_tracing $SESSION_NAME
79 run_apps
80 wait_apps
81 stop_lttng_tracing $SESSION_NAME
82
83 # Destroy session
84 destroy_lttng_session $SESSION_NAME
85
9fec62f7
CB
86 stats=`babeltrace $trace_path | $CURDIR/$STATS_BIN --tracepoint $EVENT_NAME`
87
3bae2c9a
DG
88 rm -rf $trace_path
89
9fec62f7
CB
90 $validator "$stats"
91
03276eea
CB
92 ok $? "Validate trace filter output"
93
94 rm -rf $trace_path
9fec62f7
CB
95}
96
97function validate_min_max
98{
99 stats="$1"
100 field=$2
101 expected_min=$3
102 expected_max=$4
103
104 echo $stats | grep -q "$field $expected_min $expected_max"
105
106 return $?
107}
108
109function validator_intfield
110{
111 stats="$1"
112 status=0
113
114 validate_min_max "$stats" "intfield" "1" "99"
115 status=$(($status|$?))
116
117 validate_min_max "$stats" "intfield2" "0x1" "0x63"
118 status=$(($status|$?))
119
120 validate_min_max "$stats" "longfield" "1" "99"
121 status=$(($status|$?))
122
123 validate_min_max "$stats" "netintfield" "1" "99"
124 status=$(($status|$?))
125
126 validate_min_max "$stats" "netintfieldhex" "0x1" "0x63"
127 status=$(($status|$?))
128
129 validate_min_max "$stats" "floatfield" "2222" "2222"
130 status=$(($status|$?))
131
132 validate_min_max "$stats" "doublefield" "2" "2"
133 status=$(($status|$?))
134
135 return $status
136}
137
138function validator_intfield_gt
139{
140 stats="$1"
141 status=0
142
143 validate_min_max "$stats" "intfield" "2" "99"
144 status=$(($status|$?))
145
146 return $status
147}
148
149function validator_intfield_ge
150{
151 stats="$1"
152 status=0
153
154 validate_min_max "$stats" "intfield" "1" "99"
155 status=$(($status|$?))
156
157 return $status
158}
159
160function validator_intfield_lt
161{
162 stats="$1"
163 status=0
164
165 validate_min_max "$stats" "intfield" "0" "1"
166 status=$(($status|$?))
167
168 return $status
169}
170
171function validator_intfield_le
172{
173 stats="$1"
174 status=0
175
176 validate_min_max "$stats" "intfield" "0" "2"
177 status=$(($status|$?))
178
179 return $status
180}
181
182function validator_intfield_eq
183{
184 stats="$1"
185 status=0
186
187 validate_min_max "$stats" "intfield" "1" "1"
188 status=$(($status|$?))
189
190 return $status
191}
192
193function validator_intfield_ne
194{
195 stats="$1"
196 status=0
197
198 validate_min_max "$stats" "intfield" "0" "98"
199 status=$(($status|$?))
200
201 return $status
202}
203
204function validator_intfield_not
205{
206 stats="$1"
207 status=0
208
209 validate_min_max "$stats" "intfield" "0" "0"
210 status=$(($status|$?))
211
212 return $status
213}
214
215function validator_intfield_gt_and_longfield_gt
216{
217 stats="$1"
218 status=0
219
220 validate_min_max "$stats" "intfield" "43" "99"
221 status=$(($status|$?))
222 validate_min_max "$stats" "longfield" "43" "99"
223 status=$(($status|$?))
224
225 return $status
226}
227
228function validator_intfield_ge_and_longfield_le
229{
230 stats="$1"
231 status=0
232
233 validate_min_max "$stats" "intfield" "42" "42"
234 status=$(($status|$?))
235 validate_min_max "$stats" "longfield" "42" "42"
236 status=$(($status|$?))
237
238 return $status
239}
240
241function validator_intfield_lt_or_longfield_gt
242{
243 stats="$1"
244 status=0
245
246 validate_min_max "$stats" "intfield" "0" "99"
247 status=$(($status|$?))
248 validate_min_max "$stats" "longfield" "0" "99"
249 status=$(($status|$?))
250
251 return $status
252}
253
254function validator_mixed_str_or_int_and_int
255{
256 stats="$1"
257 status=0
258
259 validate_min_max "$stats" "intfield" "34" "99"
260 status=$(($status|$?))
261
262 validate_min_max "$stats" "stringfield" "\"test\"" "\"test\""
263 status=$(($status|$?))
264
265 return $status
266}
267
268function validator_mixed_int_double
269{
270 stats="$1"
271 status=0
272
273 validate_min_max "$stats" "intfield" "0" "42"
274 status=$(($status|$?))
275
276 return $status
277}
278
279function validator_true_statement
280{
281 stats="$1"
282 status=0
283
284 validate_min_max "$stats" "intfield" "0" "99"
285 status=$(($status|$?))
286
287 validate_min_max "$stats" "intfield2" "0x0" "0x63"
288 status=$(($status|$?))
289
290 validate_min_max "$stats" "longfield" "0" "99"
291 status=$(($status|$?))
292
293 validate_min_max "$stats" "netintfield" "0" "99"
294 status=$(($status|$?))
295
296 validate_min_max "$stats" "netintfieldhex" "0x0" "0x63"
297 status=$(($status|$?))
298
299 validate_min_max "$stats" "floatfield" "2222" "2222"
300 status=$(($status|$?))
301
302 validate_min_max "$stats" "doublefield" "2" "2"
303 status=$(($status|$?))
304
305 validate_min_max "$stats" "stringfield" "\"test\"" "\"test\""
306 status=$(($status|$?))
307
308 validate_min_max "$stats" "stringfield2" ""\*"" ""\*""
309 status=$(($status|$?))
310
311 return $status
312}
313
03276eea
CB
314plan_tests $NUM_TESTS
315
9fec62f7
CB
316IFS=$'\n'
317
318issue_356_filter="intfield > 0 && intfield > 1 && "
319issue_356_filter+="intfield > 2 && intfield > 3 && "
320issue_356_filter+="intfield > 4 && intfield > 5 && "
321issue_356_filter+="intfield > 6 && intfield > 7 && "
322issue_356_filter+="intfield > 8 || intfield > 0"
323
324# One to one mapping between filters and validators
325
326FILTERS=("intfield" #1
327 "intfield > 1" #2
328 "intfield >= 1" #3
329 "intfield < 2" #4
330 "intfield <= 2" #5
331 "intfield == 1" #6
332 "intfield != 99" #7
333 "!intfield" #8
334 "-intfield" #9
335 "--intfield" #10
336 "+intfield" #11
337 "++intfield" #12
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
349 "intfield < 0x2" #24
350 "intfield < 02" #25
351 "stringfield2 == \"\\\*\"" #26
ef049bee
CB
352 "1.0 || intfield || 1.0" #27
353 "1 < intfield" #28
9fec62f7
CB
354)
355
356VALIDATOR=("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
ef049bee
CB
382 "validator_true_statement" #27
383 "validator_intfield_gt" #28
9fec62f7
CB
384)
385
386FILTER_COUNT=${#FILTERS[@]}
387i=0
388
389start_lttng_sessiond
390
391while [ "$i" -lt "$FILTER_COUNT" ]; do
392
393 test_valid_filter "${FILTERS[$i]}" "${VALIDATOR[$i]}"
394
395 if [ $? -eq 1 ]; then
396 stop_lttng_sessiond
397 exit 1
398 fi
399
400 let "i++"
401done
402
403stop_lttng_sessiond
This page took 0.040874 seconds and 5 git commands to generate.