Cleanup: tests: name all temporary files to better identify leakage
[lttng-tools.git] / tests / regression / tools / tracker / test_event_tracker
1 #!/bin/bash
2 #
3 # Copyright (C) 2013 Christian Babeux <christian.babeux@efficios.com>
4 # Copyright (C) 2015-2018 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
5 #
6 # SPDX-License-Identifier: GPL-2.0-only
7
8 TEST_DESC="LTTng - Event traker test"
9
10 CURDIR=$(dirname "$0")/
11 TESTDIR="$CURDIR/../../.."
12 TESTAPP_PATH="$TESTDIR/utils/testapp"
13 TESTAPP_NAME="gen-ust-events"
14 TESTAPP_KERNEL_NAME="gen-kernel-test-events"
15 TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
16 TESTAPP_KERNEL_BIN="$TESTAPP_PATH/$TESTAPP_KERNEL_NAME/$TESTAPP_KERNEL_NAME"
17 SESSION_NAME="tracker"
18 NR_ITER=100
19 NUM_GLOBAL_TESTS=2
20 NUM_UST_TESTS=283
21 NUM_KERNEL_TESTS=462
22 NUM_TESTS=$((NUM_UST_TESTS+NUM_KERNEL_TESTS+NUM_GLOBAL_TESTS))
23
24 NR_USEC_WAIT=0 #for UST gen events
25
26 SCRIPT_UID="$(id -u)"
27 SCRIPT_GID="$(id -g)"
28 SCRIPT_USERNAME="$(id -un)"
29 SCRIPT_GROUPNAME="$(id -gn)"
30
31 CHILD_PID=-1
32 WAIT_PATH=
33 AFTER_FIRST_PATH=
34 BEFORE_LAST_PATH=
35
36 source $TESTDIR/utils/utils.sh
37
38 function prepare_ust_app
39 {
40 AFTER_FIRST_PATH=$(mktemp --tmpdir -u tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX)
41 BEFORE_LAST_PATH=$(mktemp --tmpdir -u tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX)
42
43 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT -a "$AFTER_FIRST_PATH" -b "$BEFORE_LAST_PATH" &
44 CHILD_PID=$!
45 }
46
47 function trace_ust_app
48 {
49 touch "$BEFORE_LAST_PATH"
50 wait
51 ok $? "Traced application stopped."
52 rm "$BEFORE_LAST_PATH"
53 rm "$AFTER_FIRST_PATH"
54 }
55
56 function prepare_kernel_app
57 {
58 WAIT_PATH=$(mktemp --tmpdir -u "tmp.${FUNCNAME[0]}_wait_path.XXXXXX")
59
60 "$TESTAPP_KERNEL_BIN" "$WAIT_PATH" $NR_ITER &
61 CHILD_PID=$!
62 }
63
64 function trace_kernel_app
65 {
66 touch "$WAIT_PATH"
67 wait
68 ok $? "Traced application stopped."
69 rm "$WAIT_PATH"
70 }
71
72 function test_event_tracker()
73 {
74 local trace_path
75 local domain="$1"
76 local expect_event="$2"
77 local wildcard="$3"
78 local tracker="$4"
79 local channel=''
80
81 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
82
83 create_lttng_session_ok $SESSION_NAME "$trace_path"
84
85 if [ "$domain" = kernel ]; then
86 channel=chan
87 lttng_enable_kernel_channel 1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
88 fi
89
90 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard" "$channel"
91
92 start_lttng_tracing_ok
93
94 lttng_track_"$domain"_ok "${tracker}"
95
96 prepare_"$domain"_app
97
98 trace_"$domain"_app
99
100 stop_lttng_tracing_ok
101 destroy_lttng_session_ok $SESSION_NAME
102
103 if [ "$expect_event" -eq 1 ]; then
104 trace_matches "$EVENT_NAME" $NR_ITER "$trace_path"
105 else
106 validate_trace_session_"$domain"_empty "$trace_path"
107 fi
108
109 rm -rf "$trace_path"
110 }
111
112 function test_event_vpid_tracker()
113 {
114 local trace_path
115 local domain="$1"
116 local expect_event="$2"
117 local wildcard="$3"
118 local channel=''
119
120 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
121
122 create_lttng_session_ok $SESSION_NAME "$trace_path"
123
124 if [ "$domain" = kernel ]; then
125 channel=chan
126 lttng_enable_kernel_channel 1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
127 fi
128
129 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard" "$channel"
130
131 prepare_"$domain"_app
132
133 start_lttng_tracing_ok
134
135 if [ "$expect_event" -eq 1 ]; then
136 lttng_track_"$domain"_ok "--vpid ${CHILD_PID}"
137 else
138 lttng_track_"$domain"_ok "--vpid $((CHILD_PID+1))"
139 fi
140
141 trace_"$domain"_app
142
143 stop_lttng_tracing_ok
144 destroy_lttng_session_ok $SESSION_NAME
145
146 if [ "$expect_event" -eq 1 ]; then
147 validate_trace "$EVENT_NAME" "$trace_path"
148 else
149 validate_trace_empty "$trace_path"
150 fi
151
152 rm -rf "$trace_path"
153 }
154
155 function test_event_pid_tracker()
156 {
157 local trace_path
158 local domain="$1"
159 local expect_event="$2"
160 local wildcard="$3"
161 local channel=''
162
163 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
164
165 create_lttng_session_ok $SESSION_NAME "$trace_path"
166
167 if [ "$domain" = kernel ]; then
168 channel=chan
169 lttng_enable_kernel_channel 1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
170 fi
171
172 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard" "$channel"
173
174 prepare_"$domain"_app
175
176 start_lttng_tracing_ok
177
178 if [ "$expect_event" -eq 1 ]; then
179 lttng_track_"$domain"_ok "--pid ${CHILD_PID}"
180 else
181 lttng_track_"$domain"_ok "--pid $((CHILD_PID+1))"
182 fi
183
184 trace_"$domain"_app
185
186 stop_lttng_tracing_ok
187 destroy_lttng_session_ok $SESSION_NAME
188
189 if [ "$expect_event" -eq 1 ]; then
190 validate_trace "$EVENT_NAME" "$trace_path"
191 else
192 validate_trace_empty "$trace_path"
193 fi
194
195 rm -rf "$trace_path"
196 }
197
198
199 function test_event_tracker_fail()
200 {
201 local trace_path
202 local domain="$1"
203 local wildcard="$2"
204 local tracker="$3"
205
206 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
207
208 create_lttng_session_ok $SESSION_NAME "$trace_path"
209 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard"
210 lttng_track_"$domain"_fail "${tracker}"
211 destroy_lttng_session_ok $SESSION_NAME
212
213 rm -rf "$trace_path"
214 }
215
216 function test_event_track_untrack()
217 {
218 local trace_path
219 local domain="$1"
220 local expect_event="$2"
221 local wildcard="$3"
222 local tracker="$4"
223 local channel=''
224
225 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
226
227 create_lttng_session_ok $SESSION_NAME "$trace_path"
228
229 if [ "$domain" = kernel ]; then
230 channel=chan
231 lttng_enable_kernel_channel 1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
232 fi
233
234 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard" "$channel"
235
236 start_lttng_tracing_ok
237
238 lttng_track_"$domain"_ok "${tracker}"
239 lttng_untrack_"$domain"_ok "${tracker}"
240
241 prepare_"$domain"_app
242
243 trace_"$domain"_app
244
245 stop_lttng_tracing_ok
246 destroy_lttng_session_ok $SESSION_NAME
247
248 if [ "$expect_event" -eq 1 ]; then
249 trace_matches "$EVENT_NAME" $NR_ITER "$trace_path"
250 else
251 validate_trace_session_"$domain"_empty "$trace_path"
252 fi
253
254 rm -rf "$trace_path"
255 }
256
257 function test_event_vpid_track_untrack()
258 {
259 local trace_path
260 local domain="$1"
261 local expect_event="$2"
262 local wildcard="$3"
263 local channel=''
264
265 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
266
267 create_lttng_session_ok $SESSION_NAME "$trace_path"
268
269 if [ "$domain" = kernel ]; then
270 channel=chan
271 lttng_enable_kernel_channel 1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
272 fi
273
274 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard" "$channel"
275
276 prepare_"$domain"_app
277
278 start_lttng_tracing_ok
279
280 lttng_track_"$domain"_ok "--vpid ${CHILD_PID}"
281 lttng_untrack_"$domain"_ok "--vpid ${CHILD_PID}"
282
283 trace_"$domain"_app
284
285 stop_lttng_tracing_ok
286 destroy_lttng_session_ok $SESSION_NAME
287
288 if [ "$expect_event" -eq 1 ]; then
289 validate_trace "$EVENT_NAME" "$trace_path"
290 else
291 validate_trace_empty "$trace_path"
292 fi
293
294 rm -rf "$trace_path"
295 }
296
297 function test_event_pid_track_untrack()
298 {
299 local trace_path
300 local domain="$1"
301 local expect_event="$2"
302 local wildcard="$3"
303 local channel=''
304
305 trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
306
307 create_lttng_session_ok $SESSION_NAME "$trace_path"
308
309 if [ "$domain" = kernel ]; then
310 channel=chan
311 lttng_enable_kernel_channel 1 0 $SESSION_NAME $channel "--subbuf-size=8M --num-subbuf=4"
312 fi
313
314 enable_"$domain"_lttng_event_ok $SESSION_NAME "$wildcard" "$channel"
315
316 prepare_"$domain"_app
317
318 start_lttng_tracing_ok
319
320 lttng_track_"$domain"_ok "--pid ${CHILD_PID}"
321 lttng_untrack_"$domain"_ok "--pid ${CHILD_PID}"
322
323 trace_"$domain"_app
324
325 stop_lttng_tracing_ok
326 destroy_lttng_session_ok $SESSION_NAME
327
328 if [ "$expect_event" -eq 1 ]; then
329 validate_trace "$EVENT_NAME" "$trace_path"
330 else
331 validate_trace_empty "$trace_path"
332 fi
333
334 rm -rf "$trace_path"
335 }
336
337 function test_event_ust_vpid_untrack_snapshot()
338 {
339 local trace_path=$(mktemp --tmpdir -d tmp.${FUNCNAME[0]}_trace_path.XXXXXX)
340
341 diag "Test_event_ust_vpid_untrack_snapshot"
342
343 create_lttng_session_ok $SESSION_NAME "$trace_path" "--snapshot"
344
345 enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
346
347 prepare_ust_app
348
349 lttng_untrack_ust_ok "--vpid --all"
350
351 start_lttng_tracing_ok
352
353 trace_ust_app
354 lttng_snapshot_record $SESSION_NAME
355
356 stop_lttng_tracing_ok
357 destroy_lttng_session_ok $SESSION_NAME
358
359 snapshot_count=$(find "$trace_path" -name metadata | wc -l)
360 is "$snapshot_count" 0 "Number of snapshot is zero"
361
362 rm -rf "$trace_path"
363 }
364
365 # MUST set TESTDIR before calling those functions
366 plan_tests $NUM_TESTS
367
368 print_test_banner "$TEST_DESC"
369
370 start_lttng_sessiond
371
372 diag "Test UST tracker"
373
374 if [ ! -x "$TESTAPP_BIN" ]; then
375 BAIL_OUT "No UST nevents binary detected."
376 fi
377
378 EVENT_NAME="tp:tptest"
379
380 # Both ordering of tracker type and `--all` are valid.
381 test_event_track_untrack ust 0 "${EVENT_NAME}" "--vgid --all"
382 test_event_track_untrack ust 0 "${EVENT_NAME}" "--all --vgid"
383
384 #vuid, vgid
385
386 # non-matching
387 test_event_tracker ust 0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1))"
388 test_event_tracker ust 0 "${EVENT_NAME}" "--vgid $((SCRIPT_GID+1))"
389 test_event_tracker ust 0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid $((SCRIPT_GID+1))"
390 test_event_tracker ust 0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid ${SCRIPT_GID}"
391 test_event_tracker ust 0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid $((SCRIPT_GID+1))"
392 test_event_track_untrack ust 0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
393 test_event_track_untrack ust 0 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
394 test_event_track_untrack ust 0 "${EVENT_NAME}" "--vuid --all"
395 test_event_track_untrack ust 0 "${EVENT_NAME}" "--vgid --all"
396
397 # matching
398 test_event_tracker ust 1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
399 test_event_tracker ust 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
400 test_event_tracker ust 1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid ${SCRIPT_GID}"
401 test_event_tracker ust 1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME}"
402 test_event_tracker ust 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME}"
403 test_event_tracker ust 1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID},$((SCRIPT_UID+1))"
404 test_event_tracker ust 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID},$((SCRIPT_GID+1))"
405 test_event_tracker ust 1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
406 test_event_tracker ust 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
407 test_event_tracker ust 1 "${EVENT_NAME}" "--vuid --all"
408 test_event_tracker ust 1 "${EVENT_NAME}" "--vgid --all"
409
410 #fail
411 test_event_tracker_fail ust "${EVENT_NAME}" "--vuid lttng_unexisting_user"
412 test_event_tracker_fail ust "${EVENT_NAME}" "--vgid lttng_unexisting_group"
413
414
415 #vpid
416
417 #non-matching
418 test_event_track_untrack ust 0 "${EVENT_NAME}" "--vpid --all"
419 test_event_vpid_tracker ust 0 "${EVENT_NAME}"
420 test_event_vpid_track_untrack ust 0 "${EVENT_NAME}"
421
422 #matching
423 test_event_tracker ust 1 "${EVENT_NAME}" "--vpid --all"
424 test_event_vpid_tracker ust 1 "${EVENT_NAME}"
425
426 #snapshot untrack vpid
427
428 test_event_ust_vpid_untrack_snapshot
429
430 #pid (backward compat)
431
432 #non-matching
433 test_event_pid_tracker ust 0 "${EVENT_NAME}"
434 test_event_pid_track_untrack ust 0 "${EVENT_NAME}"
435 test_event_track_untrack ust 0 "${EVENT_NAME}" "--pid --all" # backward compat
436
437 #matching
438 test_event_tracker ust 1 "${EVENT_NAME}" "--pid --all" # backward compat
439 test_event_pid_tracker ust 1 "${EVENT_NAME}"
440
441 if [ "$(id -u)" == "0" ]; then
442 isroot=1
443 else
444 isroot=0
445 fi
446
447 skip $isroot "Root access is needed. Skipping all kernel tracker tests." $NUM_KERNEL_TESTS ||
448 {
449 diag "Test kernel tracker"
450
451 modprobe lttng-test
452 ok $? "Loading lttng-test module"
453
454 EVENT_NAME="lttng_test_filter_event"
455
456 # vuid, vgid, vpid
457
458 # non-matching
459 test_event_tracker kernel 0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1))"
460 test_event_tracker kernel 0 "${EVENT_NAME}" "--vgid $((SCRIPT_GID+1))"
461 test_event_tracker kernel 0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid $((SCRIPT_GID+1))"
462 test_event_tracker kernel 0 "${EVENT_NAME}" "--vuid $((SCRIPT_UID+1)) --vgid ${SCRIPT_GID}"
463 test_event_tracker kernel 0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid $((SCRIPT_GID+1))"
464 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
465 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
466 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--vuid --all"
467 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--vgid --all"
468
469 # matching
470 test_event_tracker kernel 1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID}"
471 test_event_tracker kernel 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID}"
472 test_event_tracker kernel 1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID} --vgid ${SCRIPT_GID}"
473 test_event_tracker kernel 1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME}"
474 test_event_tracker kernel 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME}"
475 test_event_tracker kernel 1 "${EVENT_NAME}" "--vuid ${SCRIPT_UID},$((SCRIPT_UID+1))"
476 test_event_tracker kernel 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GID},$((SCRIPT_GID+1))"
477 test_event_tracker kernel 1 "${EVENT_NAME}" "--vuid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
478 test_event_tracker kernel 1 "${EVENT_NAME}" "--vgid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
479 test_event_tracker kernel 1 "${EVENT_NAME}" "--vuid --all"
480 test_event_tracker kernel 1 "${EVENT_NAME}" "--vgid --all"
481
482 #fail
483 test_event_tracker_fail kernel "${EVENT_NAME}" "--vuid lttng_unexisting_user"
484 test_event_tracker_fail kernel "${EVENT_NAME}" "--vgid lttng_unexisting_group"
485
486
487 #uid, gid
488
489 # non-matching
490 test_event_tracker kernel 0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1))"
491 test_event_tracker kernel 0 "${EVENT_NAME}" "--gid $((SCRIPT_GID+1))"
492 test_event_tracker kernel 0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1)) --gid $((SCRIPT_GID+1))"
493 test_event_tracker kernel 0 "${EVENT_NAME}" "--uid $((SCRIPT_UID+1)) --gid ${SCRIPT_GID}"
494 test_event_tracker kernel 0 "${EVENT_NAME}" "--uid ${SCRIPT_UID} --gid $((SCRIPT_GID+1))"
495 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--uid ${SCRIPT_UID}"
496 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--gid ${SCRIPT_GID}"
497 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--uid --all"
498 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--gid --all"
499
500 # matching
501 test_event_tracker kernel 1 "${EVENT_NAME}" "--uid ${SCRIPT_UID}"
502 test_event_tracker kernel 1 "${EVENT_NAME}" "--gid ${SCRIPT_GID}"
503 test_event_tracker kernel 1 "${EVENT_NAME}" "--uid ${SCRIPT_UID} --gid ${SCRIPT_GID}"
504 test_event_tracker kernel 1 "${EVENT_NAME}" "--uid ${SCRIPT_USERNAME}"
505 test_event_tracker kernel 1 "${EVENT_NAME}" "--gid ${SCRIPT_GROUPNAME}"
506 test_event_tracker kernel 1 "${EVENT_NAME}" "--uid ${SCRIPT_UID},$((SCRIPT_UID+1))"
507 test_event_tracker kernel 1 "${EVENT_NAME}" "--gid ${SCRIPT_GID},$((SCRIPT_GID+1))"
508 test_event_tracker kernel 1 "${EVENT_NAME}" "--uid ${SCRIPT_USERNAME},$((SCRIPT_UID+1))"
509 test_event_tracker kernel 1 "${EVENT_NAME}" "--gid ${SCRIPT_GROUPNAME},$((SCRIPT_GID+1))"
510
511 #fail
512 test_event_tracker_fail kernel "${EVENT_NAME}" "--uid lttng_unexisting_user"
513 test_event_tracker_fail kernel "${EVENT_NAME}" "--gid lttng_unexisting_group"
514
515
516 #vpid
517
518 #non-matching
519 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--vpid --all"
520 test_event_vpid_tracker kernel 0 "${EVENT_NAME}"
521 test_event_vpid_track_untrack kernel 0 "${EVENT_NAME}"
522
523 #matching
524 test_event_tracker kernel 1 "${EVENT_NAME}" "--vpid --all"
525 test_event_vpid_tracker kernel 1 "${EVENT_NAME}"
526
527 #pid
528
529 #non-matching
530 test_event_pid_tracker kernel 0 "${EVENT_NAME}"
531 test_event_pid_track_untrack kernel 0 "${EVENT_NAME}"
532 test_event_track_untrack kernel 0 "${EVENT_NAME}" "--pid --all"
533
534 #matching
535 test_event_tracker kernel 1 "${EVENT_NAME}" "--pid --all"
536 test_event_pid_tracker kernel 1 "${EVENT_NAME}"
537
538 modprobe --remove lttng-test
539 ok $? "Unloading lttng-test module"
540 }
541
542 stop_lttng_sessiond
This page took 0.041281 seconds and 4 git commands to generate.