tests: Add POPT_CFLAGS to gen-ust-events-ns and gen-ns-events
[lttng-tools.git] / tests / regression / tools / clear / test_ust
CommitLineData
c28fcefd
JR
1#!/bin/bash
2#
4942c256 3# Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
c28fcefd 4#
9d16b343 5# SPDX-License-Identifier: LGPL-2.1-only
c28fcefd
JR
6
7TEST_DESC="Clear - UST tracing"
8
9CURDIR=$(dirname $0)/
10TESTDIR=$CURDIR/../../..
11EVENT_NAME="tp:tptest"
bc3c79ae
JG
12EVENT_STATE_DUMP_START="lttng_ust_statedump:start"
13EVENT_STATE_DUMP_END="lttng_ust_statedump:end"
c28fcefd
JR
14SESSION_NAME=""
15TESTAPP_PATH="$TESTDIR/utils/testapp"
16TESTAPP_NAME="gen-ust-events"
17TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
18
bc3c79ae 19NUM_TESTS=2071
c28fcefd
JR
20
21PAGE_SIZE=$(getconf PAGE_SIZE)
8d5a3312 22TRACE_PATH=$(mktemp -d -t tmp.test_clear_ust_trace_path.XXXXXX)
c28fcefd 23
2a05e025
OD
24# shellcheck source=../utils/utils.sh
25source "$TESTDIR/utils/utils.sh"
c28fcefd
JR
26
27if [ ! -x "$TESTAPP_BIN" ]; then
28 BAIL_OUT "No UST events binary detected."
29fi
30
31function clean_path ()
32{
33 local trace_path=$1
34 set -u
061cde02 35 rm -rf $trace_path
c28fcefd
JR
36 set +u
37}
38
39function cond_start_tracing ()
40{
41 local session_name=$1
42 local tracing_active=$2
43
44 if [[ $tracing_active -ne 1 ]]; then
45 start_lttng_tracing_ok $session_name
46 fi
47}
48
49function cond_stop_tracing ()
50{
51 local session_name=$1
52 local tracing_active=$2
53
54 if [[ $tracing_active -ne 1 ]]; then
55 stop_lttng_tracing_ok $session_name
56 fi
57}
58
59function do_clear_session ()
60{
61 local session_name=$1
62 local tracing_active=$2
63 local clear_twice=$3
64 local rotate_before=$4
65 local rotate_after=$5
66
67 cond_stop_tracing $session_name $tracing_active
68 if [[ $rotate_before -eq 1 ]]; then
69 rotate_session_ok $SESSION_NAME
70 fi
71 lttng_clear_session_ok $SESSION_NAME
72 if [[ $clear_twice -eq 1 ]]; then
73 lttng_clear_session_ok $SESSION_NAME
74 fi
75 if [[ $rotate_after -eq 1 ]]; then
76 if [[ $tracing_active -eq 1 ]]; then
77 rotate_session_ok $SESSION_NAME
78 else
79 # Expect failure
80 rotate_session_fail $SESSION_NAME
81 fi
82 fi
83 cond_start_tracing $session_name $tracing_active
84}
85
86function test_ust_streaming ()
87{
88 local tracing_active=$1
89 local clear_twice=$2
90 local rotate_before=$3
91 local rotate_after=$4
92 local buffer_type=$5
93 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
94 local channel_name="chan"
95
96 diag "Test ust streaming clear"
97 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
98 create_lttng_session_uri $SESSION_NAME net://localhost
99 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
100 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
101 start_lttng_tracing_ok $SESSION_NAME
102 $TESTAPP_BIN -i 10
103 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
104 stop_lttng_tracing_ok $SESSION_NAME
105
106 if [[ $rotate_before -eq 1 ]]; then
107 validate_trace_count $EVENT_NAME $local_path 10
108 else
109 if [[ "$buffer_type" == "uid" ]]; then
110 validate_trace_empty $local_path
111 else # pid
112 validate_directory_empty $local_path
113 fi
114 fi
115
116 destroy_lttng_session_ok $SESSION_NAME
117}
118
69ebf37e
JR
119function test_ust_streaming_no_event ()
120{
121 local tracing_active=$1
122 local clear_twice=$2
123 #local rotate_before=$3 ignored
124 #local rotate_after=$4
125 local buffer_type=uid
126 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
127 local channel_name="chan"
128
129 diag "Test ust streaming clear no event"
130 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
131 create_lttng_session_uri $SESSION_NAME net://localhost
132 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
133 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
134 start_lttng_tracing_ok $SESSION_NAME
135
136 do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after"
137 stop_lttng_tracing_ok $SESSION_NAME
138
139 validate_directory_empty "$local_path"
140
141 destroy_lttng_session_ok $SESSION_NAME
142}
143
c28fcefd
JR
144function test_ust_streaming_rotate_clear ()
145{
146 local tracing_active=$1
147 local clear_twice=$2
148 local rotate_before=$3
149 local rotate_after=$4
150 local buffer_type=$5
151 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
152 local channel_name="chan"
153
154 diag "Test ust streaming rotate-clear"
155 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
156 create_lttng_session_uri $SESSION_NAME net://localhost
157 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
158 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
159 start_lttng_tracing_ok $SESSION_NAME
160 $TESTAPP_BIN -i 1
161 rotate_session_ok $SESSION_NAME
162 $TESTAPP_BIN -i 2
163 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
164 $TESTAPP_BIN -i 3
165 stop_lttng_tracing_ok $SESSION_NAME
166
167 if [[ $rotate_before -eq 1 ]]; then
168 local expect_count=6
169 else
170 local expect_count=4
171 fi
172 validate_trace_count $EVENT_NAME $local_path $expect_count
173
174 destroy_lttng_session_ok $SESSION_NAME
175}
176
177function test_ust_streaming_clear_rotate ()
178{
179 local tracing_active=$1
180 local clear_twice=$2
181 local rotate_before=$3
182 local rotate_after=$4
183 local buffer_type=$5
184 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
185 local channel_name="chan"
186
187 diag "Test ust streaming clear-rotate"
188 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
189 create_lttng_session_uri $SESSION_NAME net://localhost
190 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
191 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
192 start_lttng_tracing_ok $SESSION_NAME
193 $TESTAPP_BIN -i 1
194 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
195 $TESTAPP_BIN -i 2
196 rotate_session_ok $SESSION_NAME
197 $TESTAPP_BIN -i 3
198 stop_lttng_tracing_ok $SESSION_NAME
199
200 if [[ $rotate_before -eq 1 ]]; then
201 local expect_count=6
202 else
203 local expect_count=5
204 fi
205 validate_trace_count $EVENT_NAME $local_path $expect_count
206
207 destroy_lttng_session_ok $SESSION_NAME
208}
209
210function test_ust_streaming_live ()
211{
212 local tracing_active=$1
213 local clear_twice=$2
214 # 3, 4 unused
215 local buffer_type=$5
216 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
217 local channel_name="chan"
218
219 diag "Test ust streaming live clear"
220 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
221 create_lttng_session_uri $SESSION_NAME net://localhost "--live"
222 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
223 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
224 start_lttng_tracing_ok $SESSION_NAME
225 $TESTAPP_BIN -i 10
226 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
227 stop_lttng_tracing_ok $SESSION_NAME
228
94360c17
FD
229 if [[ "$buffer_type" == "uid" ]]; then
230 validate_trace_empty $local_path
231 else # pid
232 validate_directory_empty $local_path
233 fi
c28fcefd
JR
234
235 destroy_lttng_session_ok $SESSION_NAME
236}
237
238#no clear
239function test_ust_basic_streaming_live_viewer ()
240{
241 local tracing_active=$1
242 local clear_twice=$2
243 # 3, 4 unused
244 local buffer_type=$5
245 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
246 local remote_trace_path="${HOSTNAME}/${SESSION_NAME}"
247 local channel_name="chan"
8d5a3312
MJ
248 local bt_output_path=$(mktemp -u -t tmp.test_${FUNCNAME[0]}_bt_output_path.XXXXXX)
249 local file_sync_before_exit=$(mktemp -u -t tmp.test_${FUNCNAME[0]}_sync_before_exit.XXXXXX)
c28fcefd
JR
250
251 diag "Test ust basic streaming live with viewer"
252 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
253 create_lttng_session_uri $SESSION_NAME net://localhost "--live"
254 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
255 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
256 start_lttng_tracing_ok $SESSION_NAME
257
258 wait_live_trace_ready net://localhost
259
260 # Connect a live viewer
261 $BABELTRACE_BIN -i lttng-live net://localhost/host/$remote_trace_path > $bt_output_path &
262 local viewer_pid=$!
263
264 wait_live_viewer_connect net://localhost
265
266 $TESTAPP_BIN -i 10 --sync-before-exit $file_sync_before_exit &
267 local app_pid=$!
268
269 diag "Wait until viewer sees all 10 expected events"
270 local evcount=0
271 while [ $evcount -ne 10 ]; do
272 evcount=$(cat $bt_output_path | wc -l)
fd6ecee8 273 sleep 0.1
c28fcefd
JR
274 done
275 pass "Live viewer read $evcount events, expect 10"
276
277 destroy_lttng_session_ok $SESSION_NAME
278 touch $file_sync_before_exit
bc3c79ae 279 diag "Waiting for application to exit"
c28fcefd
JR
280 wait $app_pid
281 pass "Wait for application to exit"
282 diag "Wait for viewer to exit"
283 wait $viewer_pid
284 ok $? "Babeltrace succeeds"
285 pass "Wait for viewer to exit"
286
287 rm -f $bt_output_path
288 rm -f $file_sync_before_exit
289}
290
291function test_ust_streaming_live_viewer ()
292{
293 local tracing_active=$1
294 local clear_twice=$2
295 # 3, 4 unused
296 local buffer_type=$5
297 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
298 local remote_trace_path="${HOSTNAME}/${SESSION_NAME}"
299 local channel_name="chan"
8d5a3312 300 local bt_output_path=$(mktemp -u -t tmp.test_${FUNCNAME[0]}_bt_output_path.XXXXXX)
c28fcefd
JR
301
302 diag "Test ust streaming live clear with viewer"
303 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
304 create_lttng_session_uri $SESSION_NAME net://localhost "--live"
305 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
306 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
307 start_lttng_tracing_ok $SESSION_NAME
308
309 wait_live_trace_ready net://localhost
310
311 # Connect a live viewer
312 $BABELTRACE_BIN -i lttng-live net://localhost/host/$remote_trace_path > $bt_output_path &
313 local viewer_pid=$!
314
315 wait_live_viewer_connect net://localhost
316
317 $TESTAPP_BIN -i 10
318 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
319 stop_lttng_tracing_ok $SESSION_NAME
320
321 destroy_lttng_session_ok $SESSION_NAME
322 diag "Wait for viewer to exit"
323 wait $viewer_pid
324 ok $? "Babeltrace succeeds"
325 pass "Wait for viewer to exit"
326
327 clean_path $bt_output_path
328}
329
bc3c79ae
JG
330function test_ust_streaming_live_viewer_new_metadata_after_clear ()
331{
332 local tracing_active=$1
333 local clear_twice=$2
334 # 3, 4 unused
335 local buffer_type=$5
336 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
337 local remote_trace_path="${HOSTNAME}/${SESSION_NAME}"
338 local channel_name="chan"
bc3c79ae 339
8d5a3312
MJ
340 local bt_output_path=$(mktemp -t "tmp.${FUNCNAME[0]}_bt_output.XXXXXX")
341 local bt_error_path=$(mktemp -t "tmp.${FUNCNAME[0]}_bt_error.XXXXXX")
342 local file_sync_before_exit=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_exit.XXXXXX")
bc3c79ae
JG
343
344 diag "Test ust streaming live clear with viewer with new metadata after clear"
345 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
346 create_lttng_session_uri "$SESSION_NAME" net://localhost "--live"
347 enable_ust_lttng_channel_ok "$SESSION_NAME" $channel_name "--buffers-$buffer_type"
348
349 # The vpid context is added to filter events based on the vpid of the
350 # test application as state dump events are used. Regenerating a
351 # state dump will cause other instrumented application on the system
352 # to trigger a state dump which would throw off checks that rely on an
353 # event count.
354 add_context_ust_ok "$SESSION_NAME" $channel_name "vpid"
355 enable_ust_lttng_event_ok "$SESSION_NAME" $EVENT_NAME $channel_name
356 start_lttng_tracing_ok "$SESSION_NAME"
357
358 wait_live_trace_ready net://localhost
359
360 # Connect a live viewer
361 $BABELTRACE_BIN -i lttng-live "net://localhost/host/$remote_trace_path" 1> "$bt_output_path" 2> "$bt_error_path" &
362 local viewer_pid=$!
363
364 wait_live_viewer_connect net://localhost
365
366 $TESTAPP_BIN -i 10 --sync-before-exit "$file_sync_before_exit" &
367 local app_pid=$!
368
369 diag "Wait until viewer sees all 10 expected events"
370 local evcount=0
371 while [ $evcount -ne 10 ]; do
372 evcount=$(wc -l < "$bt_output_path")
fd6ecee8 373 sleep 0.1
bc3c79ae
JG
374 done
375 pass "Live viewer read $evcount events, expect 10"
376
377 do_clear_session "$SESSION_NAME" "$tracing_active" "$clear_twice" 0 0
378
379 # Enable new events which will add their descriptions to the metadata
380 # file. This validates that, following a clear, the relay daemon rotates
381 # the metadata viewer stream to the new metadata file.
382 enable_ust_lttng_event_filter "$SESSION_NAME" $EVENT_STATE_DUMP_START "\$ctx.vpid == $app_pid" $channel_name
383 enable_ust_lttng_event_filter "$SESSION_NAME" $EVENT_STATE_DUMP_END "\$ctx.vpid == $app_pid" $channel_name
384
385 # Forcing a state dump to produce the two events enabled above
386 regenerate_statedump_ok "$SESSION_NAME"
387
388 diag "Wait until viewer sees all 12 expected events"
389 local evcount=0
390 while [ $evcount -ne 12 ]; do
391 evcount=$(wc -l < "$bt_output_path")
fd6ecee8 392 sleep 0.1
bc3c79ae
JG
393 done
394 pass "Live viewer read $evcount events, expect 12"
395
396 stop_lttng_tracing_ok "$SESSION_NAME"
397
398 destroy_lttng_session_ok "$SESSION_NAME"
399
400 touch "$file_sync_before_exit"
401 diag "Waiting for application to exit"
402 wait $app_pid
403 pass "Wait for application to exit"
404
405 diag "Wait for viewer to exit"
406 wait $viewer_pid
407 ok $? "Babeltrace succeeds"
408 pass "Wait for viewer to exit"
409
410 clean_path "$bt_output_path"
411 clean_path "$bt_error_path"
a8cf8647 412 rm -f "$file_sync_before_exit"
bc3c79ae
JG
413}
414
c28fcefd
JR
415function test_ust_local ()
416{
417 local tracing_active=$1
418 local clear_twice=$2
419 local rotate_before=$3
420 local rotate_after=$4
421 local buffer_type=$5
422 local channel_name="chan"
423
424 diag "Test ust local"
425 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
426 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
427 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
428 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
429 start_lttng_tracing_ok $SESSION_NAME
430 $TESTAPP_BIN -i 10
431 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
432 stop_lttng_tracing_ok $SESSION_NAME
433
434 if [[ $rotate_before -eq 1 ]]; then
435 validate_trace_count $EVENT_NAME $TRACE_PATH 10
436 else
437 if [[ "$buffer_type" == "uid" ]]; then
438 validate_trace_empty $TRACE_PATH
439 else # pid
94360c17
FD
440
441 # The sessiond always created a `ust/ directory
442 # whenever the UST domain is active
443 validate_directory_empty $TRACE_PATH/ust/
c28fcefd
JR
444 fi
445 fi
446
447 destroy_lttng_session_ok $SESSION_NAME
448}
449
69ebf37e
JR
450function test_ust_local_no_event ()
451{
452 local tracing_active=$1
453 local clear_twice=$2
454 #local rotate_before=$3 ignored
455 #local rotate_after=$4 ignored
456 local buffer_type=$5
457 local channel_name="chan"
458
459 diag "Test ust local no event"
460 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
461 create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
462 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name "--buffers-$buffer_type"
463 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
464 start_lttng_tracing_ok $SESSION_NAME
465
466 do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after"
467 stop_lttng_tracing_ok $SESSION_NAME
468
469 validate_directory_empty "$TRACE_PATH"
470
471 destroy_lttng_session_ok $SESSION_NAME
472}
473
c28fcefd
JR
474function test_ust_local_rotate_clear ()
475{
476 local tracing_active=$1
477 local clear_twice=$2
478 local rotate_before=$3
479 local rotate_after=$4
480 local buffer_type=$5
481 local channel_name="chan"
482
483 diag "Test ust local rotate-clear"
484 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
485 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
486 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
487 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
488 start_lttng_tracing_ok $SESSION_NAME
489 $TESTAPP_BIN -i 1
490 rotate_session_ok $SESSION_NAME
491 $TESTAPP_BIN -i 2
492 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
493 $TESTAPP_BIN -i 3
494 stop_lttng_tracing_ok $SESSION_NAME
495
496 if [[ $rotate_before -eq 1 ]]; then
497 local expect_count=6
498 else
499 local expect_count=4
500 fi
501 validate_trace_count $EVENT_NAME $TRACE_PATH $expect_count
502
503 destroy_lttng_session_ok $SESSION_NAME
504}
505
506function test_ust_local_clear_rotate ()
507{
508 local tracing_active=$1
509 local clear_twice=$2
510 local rotate_before=$3
511 local rotate_after=$4
512 local buffer_type=$5
513 local channel_name="chan"
514
515 diag "Test ust local clear-rotate"
516 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
517 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
518 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
519 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
520 start_lttng_tracing_ok $SESSION_NAME
521 $TESTAPP_BIN -i 1
522 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
523 $TESTAPP_BIN -i 2
524 rotate_session_ok $SESSION_NAME
525 $TESTAPP_BIN -i 3
526 stop_lttng_tracing_ok $SESSION_NAME
527
528 if [[ $rotate_before -eq 1 ]]; then
529 local expect_count=6
530 else
531 local expect_count=5
532 fi
533 validate_trace_count $EVENT_NAME $TRACE_PATH $expect_count
534
535 destroy_lttng_session_ok $SESSION_NAME
536}
537
538function do_ust_snapshot ()
539{
540 local session_name=$1
541 local trace_path=$2
542 local tracing_active=$3
543 local clear_twice=$4
544 local buffer_type=$5
545 local channel_name="snapshot"
546
547 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
548 enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name
549 start_lttng_tracing_ok $session_name
550
551 # Generate 10 events that will sit in the buffers.
552 $TESTAPP_BIN -i 10
553
554 # Take a first snapshot and validate that the events are present.
555 lttng_snapshot_record $session_name
556 stop_lttng_tracing_ok $session_name
557 validate_trace_count $EVENT_NAME $trace_path 10
558
559 # Clean the output path
560 clean_path $trace_path
561 start_lttng_tracing_ok $session_name
562
563 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
564
565 # Make sure the subsequent snapshot is empty and valid.
566 lttng_snapshot_record $session_name
567 stop_lttng_tracing_ok $session_name
568 validate_trace_empty $trace_path
569
570 # Clean the output path
571 clean_path $trace_path
572 start_lttng_tracing_ok $session_name
573
574 # Make sure that everything still works, generate events and take a
575 # snapshot.
576 $TESTAPP_BIN -i 10
577 lttng_snapshot_record $session_name
578 stop_lttng_tracing_ok $session_name
579 validate_trace_count $EVENT_NAME $trace_path 10
580}
581
582function test_ust_streaming_snapshot ()
583{
584 local tracing_active=$1
585 local clear_twice=$2
586 # 3, 4 unused.
587 local buffer_type=$5
588
589 diag "Test ust streaming snapshot clear"
590 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
591
592 create_lttng_session_uri $SESSION_NAME net://localhost "--snapshot"
593 do_ust_snapshot $SESSION_NAME $TRACE_PATH $tracing_active $clear_twice $buffer_type
594 destroy_lttng_session_ok $SESSION_NAME
595}
596
597function test_ust_local_snapshot ()
598{
599 local tracing_active=$1
600 local clear_twice=$2
601 # 3, 4 unused.
602 local buffer_type=$5
603
604 diag "Test ust local snapshot clear"
605 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
606
607 create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot"
608 do_ust_snapshot $SESSION_NAME $TRACE_PATH $tracing_active $clear_twice $buffer_type
609 destroy_lttng_session_ok $SESSION_NAME
610}
611
612# snapshot for per-pid is tested independently of the "buffer type" parameter
613# because an application needs to be live to appear in a snapshot.
614function test_ust_local_snapshot_per_pid ()
615{
616 local tracing_active=$1
617 local clear_twice=$2
618 # 3, 4 unused.
619 local buffer_type=$5
620 local channel_name="channel0"
8d5a3312
MJ
621 local file_sync_before_last=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX")
622 local file_sync_before_last_touch=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_last_touch.XXXXXX")
623 local file_sync_before_exit=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_exit.XXXXXX")
624 local file_sync_before_exit_touch=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_exit_touch.XXXXXX")
c28fcefd
JR
625
626 diag "Test ust local snapshot clear per pid"
627 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
628
629 create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot"
630 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
631 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
632 start_lttng_tracing_ok $SESSION_NAME
633
634 # Generate 10 events that will sit in the buffers.
635 $TESTAPP_BIN -i 10 -w 0 \
636 --sync-before-last-event ${file_sync_before_last} \
637 --sync-before-last-event-touch ${file_sync_before_last_touch} \
638 --sync-before-exit ${file_sync_before_exit} \
639 --sync-before-exit-touch ${file_sync_before_exit_touch} >/dev/null 2>&1 &
becd029c 640 local app_pid="${!}"
c28fcefd
JR
641
642 # Continue only when there is only the last event remaining.
643 while [ ! -f "${file_sync_before_last_touch}" ]; do
fd6ecee8 644 sleep 0.1
c28fcefd
JR
645 done
646
647 # Take a first snapshot and validate that the events are present.
648 lttng_snapshot_record $SESSION_NAME
649 stop_lttng_tracing_ok $SESSION_NAME
650 validate_trace_count $EVENT_NAME $TRACE_PATH 9
651
652 # Clean the output path
653 clean_path $TRACE_PATH
654 start_lttng_tracing_ok $SESSION_NAME
655
656 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
657
658 # Make sure the subsequent snapshot is empty and valid.
659 lttng_snapshot_record $SESSION_NAME
660 stop_lttng_tracing_ok $SESSION_NAME
661 validate_trace_empty $TRACE_PATH
662
663 # Validate that tracing still works and subsequent snapshots are valid.
664 # Clean the output path.
665 clean_path $TRACE_PATH
666 start_lttng_tracing_ok $SESSION_NAME
667
668 # Continue over the last event.
669 touch ${file_sync_before_last}
670
671 # Wait for the before exit sync point. This ensure that we went over the
672 # last tracepoint.
673 while [ ! -f "${file_sync_before_exit_touch}" ]; do
fd6ecee8 674 sleep 0.1
c28fcefd
JR
675 done
676
677 # Make sure the snapshot contains the last event.
678 lttng_snapshot_record $SESSION_NAME
679 stop_lttng_tracing_ok $SESSION_NAME
680 validate_trace_count $EVENT_NAME $TRACE_PATH 1
681
682 # Release the application.
683 touch ${file_sync_before_exit}
becd029c 684 wait "${app_pid}"
c28fcefd
JR
685 destroy_lttng_session_ok $SESSION_NAME
686
687 rm -f ${file_sync_before_last}
688 rm -f ${file_sync_before_last_touch}
689 rm -f ${file_sync_before_exit}
690 rm -f ${file_sync_before_exit_touch}
691}
692
693function test_ust_streaming_tracefile_rotation ()
694{
695 local tracing_active=$1
696 local clear_twice=$2
697 local rotate_before=$3
698 local rotate_after=$4
699 local buffer_type=$5
700 local channel_name="rotchan"
701 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
702
703 diag "Test ust streaming clear with tracefile rotation"
704 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
705 create_lttng_session_uri $SESSION_NAME net://localhost
706 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --subbuf-size=$PAGE_SIZE \
707 --tracefile-size=$PAGE_SIZE --tracefile-count=2 --buffers-$buffer_type
708 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
709 start_lttng_tracing_ok $SESSION_NAME
710 $TESTAPP_BIN -i 10
711 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
712 stop_lttng_tracing_ok $SESSION_NAME
713
714 if [[ $rotate_before -eq 1 ]]; then
715 validate_trace_count $EVENT_NAME $local_path 10
716 else
717 if [[ "$buffer_type" == "uid" ]]; then
718 validate_trace_empty $local_path
719 else # pid
720 validate_directory_empty $local_path
721 fi
722 fi
723
724 start_lttng_tracing_ok $SESSION_NAME
725 $TESTAPP_BIN -i 20
726 stop_lttng_tracing_ok
727
728 if [[ $rotate_before -eq 1 ]]; then
729 validate_trace_count $EVENT_NAME $local_path 30
730 else
731 validate_trace_count $EVENT_NAME $local_path 20
732 fi
733
734 destroy_lttng_session_ok $SESSION_NAME
735}
736
737# With 1 byte per event (as strict minimum), generating 200000 events
738# guarantees filling up 2 files of 64k in size, which is the maximum
739# page size known on Linux
740function test_ust_streaming_tracefile_rotation_overwrite_files ()
741{
742 local tracing_active=$1
743 local clear_twice=$2
744 local rotate_before=$3
745 local rotate_after=$4
746 local buffer_type=$5
747 local channel_name="rotchan"
748 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
749
750 diag "Test ust streaming clear with tracefile rotation, overwrite files"
751 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
752 create_lttng_session_uri $SESSION_NAME net://localhost
753 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --subbuf-size=$PAGE_SIZE \
754 --tracefile-size=$PAGE_SIZE --tracefile-count=2 --buffers-$buffer_type
755 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
756 start_lttng_tracing_ok $SESSION_NAME
2a05e025 757 taskset -c "$(get_any_available_cpu)" $TESTAPP_BIN -i 200000
c28fcefd
JR
758 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
759 stop_lttng_tracing_ok $SESSION_NAME
760
761 if [[ $rotate_before -eq 1 ]]; then
762 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 200000
763 else
764 if [[ "$buffer_type" == "uid" ]]; then
765 validate_trace_empty $local_path
766 else # pid
767 validate_directory_empty $local_path
768 fi
769 fi
770
771 start_lttng_tracing_ok $SESSION_NAME
2a05e025 772 taskset -c "$(get_any_available_cpu)" $TESTAPP_BIN -i 400000
c28fcefd
JR
773 stop_lttng_tracing_ok
774
775 if [[ $rotate_before -eq 1 ]]; then
776 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 600000
777 else
778 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 200000
779 fi
780
781 destroy_lttng_session_ok $SESSION_NAME
782}
783
784function test_ust_disallow_clear ()
785{
786 diag "Test ust disallow clear on relay daemon"
787 SESSION_NAME=$(randstring 16 0)
788
789 LTTNG_RELAYD_DISALLOW_CLEAR=1 start_lttng_relayd "-o $TRACE_PATH"
790
791 start_lttng_sessiond
792
793 create_lttng_session_uri $SESSION_NAME net://localhost
794 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
795 start_lttng_tracing_ok $SESSION_NAME
796 lttng_clear_session_fail $SESSION_NAME
797 destroy_lttng_session_ok $SESSION_NAME
798
799 stop_lttng_sessiond
800 stop_lttng_relayd
801 clean_path $TRACE_PATH
802}
803
804plan_tests $NUM_TESTS
805
806print_test_banner "$TEST_DESC"
807
c125de8f
FD
808bail_out_if_no_babeltrace
809
c28fcefd
JR
810streaming_tests=(test_ust_streaming
811 test_ust_streaming_rotate_clear
812 test_ust_streaming_clear_rotate
813 test_ust_streaming_tracefile_rotation
814 test_ust_streaming_tracefile_rotation_overwrite_files
69ebf37e 815 test_ust_streaming_no_event
c28fcefd
JR
816)
817
818live_tests=(test_ust_streaming_live
819 test_ust_basic_streaming_live_viewer
820 test_ust_streaming_live_viewer
bc3c79ae 821 test_ust_streaming_live_viewer_new_metadata_after_clear
c28fcefd
JR
822)
823
824local_tests=(test_ust_local
825 test_ust_local_rotate_clear
826 test_ust_local_clear_rotate
69ebf37e 827 test_ust_local_no_event
c28fcefd
JR
828)
829
830snapshot_uid_tests=(test_ust_streaming_snapshot
831 test_ust_local_snapshot
832)
833
834snapshot_pid_tests=(test_ust_local_snapshot_per_pid)
835
836start_lttng_relayd "-o $TRACE_PATH"
837start_lttng_sessiond
838
839# Per-UID buffers
840
841# Clear with tracing active, clear once
842for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
843do
844 SESSION_NAME=$(randstring 16 0)
845 ${fct_test} 1 0 0 0 uid
846 clean_path $TRACE_PATH
847done
848
849# Clear with tracing active, clear twice
850for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
851do
852 SESSION_NAME=$(randstring 16 0)
853 ${fct_test} 1 1 0 0 uid
854 clean_path $TRACE_PATH
855done
856
857# Clear with tracing inactive, clear once
858for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
859do
860 SESSION_NAME=$(randstring 16 0)
861 ${fct_test} 0 0 0 0 uid
862 clean_path $TRACE_PATH
863done
864
865# Clear with tracing inactive, clear twice
866for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
867do
868 SESSION_NAME=$(randstring 16 0)
869 ${fct_test} 0 1 0 0 uid
870 clean_path $TRACE_PATH
871done
872
873# Clear with tracing inactive, rotate-clear once
874for fct_test in ${streaming_tests[@]} ${local_tests[@]};
875do
876 SESSION_NAME=$(randstring 16 0)
877 ${fct_test} 0 0 1 0 uid
878 clean_path $TRACE_PATH
879done
880
881# Clear with tracing inactive, clear once-rotate(fail)
882for fct_test in ${streaming_tests[@]} ${local_tests[@]};
883do
884 SESSION_NAME=$(randstring 16 0)
885 ${fct_test} 0 0 0 1 uid
886 clean_path $TRACE_PATH
887done
888
889
890# Per-PID buffers.
891
892# Clear with tracing active, clear once
893for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
894do
895 SESSION_NAME=$(randstring 16 0)
896 ${fct_test} 1 0 0 0 pid
897 clean_path $TRACE_PATH
898done
899
900# Clear with tracing active, clear twice
901for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
902do
903 SESSION_NAME=$(randstring 16 0)
904 ${fct_test} 1 1 0 0 pid
905 clean_path $TRACE_PATH
906done
907
908# Clear with tracing inactive, clear once
909for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
910do
911 SESSION_NAME=$(randstring 16 0)
912 ${fct_test} 0 0 0 0 pid
913 clean_path $TRACE_PATH
914done
915
916# Clear with tracing inactive, clear twice
917for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
918do
919 SESSION_NAME=$(randstring 16 0)
920 ${fct_test} 0 1 0 0 pid
921 clean_path $TRACE_PATH
922done
923
924# Clear with tracing inactive, rotate-clear once
925for fct_test in ${streaming_tests[@]} ${local_tests[@]};
926do
927 SESSION_NAME=$(randstring 16 0)
928 ${fct_test} 0 0 1 0 pid
929 clean_path $TRACE_PATH
930done
931
932# Clear with tracing inactive, clear once-rotate(fail)
933for fct_test in ${streaming_tests[@]} ${local_tests[@]};
934do
935 SESSION_NAME=$(randstring 16 0)
936 ${fct_test} 0 0 0 1 pid
937 clean_path $TRACE_PATH
938done
939
940stop_lttng_sessiond
941stop_lttng_relayd
942
943test_ust_disallow_clear
afc3cc02
FD
944
945rm -rf "$TRACE_PATH"
This page took 0.077522 seconds and 4 git commands to generate.