Commit | Line | Data |
---|---|---|
ebdb334b JR |
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 | } |