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