3 # Copyright (C) 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 CURDIR
=$
(dirname "$0")/
8 TESTDIR
=$CURDIR/..
/..
/..
14 # shellcheck source=../../../utils/utils.sh
15 source "$TESTDIR/utils/utils.sh"
17 FULL_LTTNG_BIN
="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
19 function view_map_ok
() {
22 local expected_value
="$3"
24 local temp_view_output
26 temp_view_output
=$
(mktemp
-t map_view_output.XXXXXX
)
28 "$FULL_LTTNG_BIN" view-map
"$map_name" --key="$key" > "$temp_view_output"
29 ok $?
"Map '$map_name' viewed succesfully"
31 grep -q " $key " "$temp_view_output"
32 ok $?
"Key '$key' found in view-map output"
35 # TODO: this is based on the text output, ideally when mi is availabe we
36 # who should use it to parse the value!
39 # Keep white space surrounding the key so to avoid grepping a substring
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"}
45 is
"$extracted_value" "$expected_value" "Key value is $expected_value as expected"
47 rm -f "$temp_view_output"
50 function test_map_view_empty
()
56 local MAP_NAME
="my_map_name"
57 local SESSION_NAME
="my_session_name"
59 diag
"Map view empty: $domain bitness $bitness $buf_option"
61 create_lttng_session_ok
"$SESSION_NAME"
63 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
65 "$FULL_LTTNG_BIN" view-map
"$MAP_NAME" > /dev
/null
66 ok $?
"Map enabled viewed succesfully"
68 "$FULL_LTTNG_BIN" disable-map
"$domain" "$MAP_NAME" > /dev
/null
69 ok $?
"Map disabled succesfully"
71 "$FULL_LTTNG_BIN" view-map
"$MAP_NAME" > /dev
/null
72 ok $?
"Map disabled viewed succesfully"
74 destroy_lttng_session_ok
"$SESSION_NAME"
77 function test_map_formated_keys
()
82 local expected_key
="$4"
86 # buf option left empty for use with both UST and kernel domain.
88 local MAP_NAME
="my_map_name"
89 local SESSION_NAME
="my_session_name"
90 local TRIGGER_NAME
="my_trigger_name"
92 diag
"Map with $domain formated key. event-name: \"$event_name\", key format: \"$key_format\", expecting: \"$expected_key\""
94 create_lttng_session_ok
"$SESSION_NAME"
96 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
98 lttng_add_trigger_ok
"$TRIGGER_NAME" \
100 on-event
"$domain" "$event_name" \
102 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$key_format"
104 start_lttng_tracing_ok
$SESSION_NAME
108 stop_lttng_tracing_ok
$SESSION_NAME
110 view_map_ok
"$MAP_NAME" "$expected_key" "$NR_ITER"
112 lttng_remove_trigger_ok
"$TRIGGER_NAME"
114 destroy_lttng_session_ok
$SESSION_NAME
117 function test_map_n_triggers_n_keys
()
119 local MAP_NAME
="my_map_name"
120 local SESSION_NAME
="my_session_name"
121 local TRIGGER_NAME
="my_trigger_name"
125 local event_name
="$3"
129 local number_of_trigger
=5
131 diag
"Map $domain with $number_of_trigger triggers with all different keys"
133 create_lttng_session_ok
"$SESSION_NAME"
135 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
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" \
141 on-event
"$domain" "$event_name" \
143 incr-value
--session "$SESSION_NAME" \
148 start_lttng_tracing_ok
$SESSION_NAME
152 stop_lttng_tracing_ok
$SESSION_NAME
154 for i
in $
(seq 1 $number_of_trigger); do
155 view_map_ok
"$MAP_NAME" "$KEY${i}" "$NR_ITER"
158 for i
in $
(seq 1 $number_of_trigger); do
159 lttng_remove_trigger_ok
"$TRIGGER_NAME${i}"
162 destroy_lttng_session_ok
$SESSION_NAME
165 function test_map_n_triggers_1_key
()
167 local MAP_NAME
="my_map_name"
168 local SESSION_NAME
="my_session_name"
169 local TRIGGER_NAME
="my_trigger_name"
173 local event_name
="$3"
177 local number_of_trigger
=5
179 diag
"Map $domain with $number_of_trigger triggers all with the same key"
181 create_lttng_session_ok
"$SESSION_NAME"
183 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
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" \
189 on-event
"$domain" "$event_name" \
191 incr-value
--session "$SESSION_NAME" \
196 start_lttng_tracing_ok
$SESSION_NAME
200 stop_lttng_tracing_ok
$SESSION_NAME
202 view_map_ok
"$MAP_NAME" "$KEY" "$((NR_ITER * number_of_trigger))"
204 for i
in $
(seq 1 $number_of_trigger); do
205 lttng_remove_trigger_ok
"$TRIGGER_NAME${i}"
208 destroy_lttng_session_ok
$SESSION_NAME
211 function test_map_n_triggers_1_key_coalesced
()
213 local MAP_NAME
="my_map_name"
214 local SESSION_NAME
="my_session_name"
215 local TRIGGER_NAME
="my_trigger_name"
219 local event_name
="$3"
223 local number_of_trigger
=5
225 diag
"Map $domain with $number_of_trigger triggers all with the same key"
227 create_lttng_session_ok
"$SESSION_NAME"
229 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option" "--coalesce-hits"
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" \
235 on-event
"$domain" "$event_name" \
237 incr-value
--session "$SESSION_NAME" \
242 start_lttng_tracing_ok
$SESSION_NAME
246 stop_lttng_tracing_ok
$SESSION_NAME
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))"
252 for i
in $
(seq 1 $number_of_trigger); do
253 lttng_remove_trigger_ok
"$TRIGGER_NAME${i}"
256 destroy_lttng_session_ok
$SESSION_NAME
259 function test_map_disable_enable
()
261 local MAP_NAME
="my_map_name"
262 local SESSION_NAME
="my_session_name"
263 local TRIGGER_NAME
="my_trigger_name"
267 local event_name
="$3"
271 diag
"Map $domain disable-enable --bitness $bitness"
273 create_lttng_session_ok
"$SESSION_NAME"
275 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
277 lttng_add_trigger_ok
"$TRIGGER_NAME" \
279 on-event
"$domain" "$event_name" \
281 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
283 start_lttng_tracing_ok
$SESSION_NAME
287 stop_lttng_tracing_ok
$SESSION_NAME
289 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
291 "$FULL_LTTNG_BIN" disable-map
"$domain" -s "$SESSION_NAME" "$MAP_NAME" > /dev
/null
292 ok $?
"Map disabled succesfully"
294 start_lttng_tracing_ok
$SESSION_NAME
298 stop_lttng_tracing_ok
$SESSION_NAME
300 # The values in the map should not have changed since the map is
302 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
304 "$FULL_LTTNG_BIN" enable-map
"$domain" -s "$SESSION_NAME" "$MAP_NAME" > /dev
/null
305 ok $?
"Map enabled succesfully"
307 start_lttng_tracing_ok
$SESSION_NAME
311 stop_lttng_tracing_ok
$SESSION_NAME
313 view_map_ok
"$MAP_NAME" "$KEY" "$((NR_ITER * 2))"
315 lttng_remove_trigger_ok
"$TRIGGER_NAME"
317 destroy_lttng_session_ok
$SESSION_NAME
320 function test_map_add_remove_add_trigger
()
322 local MAP_NAME
="my_map_name"
323 local SESSION_NAME
="my_session_name"
324 local TRIGGER_NAME
="my_trigger_name"
328 local event_name
="$3"
332 diag
"Map $domain add-remove-add the same trigger"
334 create_lttng_session_ok
"$SESSION_NAME"
336 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
338 lttng_add_trigger_ok
"$TRIGGER_NAME" \
340 on-event
"$domain" "$event_name" \
342 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
344 start_lttng_tracing_ok
$SESSION_NAME
348 stop_lttng_tracing_ok
$SESSION_NAME
350 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
352 lttng_remove_trigger_ok
"$TRIGGER_NAME"
354 start_lttng_tracing_ok
$SESSION_NAME
358 stop_lttng_tracing_ok
$SESSION_NAME
360 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
362 lttng_add_trigger_ok
"$TRIGGER_NAME" \
364 on-event
"$domain" "$event_name" \
366 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
368 start_lttng_tracing_ok
$SESSION_NAME
372 stop_lttng_tracing_ok
$SESSION_NAME
374 view_map_ok
"$MAP_NAME" "$KEY" "$((NR_ITER * 2))"
376 lttng_remove_trigger_ok
"$TRIGGER_NAME"
378 destroy_lttng_session_ok
$SESSION_NAME
381 function test_map_creation_after_trigger
()
383 local MAP_NAME
="my_map_name"
384 local SESSION_NAME
="my_session_name"
385 local TRIGGER_NAME
="my_trigger_name"
389 local event_name
="$3"
393 diag
"Map $domain creation after trigger creation"
395 create_lttng_session_ok
"$SESSION_NAME"
397 lttng_add_trigger_ok
"$TRIGGER_NAME" \
399 on-event
"$domain" "$event_name" \
401 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
403 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
405 start_lttng_tracing_ok
$SESSION_NAME
409 stop_lttng_tracing_ok
$SESSION_NAME
411 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
413 lttng_remove_trigger_ok
"$TRIGGER_NAME"
415 destroy_lttng_session_ok
$SESSION_NAME
418 function test_map_remove_trigger_before_stop
()
420 local MAP_NAME
="my_map_name"
421 local SESSION_NAME
="my_session_name"
422 local TRIGGER_NAME
="my_trigger_name"
426 local event_name
="$3"
430 diag
"Map remove trigger before stop"
432 create_lttng_session_ok
"$SESSION_NAME"
434 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
436 lttng_add_trigger_ok
"$TRIGGER_NAME" \
438 on-event
"$domain" "$event_name" \
440 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
442 start_lttng_tracing_ok
$SESSION_NAME
446 lttng_remove_trigger_ok
"$TRIGGER_NAME"
448 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
450 stop_lttng_tracing_ok
$SESSION_NAME
452 # Confirm that the map content is unchanged after a stop.
453 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
455 destroy_lttng_session_ok
$SESSION_NAME
458 function test_map_two_incr_value_two_keys
()
460 local MAP_NAME
="my_map_name"
461 local SESSION_NAME
="my_session_name"
462 local TRIGGER_NAME
="my_trigger_name"
464 local KEY2
="pitarifique"
467 local event_name
="$3"
471 diag
"Map remove trigger before stop"
473 create_lttng_session_ok
"$SESSION_NAME"
475 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
477 lttng_add_trigger_ok
"$TRIGGER_NAME" \
479 on-event
"$domain" "$event_name" \
481 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY1" \
483 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY2"
485 start_lttng_tracing_ok
$SESSION_NAME
490 stop_lttng_tracing_ok
$SESSION_NAME
492 view_map_ok
"$MAP_NAME" "$KEY1" "$NR_ITER"
493 view_map_ok
"$MAP_NAME" "$KEY2" "$NR_ITER"
495 lttng_remove_trigger_ok
"$TRIGGER_NAME"
497 destroy_lttng_session_ok
$SESSION_NAME
500 function test_map_filter
()
502 local MAP_NAME
="my_map_name"
503 local SESSION_NAME
="my_session_name"
504 local TRIGGER_NAME
="my_trigger_name"
507 local event_name
="$2"
508 local filter_field
="$3"
513 diag
"Map $domain filtering $event_name filter: \"$filter_field == 0\""
515 create_lttng_session_ok
"$SESSION_NAME"
517 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
519 lttng_add_trigger_ok
"$TRIGGER_NAME" \
521 on-event
"$domain" "$event_name" --filter "$filter_field==0"\
523 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
525 start_lttng_tracing_ok
$SESSION_NAME
529 stop_lttng_tracing_ok
$SESSION_NAME
531 view_map_ok
"$MAP_NAME" "$KEY" "1"
533 lttng_remove_trigger_ok
"$TRIGGER_NAME"
535 destroy_lttng_session_ok
$SESSION_NAME
538 function test_map_clear
()
540 local MAP_NAME
="my_map_name"
541 local SESSION_NAME
="my_session_name"
542 local TRIGGER_NAME
="my_trigger_name"
546 local event_name
="$3"
551 diag
"Map $domain clear"
553 create_lttng_session_ok
"$SESSION_NAME"
555 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
557 lttng_add_trigger_ok
"$TRIGGER_NAME" \
559 on-event
"$domain" "$event_name" \
561 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
563 start_lttng_tracing_ok
$SESSION_NAME
567 stop_lttng_tracing_ok
$SESSION_NAME
569 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
571 lttng_clear_session_ok
"$SESSION_NAME"
573 view_map_ok
"$MAP_NAME" "$KEY" "0"
575 lttng_remove_trigger_ok
"$TRIGGER_NAME"
577 destroy_lttng_session_ok
$SESSION_NAME