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/..
/..
/..
11 TESTAPP_PATH
="$TESTDIR/utils/testapp"
12 TESTAPP_NAME
="gen-ust-events"
13 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
15 GEN_UST_NEVENTS_BIN
="$TESTAPP_PATH/gen-ust-nevents/gen-ust-nevents"
17 UST_EVENT_NAME
="tp:tptest"
20 NUM_TESTS
=$
(($UST_NUM_TESTS))
26 # shellcheck source=../../../utils/utils.sh
27 source "$TESTDIR/utils/utils.sh"
28 source "$CURDIR/map_base_test.sh"
30 FULL_LTTNG_BIN
="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
32 if [ ! -x "$TESTAPP_BIN" ]; then
33 BAIL_OUT
"No UST events binary detected."
39 function ust_test_app
()
41 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
44 function test_map_ust_per_uid_create
()
46 local MAP_NAME
="my_map_name"
47 local MAP_NAME_2
="my_map_name2"
48 local MAP_NAME_3
="my_map_name3"
49 local SESSION_NAME
="my_session_name"
53 create_lttng_session_ok
"$SESSION_NAME"
55 "$FULL_LTTNG_BIN" add-map
--userspace --bitness 32 --session "wrong_session_name" "$MAP_NAME" > /dev
/null
56 isnt $?
0 "Map creation failed on wrong session name"
58 "$FULL_LTTNG_BIN" add-map
--userspace --bitness 42 --session "$SESSION_NAME" "$MAP_NAME" > /dev
/null
59 isnt $?
0 "Map creation failed \"--bitness\" wrong value as expected"
61 "$FULL_LTTNG_BIN" add-map
--userspace --session "SESS_DOESNT_EXIST" "$MAP_NAME" > /dev
/null
62 isnt $?
0 "Failed to add map to session that doesn't exist"
64 "$FULL_LTTNG_BIN" disable-map
--userspace --session "$SESSION_NAME" "MAP_DOESNT_EXIST" > /dev
/null
65 isnt $?
0 "Failed to disable map that doesn't exist"
67 "$FULL_LTTNG_BIN" add-map
--userspace --bitness 64 --session "$SESSION_NAME" "$MAP_NAME" > /dev
/null
68 ok $?
"Map with 64bit bitness created succesfully"
70 "$FULL_LTTNG_BIN" disable-map
--userspace "$MAP_NAME" > /dev
/null
71 ok $?
"Map disabled succesfully"
73 destroy_lttng_session_ok
"$SESSION_NAME"
76 function test_map_ust_per_pid_create
()
78 local MAP_NAME
="my_map_name"
79 local SESSION_NAME
="my_session_name"
81 diag
"Map per-pid creation"
83 create_lttng_session_ok
"$SESSION_NAME"
85 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" --userspace 64 --per-pid
87 "$FULL_LTTNG_BIN" disable-map
--userspace "$MAP_NAME" > /dev
/null
88 ok $?
"Map disabled succesfully"
90 "$FULL_LTTNG_BIN" enable-map
--userspace "$MAP_NAME" > /dev
/null
91 ok $?
"Map enabled succesfully"
93 destroy_lttng_session_ok
"$SESSION_NAME"
96 function test_map_base_scenario
()
100 local buf_option
="$3"
101 local event_name
="$4"
103 local MAP_NAME
="my_map_name"
104 local SESSION_NAME
="my_session_name"
105 local TRIGGER_NAME
="my_trigger_name"
108 diag
"Map base tracing scenario: $domain bitness $bitness $buf_option"
110 create_lttng_session_ok
"$SESSION_NAME"
112 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
114 lttng_add_trigger_ok
"$TRIGGER_NAME" \
116 on-event
"$domain" "$event_name" \
118 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
120 start_lttng_tracing_ok
$SESSION_NAME
124 stop_lttng_tracing_ok
$SESSION_NAME
126 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
128 lttng_remove_trigger_ok
"$TRIGGER_NAME"
130 destroy_lttng_session_ok
$SESSION_NAME
133 function test_map_ust_two_apps
()
135 local MAP_NAME
="my_map_name"
136 local SESSION_NAME
="my_session_name"
137 local TRIGGER_NAME
="my_trigger_name"
139 local domain
="--userspace"
141 local buf_option
="--per-uid"
143 diag
"Map with two apps"
145 create_lttng_session_ok
"$SESSION_NAME"
147 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
149 lttng_add_trigger_ok
"$TRIGGER_NAME" \
151 on-event
--userspace "$UST_EVENT_NAME" \
153 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
155 start_lttng_tracing_ok
$SESSION_NAME
160 stop_lttng_tracing_ok
$SESSION_NAME
162 view_map_ok
"$MAP_NAME" "$KEY" "$((NR_ITER * 2))"
164 lttng_remove_trigger_ok
"$TRIGGER_NAME"
166 destroy_lttng_session_ok
$SESSION_NAME
169 function test_map_ust_with_events
()
171 local MAP_NAME
="my_map_name"
172 local SESSION_NAME
="my_session_name"
173 local TRIGGER_NAME
="my_trigger_name"
175 local domain
="--userspace"
177 local buf_option
="--per-uid"
179 diag
"Map with regular events"
181 create_lttng_session_ok
"$SESSION_NAME"
183 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
185 enable_ust_lttng_event_ok
"$SESSION_NAME" "*"
187 lttng_add_trigger_ok
"$TRIGGER_NAME" \
189 on-event
--userspace "$UST_EVENT_NAME" \
191 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
193 start_lttng_tracing_ok
$SESSION_NAME
197 stop_lttng_tracing_ok
$SESSION_NAME
199 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
201 lttng_remove_trigger_ok
"$TRIGGER_NAME"
203 destroy_lttng_session_ok
$SESSION_NAME
206 function test_map_ust_per_pid_dead_app_aggregation
()
208 local MAP_NAME
="my_map_name"
209 local SESSION_NAME
="my_session_name"
210 local TRIGGER_NAME1
="my_trigger_name1"
211 local TRIGGER_NAME2
="my_trigger_name2"
214 local domain
="--userspace"
216 local buf_option
="--per-pid"
218 local file_sync_before_exit
=$
(mktemp
-u)
219 local file_sync_before_exit_touch
=$
(mktemp
-u)
221 # In per-pid, test that running apps and dead apps aggrgated values are
222 # listed in their own map.
224 diag
"Map per-pid user with dead app aggregation"
226 create_lttng_session_ok
"$SESSION_NAME"
228 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
230 lttng_add_trigger_ok
"$TRIGGER_NAME1" \
232 on-event
--userspace "tp:tptest1" \
234 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY1"
236 lttng_add_trigger_ok
"$TRIGGER_NAME2" \
238 on-event
--userspace "$UST_EVENT_NAME" \
240 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY2"
242 start_lttng_tracing_ok
$SESSION_NAME
244 # Two apps will have run completely when we call view-map.
245 $GEN_UST_NEVENTS_BIN -i $NR_ITER -w $NR_USEC_WAIT
246 $GEN_UST_NEVENTS_BIN -i $NR_ITER -w $NR_USEC_WAIT
248 # One app will be done generating events but is still running when we
251 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \
252 --sync-before-exit-touch $file_sync_before_exit_touch \
253 --sync-before-exit $file_sync_before_exit &
255 # Wait for the before exit sync point. This ensure that we went over the
257 while [ ! -f "${file_sync_before_exit_touch}" ]; do
261 stop_lttng_tracing_ok
$SESSION_NAME
263 # After the apps are dead, we should see map key value pairs in the
264 # dead map aggregation listing. Two apps ran and exited, so we should
265 # have NR_ITER * 2 hits.
266 view_map_ok
"$MAP_NAME" "$KEY1" "$(( $NR_ITER * 2 ))"
268 # One app is still running and is done generating events, we should see
270 view_map_ok
"$MAP_NAME" "$KEY2" "$NR_ITER"
272 lttng_remove_trigger_ok
"$TRIGGER_NAME1"
273 lttng_remove_trigger_ok
"$TRIGGER_NAME2"
275 touch "$file_sync_before_exit"
278 destroy_lttng_session_ok
$SESSION_NAME
280 rm -f ${file_sync_before_exit}
281 rm -f ${file_sync_before_exit_touch}
284 function test_map_ust_exclusion
()
286 local MAP_NAME
="my_map_name"
287 local SESSION_NAME
="my_session_name"
288 local TRIGGER_NAME
="my_trigger_name"
290 local domain
="--userspace"
292 local buf_option
="--per-uid"
293 local exclusion
="tp:tptest1,tp:tptest2,tp:tptest3,tp:tptest4"
295 diag
"Map per-pid user with dead app aggregation"
297 create_lttng_session_ok
"$SESSION_NAME"
299 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
300 lttng_add_trigger_ok
"$TRIGGER_NAME" \
302 on-event
--userspace "tp:tptest*" --exclude="$exclusion" \
304 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
306 start_lttng_tracing_ok
$SESSION_NAME
308 "$GEN_UST_NEVENTS_BIN" -i "$NR_ITER" -w 1
310 stop_lttng_tracing_ok
$SESSION_NAME
312 # After the map is dead, we should still see map key value pairs in the
313 # dead map aggregation listing.
314 view_map_ok
"$MAP_NAME" "$KEY" "5"
316 lttng_remove_trigger_ok
"$TRIGGER_NAME"
318 destroy_lttng_session_ok
$SESSION_NAME
322 function test_map_ust_clear_per_pid
()
324 local MAP_NAME
="my_map_name"
325 local SESSION_NAME
="my_session_name"
326 local TRIGGER_NAME
="my_trigger_name"
328 local domain
="--userspace"
330 local buf_option
="--per-pid"
332 diag
"Map UST per-pid clear"
334 create_lttng_session_ok
"$SESSION_NAME"
336 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
337 lttng_add_trigger_ok
"$TRIGGER_NAME" \
339 on-event
--userspace "tp:tptest1" \
341 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
343 start_lttng_tracing_ok
$SESSION_NAME
345 "$GEN_UST_NEVENTS_BIN" -i "$NR_ITER" -w 1
347 stop_lttng_tracing_ok
$SESSION_NAME
349 # After the map is dead, we should still see map key value pairs in the
350 # dead map aggregation listing.
351 view_map_ok
"$MAP_NAME" "$KEY" "5"
353 lttng_clear_session_ok
$SESSION_NAME
355 view_map_ok
"$MAP_NAME" "$KEY" "0"
357 lttng_remove_trigger_ok
"$TRIGGER_NAME"
359 destroy_lttng_session_ok
$SESSION_NAME
362 start_lttng_sessiond_notap
364 test_map_ust_per_pid_dead_app_aggregation
365 test_map_n_triggers_n_keys
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
366 test_map_n_triggers_n_keys
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
368 test_map_n_triggers_1_key
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
369 test_map_n_triggers_1_key
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
371 test_map_n_triggers_1_key_coalesced
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
372 test_map_n_triggers_1_key_coalesced
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
374 test_map_ust_per_uid_create
375 test_map_ust_per_pid_create
377 test_map_view_empty
"--userspace" "64" "--per-uid"
378 test_map_view_empty
"--userspace" "64" "--per-pid"
379 test_map_view_empty
"--userspace" "32" "--per-uid"
380 test_map_view_empty
"--userspace" "32" "--per-pid"
382 test_map_base_scenario
"--userspace" "64" "--per-uid" "$UST_EVENT_NAME"
383 test_map_base_scenario
"--userspace" "32" "--per-uid" "$UST_EVENT_NAME"
384 test_map_base_scenario
"--userspace" "64" "--per-pid" "$UST_EVENT_NAME"
385 test_map_base_scenario
"--userspace" "32" "--per-pid" "$UST_EVENT_NAME"
387 test_map_formated_keys
"--userspace" "$UST_EVENT_NAME" "\${PROVIDER_NAME}:\${EVENT_NAME}" "$UST_EVENT_NAME" ust_test_app
388 test_map_formated_keys
"--userspace" "$UST_EVENT_NAME" "pitarifique-\${EVENT_NAME}" "pitarifique-tptest" ust_test_app
390 test_map_disable_enable
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
391 test_map_disable_enable
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
393 test_map_add_remove_add_trigger
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
394 test_map_add_remove_add_trigger
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
396 test_map_creation_after_trigger
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
397 test_map_creation_after_trigger
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
399 test_map_remove_trigger_before_stop
"--userspace" "32" "$UST_EVENT_NAME" ust_test_app
400 test_map_remove_trigger_before_stop
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
402 test_map_ust_two_apps
403 test_map_ust_with_events
404 test_map_two_incr_value_two_keys
"--userspace" "64" "$UST_EVENT_NAME" ust_test_app
406 test_map_clear
"--userspace" 32 "$UST_EVENT_NAME" ust_test_app
407 test_map_clear
"--userspace" 64 "$UST_EVENT_NAME" ust_test_app
408 test_map_ust_clear_per_pid
410 test_map_ust_exclusion
412 test_map_filter
"--userspace" "$UST_EVENT_NAME" "intfield" ust_test_app
414 stop_lttng_sessiond_notap