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 | 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" |