SoW-2020-0003: Trace Hit Counters
[lttng-tools.git] / tests / regression / tools / map / test_map_ust
CommitLineData
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
7CURDIR=$(dirname "$0")/
8TESTDIR=$CURDIR/../../..
9NR_ITER=5
10NR_USEC_WAIT=1
11TESTAPP_PATH="$TESTDIR/utils/testapp"
12TESTAPP_NAME="gen-ust-events"
13TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
14
15GEN_UST_NEVENTS_BIN="$TESTAPP_PATH/gen-ust-nevents/gen-ust-nevents"
16
17UST_EVENT_NAME="tp:tptest"
18
19UST_NUM_TESTS=474
20NUM_TESTS=$(($UST_NUM_TESTS))
21
22TMPDIR=$(mktemp -d)
23
24SH_TAP=1
25
26# shellcheck source=../../../utils/utils.sh
27source "$TESTDIR/utils/utils.sh"
28source "$CURDIR/map_base_test.sh"
29
30FULL_LTTNG_BIN="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
31
32if [ ! -x "$TESTAPP_BIN" ]; then
33 BAIL_OUT "No UST events binary detected."
34fi
35
36plan_tests $NUM_TESTS
37
38
39function ust_test_app()
40{
41 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT
42}
43
44function 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
76function 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
96function 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
133function 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
169function 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
206function 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
284function 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
322function 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
362start_lttng_sessiond_notap
363
364test_map_ust_per_pid_dead_app_aggregation
365test_map_n_triggers_n_keys "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
366test_map_n_triggers_n_keys "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
367
368test_map_n_triggers_1_key "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
369test_map_n_triggers_1_key "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
370
371test_map_n_triggers_1_key_coalesced "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
372test_map_n_triggers_1_key_coalesced "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
373
374test_map_ust_per_uid_create
375test_map_ust_per_pid_create
376
377test_map_view_empty "--userspace" "64" "--per-uid"
378test_map_view_empty "--userspace" "64" "--per-pid"
379test_map_view_empty "--userspace" "32" "--per-uid"
380test_map_view_empty "--userspace" "32" "--per-pid"
381
382test_map_base_scenario "--userspace" "64" "--per-uid" "$UST_EVENT_NAME"
383test_map_base_scenario "--userspace" "32" "--per-uid" "$UST_EVENT_NAME"
384test_map_base_scenario "--userspace" "64" "--per-pid" "$UST_EVENT_NAME"
385test_map_base_scenario "--userspace" "32" "--per-pid" "$UST_EVENT_NAME"
386
387test_map_formated_keys "--userspace" "$UST_EVENT_NAME" "\${PROVIDER_NAME}:\${EVENT_NAME}" "$UST_EVENT_NAME" ust_test_app
388test_map_formated_keys "--userspace" "$UST_EVENT_NAME" "pitarifique-\${EVENT_NAME}" "pitarifique-tptest" ust_test_app
389
390test_map_disable_enable "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
391test_map_disable_enable "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
392
393test_map_add_remove_add_trigger "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
394test_map_add_remove_add_trigger "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
395
396test_map_creation_after_trigger "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
397test_map_creation_after_trigger "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
398
399test_map_remove_trigger_before_stop "--userspace" "32" "$UST_EVENT_NAME" ust_test_app
400test_map_remove_trigger_before_stop "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
401
402test_map_ust_two_apps
403test_map_ust_with_events
404test_map_two_incr_value_two_keys "--userspace" "64" "$UST_EVENT_NAME" ust_test_app
405
406test_map_clear "--userspace" 32 "$UST_EVENT_NAME" ust_test_app
407test_map_clear "--userspace" 64 "$UST_EVENT_NAME" ust_test_app
408test_map_ust_clear_per_pid
409
410test_map_ust_exclusion
411
412test_map_filter "--userspace" "$UST_EVENT_NAME" "intfield" ust_test_app
413
414stop_lttng_sessiond_notap
415
416rm -rf "$TMPDIR"
This page took 0.038752 seconds and 5 git commands to generate.