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