SoW-2020-0003: Trace Hit Counters
[lttng-tools.git] / tests / regression / tools / map / test_map_ust
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 NR_ITER=5
10 NR_USEC_WAIT=1
11 TESTAPP_PATH="$TESTDIR/utils/testapp"
12 TESTAPP_NAME="gen-ust-events"
13 TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
14
15 GEN_UST_NEVENTS_BIN="$TESTAPP_PATH/gen-ust-nevents/gen-ust-nevents"
16
17 UST_EVENT_NAME="tp:tptest"
18
19 UST_NUM_TESTS=474
20 NUM_TESTS=$(($UST_NUM_TESTS))
21
22 TMPDIR=$(mktemp -d)
23
24 SH_TAP=1
25
26 # shellcheck source=../../../utils/utils.sh
27 source "$TESTDIR/utils/utils.sh"
28 source "$CURDIR/map_base_test.sh"
29
30 FULL_LTTNG_BIN="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
31
32 if [ ! -x "$TESTAPP_BIN" ]; then
33 BAIL_OUT "No UST events binary detected."
34 fi
35
36 plan_tests $NUM_TESTS
37
38
39 function ust_test_app()
40 {
41 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
42 }
43
44 function test_map_ust_per_uid_create()
45 {
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"
50
51 diag "Map creation"
52
53 create_lttng_session_ok "$SESSION_NAME"
54
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"
57
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"
60
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"
63
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"
66
67 "$FULL_LTTNG_BIN" add-map --userspace --bitness 64 --session "$SESSION_NAME" "$MAP_NAME" > /dev/null
68 ok $? "Map with 64bit bitness created succesfully"
69
70 "$FULL_LTTNG_BIN" disable-map --userspace "$MAP_NAME" > /dev/null
71 ok $? "Map disabled succesfully"
72
73 destroy_lttng_session_ok "$SESSION_NAME"
74 }
75
76 function test_map_ust_per_pid_create()
77 {
78 local MAP_NAME="my_map_name"
79 local SESSION_NAME="my_session_name"
80
81 diag "Map per-pid creation"
82
83 create_lttng_session_ok "$SESSION_NAME"
84
85 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" --userspace 64 --per-pid
86
87 "$FULL_LTTNG_BIN" disable-map --userspace "$MAP_NAME" > /dev/null
88 ok $? "Map disabled succesfully"
89
90 "$FULL_LTTNG_BIN" enable-map --userspace "$MAP_NAME" > /dev/null
91 ok $? "Map enabled succesfully"
92
93 destroy_lttng_session_ok "$SESSION_NAME"
94 }
95
96 function test_map_base_scenario()
97 {
98 local domain="$1"
99 local bitness="$2"
100 local buf_option="$3"
101 local event_name="$4"
102
103 local MAP_NAME="my_map_name"
104 local SESSION_NAME="my_session_name"
105 local TRIGGER_NAME="my_trigger_name"
106 local KEY="foo"
107
108 diag "Map base tracing scenario: $domain bitness $bitness $buf_option"
109
110 create_lttng_session_ok "$SESSION_NAME"
111
112 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
113
114 lttng_add_trigger_ok "$TRIGGER_NAME" \
115 --condition \
116 on-event "$domain" "$event_name" \
117 --action \
118 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
119
120 start_lttng_tracing_ok $SESSION_NAME
121
122 ust_test_app
123
124 stop_lttng_tracing_ok $SESSION_NAME
125
126 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
127
128 lttng_remove_trigger_ok "$TRIGGER_NAME"
129
130 destroy_lttng_session_ok $SESSION_NAME
131 }
132
133 function test_map_ust_two_apps()
134 {
135 local MAP_NAME="my_map_name"
136 local SESSION_NAME="my_session_name"
137 local TRIGGER_NAME="my_trigger_name"
138 local KEY="foo"
139 local domain="--userspace"
140 local bitness="64"
141 local buf_option="--per-uid"
142
143 diag "Map with two apps"
144
145 create_lttng_session_ok "$SESSION_NAME"
146
147 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
148
149 lttng_add_trigger_ok "$TRIGGER_NAME" \
150 --condition \
151 on-event --userspace "$UST_EVENT_NAME" \
152 --action \
153 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
154
155 start_lttng_tracing_ok $SESSION_NAME
156
157 ust_test_app
158 ust_test_app
159
160 stop_lttng_tracing_ok $SESSION_NAME
161
162 view_map_ok "$MAP_NAME" "$KEY" "$((NR_ITER * 2))"
163
164 lttng_remove_trigger_ok "$TRIGGER_NAME"
165
166 destroy_lttng_session_ok $SESSION_NAME
167 }
168
169 function test_map_ust_with_events()
170 {
171 local MAP_NAME="my_map_name"
172 local SESSION_NAME="my_session_name"
173 local TRIGGER_NAME="my_trigger_name"
174 local KEY="foo"
175 local domain="--userspace"
176 local bitness="64"
177 local buf_option="--per-uid"
178
179 diag "Map with regular events"
180
181 create_lttng_session_ok "$SESSION_NAME"
182
183 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
184
185 enable_ust_lttng_event_ok "$SESSION_NAME" "*"
186
187 lttng_add_trigger_ok "$TRIGGER_NAME" \
188 --condition \
189 on-event --userspace "$UST_EVENT_NAME" \
190 --action \
191 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
192
193 start_lttng_tracing_ok $SESSION_NAME
194
195 ust_test_app
196
197 stop_lttng_tracing_ok $SESSION_NAME
198
199 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
200
201 lttng_remove_trigger_ok "$TRIGGER_NAME"
202
203 destroy_lttng_session_ok $SESSION_NAME
204 }
205
206 function test_map_ust_per_pid_dead_app_aggregation()
207 {
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"
212 local KEY1="foo"
213 local KEY2="ashton"
214 local domain="--userspace"
215 local bitness="64"
216 local buf_option="--per-pid"
217
218 local file_sync_before_exit=$(mktemp -u)
219 local file_sync_before_exit_touch=$(mktemp -u)
220
221 # In per-pid, test that running apps and dead apps aggrgated values are
222 # listed in their own map.
223
224 diag "Map per-pid user with dead app aggregation"
225
226 create_lttng_session_ok "$SESSION_NAME"
227
228 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
229
230 lttng_add_trigger_ok "$TRIGGER_NAME1" \
231 --condition \
232 on-event --userspace "tp:tptest1" \
233 --action \
234 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY1"
235
236 lttng_add_trigger_ok "$TRIGGER_NAME2" \
237 --condition \
238 on-event --userspace "$UST_EVENT_NAME" \
239 --action \
240 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY2"
241
242 start_lttng_tracing_ok $SESSION_NAME
243
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
247
248 # One app will be done generating events but is still running when we
249 # call view-map.
250
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 &
254
255 # Wait for the before exit sync point. This ensure that we went over the
256 # last tracepoint.
257 while [ ! -f "${file_sync_before_exit_touch}" ]; do
258 sleep 0.1
259 done
260
261 stop_lttng_tracing_ok $SESSION_NAME
262
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 ))"
267
268 # One app is still running and is done generating events, we should see
269 # NR_ITER hits.
270 view_map_ok "$MAP_NAME" "$KEY2" "$NR_ITER"
271
272 lttng_remove_trigger_ok "$TRIGGER_NAME1"
273 lttng_remove_trigger_ok "$TRIGGER_NAME2"
274
275 touch "$file_sync_before_exit"
276 wait
277
278 destroy_lttng_session_ok $SESSION_NAME
279
280 rm -f ${file_sync_before_exit}
281 rm -f ${file_sync_before_exit_touch}
282 }
283
284 function test_map_ust_exclusion()
285 {
286 local MAP_NAME="my_map_name"
287 local SESSION_NAME="my_session_name"
288 local TRIGGER_NAME="my_trigger_name"
289 local KEY="foo"
290 local domain="--userspace"
291 local bitness="64"
292 local buf_option="--per-uid"
293 local exclusion="tp:tptest1,tp:tptest2,tp:tptest3,tp:tptest4"
294
295 diag "Map per-pid user with dead app aggregation"
296
297 create_lttng_session_ok "$SESSION_NAME"
298
299 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
300 lttng_add_trigger_ok "$TRIGGER_NAME" \
301 --condition \
302 on-event --userspace "tp:tptest*" --exclude="$exclusion" \
303 --action \
304 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
305
306 start_lttng_tracing_ok $SESSION_NAME
307
308 "$GEN_UST_NEVENTS_BIN" -i "$NR_ITER" -w 1
309
310 stop_lttng_tracing_ok $SESSION_NAME
311
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"
315
316 lttng_remove_trigger_ok "$TRIGGER_NAME"
317
318 destroy_lttng_session_ok $SESSION_NAME
319 }
320
321
322 function test_map_ust_clear_per_pid()
323 {
324 local MAP_NAME="my_map_name"
325 local SESSION_NAME="my_session_name"
326 local TRIGGER_NAME="my_trigger_name"
327 local KEY="foo"
328 local domain="--userspace"
329 local bitness="64"
330 local buf_option="--per-pid"
331
332 diag "Map UST per-pid clear"
333
334 create_lttng_session_ok "$SESSION_NAME"
335
336 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "$domain" "$bitness" "$buf_option"
337 lttng_add_trigger_ok "$TRIGGER_NAME" \
338 --condition \
339 on-event --userspace "tp:tptest1" \
340 --action \
341 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
342
343 start_lttng_tracing_ok $SESSION_NAME
344
345 "$GEN_UST_NEVENTS_BIN" -i "$NR_ITER" -w 1
346
347 stop_lttng_tracing_ok $SESSION_NAME
348
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"
352
353 lttng_clear_session_ok $SESSION_NAME
354
355 view_map_ok "$MAP_NAME" "$KEY" "0"
356
357 lttng_remove_trigger_ok "$TRIGGER_NAME"
358
359 destroy_lttng_session_ok $SESSION_NAME
360 }
361
362 start_lttng_sessiond_notap
363
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
367
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
370
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
373
374 test_map_ust_per_uid_create
375 test_map_ust_per_pid_create
376
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"
381
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"
386
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
389
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
392
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
395
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
398
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
401
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
405
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
409
410 test_map_ust_exclusion
411
412 test_map_filter "--userspace" "$UST_EVENT_NAME" "intfield" ust_test_app
413
414 stop_lttng_sessiond_notap
415
416 rm -rf "$TMPDIR"
This page took 0.038487 seconds and 5 git commands to generate.