SoW-2020-0002: Trace Hit Counters
[lttng-tools.git] / tests / regression / tools / map / map_base_test.sh
1 #!/bin/bash
2 #
3 # Copyright (C) 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
4 #
5 # SPDX-License-Identifier: LGPL-2.1-only
6
7 CURDIR=$(dirname "$0")/
8 TESTDIR=$CURDIR/../../..
9
10 TMPDIR=$(mktemp -d)
11
12 SH_TAP=1
13
14 # shellcheck source=../../../utils/utils.sh
15 source "$TESTDIR/utils/utils.sh"
16
17 FULL_LTTNG_BIN="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
18
19 function view_map_ok() {
20 local map_name="$1"
21 local key="$2"
22 local expected_value="$3"
23 local extracted_value
24 local temp_view_output
25
26 temp_view_output=$(mktemp -t map_view_output.XXXXXX)
27
28 "$FULL_LTTNG_BIN" view-map "$map_name" --key="$key" > "$temp_view_output"
29 ok $? "Map '$map_name' viewed succesfully"
30
31 grep -q " $key " "$temp_view_output"
32 ok $? "Key '$key' found in view-map output"
33
34 # Get value
35 # TODO: this is based on the text output, ideally when mi is availabe we
36 # who should use it to parse the value!
37 # Sample output
38 # | key | 5|
39 # Keep white space surrounding the key so to avoid grepping a substring
40 # in a larger key.
41 extracted_value=$(grep " $key " "$temp_view_output" | tr -d " " | cut -d "|" -f3)
42 # Necessary since the returned value can be non existent
43 extracted_value=${extracted_value:-"-1"}
44
45 is "$extracted_value" "$expected_value" "Key value is $expected_value as expected"
46
47 rm -f "$temp_view_output"
48 }
49
50 function test_map_view_empty()
51 {
52 local domain="$1"
53 local bitness="$2"
54 local buf_option="$3"
55
56 local MAP_NAME="my_map_name"
57 local SESSION_NAME="my_session_name"
58
59 diag "Map view empty: $domain bitness $bitness $buf_option"
60
61 create_lttng_session_ok "$SESSION_NAME"
62
63 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
64
65 "$FULL_LTTNG_BIN" view-map "$MAP_NAME" > /dev/null
66 ok $? "Map enabled viewed succesfully"
67
68 "$FULL_LTTNG_BIN" disable-map "$domain" "$MAP_NAME" > /dev/null
69 ok $? "Map disabled succesfully"
70
71 "$FULL_LTTNG_BIN" view-map "$MAP_NAME" > /dev/null
72 ok $? "Map disabled viewed succesfully"
73
74 destroy_lttng_session_ok "$SESSION_NAME"
75 }
76
77 function test_map_formated_keys()
78 {
79 local domain="$1"
80 local event_name="$2"
81 local key_format="$3"
82 local expected_key="$4"
83 local test_app="$5"
84
85 local bitness="32"
86 # buf option left empty for use with both UST and kernel domain.
87 local buf_option=""
88 local MAP_NAME="my_map_name"
89 local SESSION_NAME="my_session_name"
90 local TRIGGER_NAME="my_trigger_name"
91
92 diag "Map with $domain formated key. event-name: \"$event_name\", key format: \"$key_format\", expecting: \"$expected_key\""
93
94 create_lttng_session_ok "$SESSION_NAME"
95
96 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
97
98 lttng_add_trigger_ok "$TRIGGER_NAME" \
99 --condition \
100 on-event "$domain" "$event_name" \
101 --action \
102 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$key_format"
103
104 start_lttng_tracing_ok $SESSION_NAME
105
106 $test_app
107
108 stop_lttng_tracing_ok $SESSION_NAME
109
110 view_map_ok "$MAP_NAME" "$expected_key" "$NR_ITER"
111
112 lttng_remove_trigger_ok "$TRIGGER_NAME"
113
114 destroy_lttng_session_ok $SESSION_NAME
115 }
116
117 function test_map_n_triggers_n_keys()
118 {
119 local MAP_NAME="my_map_name"
120 local SESSION_NAME="my_session_name"
121 local TRIGGER_NAME="my_trigger_name"
122 local KEY="foo"
123 local domain="$1"
124 local bitness="$2"
125 local event_name="$3"
126 local test_app="$4"
127 local buf_option=""
128
129 local number_of_trigger=5
130
131 diag "Map $domain with $number_of_trigger triggers with all different keys"
132
133 create_lttng_session_ok "$SESSION_NAME"
134
135 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
136
137 for i in $(seq 1 $number_of_trigger); do
138 cur_trigger_name="${TRIGGER_NAME}${i}"
139 lttng_add_trigger_ok "$cur_trigger_name" \
140 --condition \
141 on-event "$domain" "$event_name" \
142 --action \
143 incr-value --session "$SESSION_NAME" \
144 --map "$MAP_NAME" \
145 --key "${KEY}${i}"
146 done
147
148 start_lttng_tracing_ok $SESSION_NAME
149
150 $test_app
151
152 stop_lttng_tracing_ok $SESSION_NAME
153
154 for i in $(seq 1 $number_of_trigger); do
155 view_map_ok "$MAP_NAME" "$KEY${i}" "$NR_ITER"
156 done
157
158 for i in $(seq 1 $number_of_trigger); do
159 lttng_remove_trigger_ok "$TRIGGER_NAME${i}"
160 done
161
162 destroy_lttng_session_ok $SESSION_NAME
163 }
164
165 function test_map_n_triggers_1_key()
166 {
167 local MAP_NAME="my_map_name"
168 local SESSION_NAME="my_session_name"
169 local TRIGGER_NAME="my_trigger_name"
170 local KEY="foo"
171 local domain="$1"
172 local bitness="$2"
173 local event_name="$3"
174 local test_app="$4"
175 local buf_option=""
176
177 local number_of_trigger=5
178
179 diag "Map $domain with $number_of_trigger triggers all with the same key"
180
181 create_lttng_session_ok "$SESSION_NAME"
182
183 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
184
185 for i in $(seq 1 $number_of_trigger); do
186 cur_trigger_name="${TRIGGER_NAME}${i}"
187 lttng_add_trigger_ok "$cur_trigger_name" \
188 --condition \
189 on-event "$domain" "$event_name" \
190 --action \
191 incr-value --session "$SESSION_NAME" \
192 --map "$MAP_NAME" \
193 --key "${KEY}"
194 done
195
196 start_lttng_tracing_ok $SESSION_NAME
197
198 $test_app
199
200 stop_lttng_tracing_ok $SESSION_NAME
201
202 view_map_ok "$MAP_NAME" "$KEY" "$((NR_ITER * number_of_trigger))"
203
204 for i in $(seq 1 $number_of_trigger); do
205 lttng_remove_trigger_ok "$TRIGGER_NAME${i}"
206 done
207
208 destroy_lttng_session_ok $SESSION_NAME
209 }
210
211 function test_map_n_triggers_1_key_coalesced()
212 {
213 local MAP_NAME="my_map_name"
214 local SESSION_NAME="my_session_name"
215 local TRIGGER_NAME="my_trigger_name"
216 local KEY="foo"
217 local domain="$1"
218 local bitness="$2"
219 local event_name="$3"
220 local test_app="$4"
221 local buf_option=""
222
223 local number_of_trigger=5
224
225 diag "Map $domain with $number_of_trigger triggers all with the same key"
226
227 create_lttng_session_ok "$SESSION_NAME"
228
229 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option" "--coalesce-hits"
230
231 for i in $(seq 1 $number_of_trigger); do
232 cur_trigger_name="${TRIGGER_NAME}${i}"
233 lttng_add_trigger_ok "$cur_trigger_name" \
234 --condition \
235 on-event "$domain" "$event_name" \
236 --action \
237 incr-value --session "$SESSION_NAME" \
238 --map "$MAP_NAME" \
239 --key "${KEY}"
240 done
241
242 start_lttng_tracing_ok $SESSION_NAME
243
244 $test_app
245
246 stop_lttng_tracing_ok $SESSION_NAME
247
248 # With the `coalesce-hits` map option two enablers on the same event
249 # with the same key will only increment the counter once.
250 view_map_ok "$MAP_NAME" "$KEY" "$((NR_ITER))"
251
252 for i in $(seq 1 $number_of_trigger); do
253 lttng_remove_trigger_ok "$TRIGGER_NAME${i}"
254 done
255
256 destroy_lttng_session_ok $SESSION_NAME
257 }
258
259 function test_map_disable_enable()
260 {
261 local MAP_NAME="my_map_name"
262 local SESSION_NAME="my_session_name"
263 local TRIGGER_NAME="my_trigger_name"
264 local KEY="foo"
265 local domain="$1"
266 local bitness="$2"
267 local event_name="$3"
268 local test_app="$4"
269 local buf_option=""
270
271 diag "Map $domain disable-enable --bitness $bitness"
272
273 create_lttng_session_ok "$SESSION_NAME"
274
275 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
276
277 lttng_add_trigger_ok "$TRIGGER_NAME" \
278 --condition \
279 on-event "$domain" "$event_name" \
280 --action \
281 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
282
283 start_lttng_tracing_ok $SESSION_NAME
284
285 $test_app
286
287 stop_lttng_tracing_ok $SESSION_NAME
288
289 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
290
291 "$FULL_LTTNG_BIN" disable-map "$domain" -s "$SESSION_NAME" "$MAP_NAME" > /dev/null
292 ok $? "Map disabled succesfully"
293
294 start_lttng_tracing_ok $SESSION_NAME
295
296 $test_app
297
298 stop_lttng_tracing_ok $SESSION_NAME
299
300 # The values in the map should not have changed since the map is
301 # disabled.
302 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
303
304 "$FULL_LTTNG_BIN" enable-map "$domain" -s "$SESSION_NAME" "$MAP_NAME" > /dev/null
305 ok $? "Map enabled succesfully"
306
307 start_lttng_tracing_ok $SESSION_NAME
308
309 $test_app
310
311 stop_lttng_tracing_ok $SESSION_NAME
312
313 view_map_ok "$MAP_NAME" "$KEY" "$((NR_ITER * 2))"
314
315 lttng_remove_trigger_ok "$TRIGGER_NAME"
316
317 destroy_lttng_session_ok $SESSION_NAME
318 }
319
320 function test_map_add_remove_add_trigger()
321 {
322 local MAP_NAME="my_map_name"
323 local SESSION_NAME="my_session_name"
324 local TRIGGER_NAME="my_trigger_name"
325 local KEY="foo"
326 local domain="$1"
327 local bitness="$2"
328 local event_name="$3"
329 local test_app="$4"
330 local buf_option=""
331
332 diag "Map $domain add-remove-add the same trigger"
333
334 create_lttng_session_ok "$SESSION_NAME"
335
336 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
337
338 lttng_add_trigger_ok "$TRIGGER_NAME" \
339 --condition \
340 on-event "$domain" "$event_name" \
341 --action \
342 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
343
344 start_lttng_tracing_ok $SESSION_NAME
345
346 "$test_app"
347
348 stop_lttng_tracing_ok $SESSION_NAME
349
350 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
351
352 lttng_remove_trigger_ok "$TRIGGER_NAME"
353
354 start_lttng_tracing_ok $SESSION_NAME
355
356 "$test_app"
357
358 stop_lttng_tracing_ok $SESSION_NAME
359
360 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
361
362 lttng_add_trigger_ok "$TRIGGER_NAME" \
363 --condition \
364 on-event "$domain" "$event_name" \
365 --action \
366 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
367
368 start_lttng_tracing_ok $SESSION_NAME
369
370 "$test_app"
371
372 stop_lttng_tracing_ok $SESSION_NAME
373
374 view_map_ok "$MAP_NAME" "$KEY" "$((NR_ITER * 2))"
375
376 lttng_remove_trigger_ok "$TRIGGER_NAME"
377
378 destroy_lttng_session_ok $SESSION_NAME
379 }
380
381 function test_map_creation_after_trigger()
382 {
383 local MAP_NAME="my_map_name"
384 local SESSION_NAME="my_session_name"
385 local TRIGGER_NAME="my_trigger_name"
386 local KEY="foo"
387 local domain="$1"
388 local bitness="$2"
389 local event_name="$3"
390 local test_app="$4"
391 local buf_option=""
392
393 diag "Map $domain creation after trigger creation"
394
395 create_lttng_session_ok "$SESSION_NAME"
396
397 lttng_add_trigger_ok "$TRIGGER_NAME" \
398 --condition \
399 on-event "$domain" "$event_name" \
400 --action \
401 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
402
403 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
404
405 start_lttng_tracing_ok $SESSION_NAME
406
407 "$test_app"
408
409 stop_lttng_tracing_ok $SESSION_NAME
410
411 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
412
413 lttng_remove_trigger_ok "$TRIGGER_NAME"
414
415 destroy_lttng_session_ok $SESSION_NAME
416 }
417
418 function test_map_remove_trigger_before_stop()
419 {
420 local MAP_NAME="my_map_name"
421 local SESSION_NAME="my_session_name"
422 local TRIGGER_NAME="my_trigger_name"
423 local KEY="foo"
424 local domain="$1"
425 local bitness="$2"
426 local event_name="$3"
427 local test_app="$4"
428 local buf_option=""
429
430 diag "Map remove trigger before stop"
431
432 create_lttng_session_ok "$SESSION_NAME"
433
434 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
435
436 lttng_add_trigger_ok "$TRIGGER_NAME" \
437 --condition \
438 on-event "$domain" "$event_name" \
439 --action \
440 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
441
442 start_lttng_tracing_ok $SESSION_NAME
443
444 "$test_app"
445
446 lttng_remove_trigger_ok "$TRIGGER_NAME"
447
448 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
449
450 stop_lttng_tracing_ok $SESSION_NAME
451
452 # Confirm that the map content is unchanged after a stop.
453 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
454
455 destroy_lttng_session_ok $SESSION_NAME
456 }
457
458 function test_map_two_incr_value_two_keys()
459 {
460 local MAP_NAME="my_map_name"
461 local SESSION_NAME="my_session_name"
462 local TRIGGER_NAME="my_trigger_name"
463 local KEY1="romados"
464 local KEY2="pitarifique"
465 local domain="$1"
466 local bitness="$2"
467 local event_name="$3"
468 local test_app="$4"
469 local buf_option=""
470
471 diag "Map remove trigger before stop"
472
473 create_lttng_session_ok "$SESSION_NAME"
474
475 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
476
477 lttng_add_trigger_ok "$TRIGGER_NAME" \
478 --condition \
479 on-event "$domain" "$event_name" \
480 --action \
481 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY1" \
482 --action \
483 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY2"
484
485 start_lttng_tracing_ok $SESSION_NAME
486
487 "$test_app"
488
489
490 stop_lttng_tracing_ok $SESSION_NAME
491
492 view_map_ok "$MAP_NAME" "$KEY1" "$NR_ITER"
493 view_map_ok "$MAP_NAME" "$KEY2" "$NR_ITER"
494
495 lttng_remove_trigger_ok "$TRIGGER_NAME"
496
497 destroy_lttng_session_ok $SESSION_NAME
498 }
499
500 function test_map_filter()
501 {
502 local MAP_NAME="my_map_name"
503 local SESSION_NAME="my_session_name"
504 local TRIGGER_NAME="my_trigger_name"
505 local KEY="foo"
506 local domain="$1"
507 local event_name="$2"
508 local filter_field="$3"
509 local test_app="$4"
510 local buf_option=""
511 local bitness="32"
512
513 diag "Map $domain filtering $event_name filter: \"$filter_field == 0\""
514
515 create_lttng_session_ok "$SESSION_NAME"
516
517 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
518
519 lttng_add_trigger_ok "$TRIGGER_NAME" \
520 --condition \
521 on-event "$domain" "$event_name" --filter "$filter_field==0"\
522 --action \
523 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
524
525 start_lttng_tracing_ok $SESSION_NAME
526
527 $test_app
528
529 stop_lttng_tracing_ok $SESSION_NAME
530
531 view_map_ok "$MAP_NAME" "$KEY" "1"
532
533 lttng_remove_trigger_ok "$TRIGGER_NAME"
534
535 destroy_lttng_session_ok $SESSION_NAME
536 }
537
538 function test_map_clear()
539 {
540 local MAP_NAME="my_map_name"
541 local SESSION_NAME="my_session_name"
542 local TRIGGER_NAME="my_trigger_name"
543 local KEY="foo"
544 local domain="$1"
545 local bitness="$2"
546 local event_name="$3"
547 local test_app="$4"
548 local buf_option=""
549 local bitness="32"
550
551 diag "Map $domain clear"
552
553 create_lttng_session_ok "$SESSION_NAME"
554
555 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
556
557 lttng_add_trigger_ok "$TRIGGER_NAME" \
558 --condition \
559 on-event "$domain" "$event_name" \
560 --action \
561 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
562
563 start_lttng_tracing_ok $SESSION_NAME
564
565 $test_app
566
567 stop_lttng_tracing_ok $SESSION_NAME
568
569 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
570
571 lttng_clear_session_ok "$SESSION_NAME"
572
573 view_map_ok "$MAP_NAME" "$KEY" "0"
574
575 lttng_remove_trigger_ok "$TRIGGER_NAME"
576
577 destroy_lttng_session_ok $SESSION_NAME
578 }
This page took 0.042824 seconds and 5 git commands to generate.