Fix: Tests that assume CPU 0 is present
[lttng-tools.git] / tests / regression / tools / clear / test_ust
CommitLineData
c28fcefd
JR
1#!/bin/bash
2#
9e3c8d58 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"
60ef7bf7
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
60ef7bf7 19NUM_TESTS=2071
c28fcefd
JR
20
21PAGE_SIZE=$(getconf PAGE_SIZE)
22TRACE_PATH=$(mktemp -d)
23
fe1c64c5
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
35 rm -rf $trace_path/*
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
27d444d3
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
f2489409
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"
248 local bt_output_path=$(mktemp -u)
249 local file_sync_before_exit=$(mktemp -u)
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)
273 sleep 0.5
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
60ef7bf7 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"
300 local bt_output_path=$(mktemp -d)/bt-output.txt
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
60ef7bf7
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"
339 local bt_output_path
340 local bt_error_path
341 local file_sync_before_exit
342
343 bt_output_path=$(mktemp -d)/bt-output.txt
344 bt_error_path=$(mktemp -d)/bt-output.err
345 file_sync_before_exit=$(mktemp -u)
346
347 diag "Test ust streaming live clear with viewer with new metadata after clear"
348 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
349 create_lttng_session_uri "$SESSION_NAME" net://localhost "--live"
350 enable_ust_lttng_channel_ok "$SESSION_NAME" $channel_name "--buffers-$buffer_type"
351
352 # The vpid context is added to filter events based on the vpid of the
353 # test application as state dump events are used. Regenerating a
354 # state dump will cause other instrumented application on the system
355 # to trigger a state dump which would throw off checks that rely on an
356 # event count.
357 add_context_ust_ok "$SESSION_NAME" $channel_name "vpid"
358 enable_ust_lttng_event_ok "$SESSION_NAME" $EVENT_NAME $channel_name
359 start_lttng_tracing_ok "$SESSION_NAME"
360
361 wait_live_trace_ready net://localhost
362
363 # Connect a live viewer
364 $BABELTRACE_BIN -i lttng-live "net://localhost/host/$remote_trace_path" 1> "$bt_output_path" 2> "$bt_error_path" &
365 local viewer_pid=$!
366
367 wait_live_viewer_connect net://localhost
368
369 $TESTAPP_BIN -i 10 --sync-before-exit "$file_sync_before_exit" &
370 local app_pid=$!
371
372 diag "Wait until viewer sees all 10 expected events"
373 local evcount=0
374 while [ $evcount -ne 10 ]; do
375 evcount=$(wc -l < "$bt_output_path")
376 sleep 0.5
377 done
378 pass "Live viewer read $evcount events, expect 10"
379
380 do_clear_session "$SESSION_NAME" "$tracing_active" "$clear_twice" 0 0
381
382 # Enable new events which will add their descriptions to the metadata
383 # file. This validates that, following a clear, the relay daemon rotates
384 # the metadata viewer stream to the new metadata file.
385 enable_ust_lttng_event_filter "$SESSION_NAME" $EVENT_STATE_DUMP_START "\$ctx.vpid == $app_pid" $channel_name
386 enable_ust_lttng_event_filter "$SESSION_NAME" $EVENT_STATE_DUMP_END "\$ctx.vpid == $app_pid" $channel_name
387
388 # Forcing a state dump to produce the two events enabled above
389 regenerate_statedump_ok "$SESSION_NAME"
390
391 diag "Wait until viewer sees all 12 expected events"
392 local evcount=0
393 while [ $evcount -ne 12 ]; do
394 evcount=$(wc -l < "$bt_output_path")
395 sleep 0.5
396 done
397 pass "Live viewer read $evcount events, expect 12"
398
399 stop_lttng_tracing_ok "$SESSION_NAME"
400
401 destroy_lttng_session_ok "$SESSION_NAME"
402
403 touch "$file_sync_before_exit"
404 diag "Waiting for application to exit"
405 wait $app_pid
406 pass "Wait for application to exit"
407
408 diag "Wait for viewer to exit"
409 wait $viewer_pid
410 ok $? "Babeltrace succeeds"
411 pass "Wait for viewer to exit"
412
413 clean_path "$bt_output_path"
414 clean_path "$bt_error_path"
415}
416
c28fcefd
JR
417function test_ust_local ()
418{
419 local tracing_active=$1
420 local clear_twice=$2
421 local rotate_before=$3
422 local rotate_after=$4
423 local buffer_type=$5
424 local channel_name="chan"
425
426 diag "Test ust local"
427 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
428 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
429 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
430 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
431 start_lttng_tracing_ok $SESSION_NAME
432 $TESTAPP_BIN -i 10
433 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
434 stop_lttng_tracing_ok $SESSION_NAME
435
436 if [[ $rotate_before -eq 1 ]]; then
437 validate_trace_count $EVENT_NAME $TRACE_PATH 10
438 else
439 if [[ "$buffer_type" == "uid" ]]; then
440 validate_trace_empty $TRACE_PATH
441 else # pid
f2489409
FD
442
443 # The sessiond always created a `ust/ directory
444 # whenever the UST domain is active
445 validate_directory_empty $TRACE_PATH/ust/
c28fcefd
JR
446 fi
447 fi
448
449 destroy_lttng_session_ok $SESSION_NAME
450}
451
27d444d3
JR
452function test_ust_local_no_event ()
453{
454 local tracing_active=$1
455 local clear_twice=$2
456 #local rotate_before=$3 ignored
457 #local rotate_after=$4 ignored
458 local buffer_type=$5
459 local channel_name="chan"
460
461 diag "Test ust local no event"
462 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
463 create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
464 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name "--buffers-$buffer_type"
465 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
466 start_lttng_tracing_ok $SESSION_NAME
467
468 do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after"
469 stop_lttng_tracing_ok $SESSION_NAME
470
471 validate_directory_empty "$TRACE_PATH"
472
473 destroy_lttng_session_ok $SESSION_NAME
474}
475
c28fcefd
JR
476function test_ust_local_rotate_clear ()
477{
478 local tracing_active=$1
479 local clear_twice=$2
480 local rotate_before=$3
481 local rotate_after=$4
482 local buffer_type=$5
483 local channel_name="chan"
484
485 diag "Test ust local rotate-clear"
486 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
487 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
488 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
489 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
490 start_lttng_tracing_ok $SESSION_NAME
491 $TESTAPP_BIN -i 1
492 rotate_session_ok $SESSION_NAME
493 $TESTAPP_BIN -i 2
494 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
495 $TESTAPP_BIN -i 3
496 stop_lttng_tracing_ok $SESSION_NAME
497
498 if [[ $rotate_before -eq 1 ]]; then
499 local expect_count=6
500 else
501 local expect_count=4
502 fi
503 validate_trace_count $EVENT_NAME $TRACE_PATH $expect_count
504
505 destroy_lttng_session_ok $SESSION_NAME
506}
507
508function test_ust_local_clear_rotate ()
509{
510 local tracing_active=$1
511 local clear_twice=$2
512 local rotate_before=$3
513 local rotate_after=$4
514 local buffer_type=$5
515 local channel_name="chan"
516
517 diag "Test ust local clear-rotate"
518 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
519 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
520 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
521 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
522 start_lttng_tracing_ok $SESSION_NAME
523 $TESTAPP_BIN -i 1
524 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
525 $TESTAPP_BIN -i 2
526 rotate_session_ok $SESSION_NAME
527 $TESTAPP_BIN -i 3
528 stop_lttng_tracing_ok $SESSION_NAME
529
530 if [[ $rotate_before -eq 1 ]]; then
531 local expect_count=6
532 else
533 local expect_count=5
534 fi
535 validate_trace_count $EVENT_NAME $TRACE_PATH $expect_count
536
537 destroy_lttng_session_ok $SESSION_NAME
538}
539
540function do_ust_snapshot ()
541{
542 local session_name=$1
543 local trace_path=$2
544 local tracing_active=$3
545 local clear_twice=$4
546 local buffer_type=$5
547 local channel_name="snapshot"
548
549 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
550 enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name
551 start_lttng_tracing_ok $session_name
552
553 # Generate 10 events that will sit in the buffers.
554 $TESTAPP_BIN -i 10
555
556 # Take a first snapshot and validate that the events are present.
557 lttng_snapshot_record $session_name
558 stop_lttng_tracing_ok $session_name
559 validate_trace_count $EVENT_NAME $trace_path 10
560
561 # Clean the output path
562 clean_path $trace_path
563 start_lttng_tracing_ok $session_name
564
565 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
566
567 # Make sure the subsequent snapshot is empty and valid.
568 lttng_snapshot_record $session_name
569 stop_lttng_tracing_ok $session_name
570 validate_trace_empty $trace_path
571
572 # Clean the output path
573 clean_path $trace_path
574 start_lttng_tracing_ok $session_name
575
576 # Make sure that everything still works, generate events and take a
577 # snapshot.
578 $TESTAPP_BIN -i 10
579 lttng_snapshot_record $session_name
580 stop_lttng_tracing_ok $session_name
581 validate_trace_count $EVENT_NAME $trace_path 10
582}
583
584function test_ust_streaming_snapshot ()
585{
586 local tracing_active=$1
587 local clear_twice=$2
588 # 3, 4 unused.
589 local buffer_type=$5
590
591 diag "Test ust streaming snapshot clear"
592 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
593
594 create_lttng_session_uri $SESSION_NAME net://localhost "--snapshot"
595 do_ust_snapshot $SESSION_NAME $TRACE_PATH $tracing_active $clear_twice $buffer_type
596 destroy_lttng_session_ok $SESSION_NAME
597}
598
599function test_ust_local_snapshot ()
600{
601 local tracing_active=$1
602 local clear_twice=$2
603 # 3, 4 unused.
604 local buffer_type=$5
605
606 diag "Test ust local snapshot clear"
607 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
608
609 create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot"
610 do_ust_snapshot $SESSION_NAME $TRACE_PATH $tracing_active $clear_twice $buffer_type
611 destroy_lttng_session_ok $SESSION_NAME
612}
613
614# snapshot for per-pid is tested independently of the "buffer type" parameter
615# because an application needs to be live to appear in a snapshot.
616function test_ust_local_snapshot_per_pid ()
617{
618 local tracing_active=$1
619 local clear_twice=$2
620 # 3, 4 unused.
621 local buffer_type=$5
622 local channel_name="channel0"
623 local file_sync_before_last=$(mktemp -u)
624 local file_sync_before_last_touch=$(mktemp -u)
625 local file_sync_before_exit=$(mktemp -u)
626 local file_sync_before_exit_touch=$(mktemp -u)
627
628 diag "Test ust local snapshot clear per pid"
629 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type"
630
631 create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot"
632 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type
633 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
634 start_lttng_tracing_ok $SESSION_NAME
635
636 # Generate 10 events that will sit in the buffers.
637 $TESTAPP_BIN -i 10 -w 0 \
638 --sync-before-last-event ${file_sync_before_last} \
639 --sync-before-last-event-touch ${file_sync_before_last_touch} \
640 --sync-before-exit ${file_sync_before_exit} \
641 --sync-before-exit-touch ${file_sync_before_exit_touch} >/dev/null 2>&1 &
642
643 # Continue only when there is only the last event remaining.
644 while [ ! -f "${file_sync_before_last_touch}" ]; do
645 sleep 0.5
646 done
647
648 # Take a first snapshot and validate that the events are present.
649 lttng_snapshot_record $SESSION_NAME
650 stop_lttng_tracing_ok $SESSION_NAME
651 validate_trace_count $EVENT_NAME $TRACE_PATH 9
652
653 # Clean the output path
654 clean_path $TRACE_PATH
655 start_lttng_tracing_ok $SESSION_NAME
656
657 do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0
658
659 # Make sure the subsequent snapshot is empty and valid.
660 lttng_snapshot_record $SESSION_NAME
661 stop_lttng_tracing_ok $SESSION_NAME
662 validate_trace_empty $TRACE_PATH
663
664 # Validate that tracing still works and subsequent snapshots are valid.
665 # Clean the output path.
666 clean_path $TRACE_PATH
667 start_lttng_tracing_ok $SESSION_NAME
668
669 # Continue over the last event.
670 touch ${file_sync_before_last}
671
672 # Wait for the before exit sync point. This ensure that we went over the
673 # last tracepoint.
674 while [ ! -f "${file_sync_before_exit_touch}" ]; do
675 sleep 0.5
676 done
677
678 # Make sure the snapshot contains the last event.
679 lttng_snapshot_record $SESSION_NAME
680 stop_lttng_tracing_ok $SESSION_NAME
681 validate_trace_count $EVENT_NAME $TRACE_PATH 1
682
683 # Release the application.
684 touch ${file_sync_before_exit}
685 wait
686 destroy_lttng_session_ok $SESSION_NAME
687
688 rm -f ${file_sync_before_last}
689 rm -f ${file_sync_before_last_touch}
690 rm -f ${file_sync_before_exit}
691 rm -f ${file_sync_before_exit_touch}
692}
693
694function test_ust_streaming_tracefile_rotation ()
695{
696 local tracing_active=$1
697 local clear_twice=$2
698 local rotate_before=$3
699 local rotate_after=$4
700 local buffer_type=$5
701 local channel_name="rotchan"
702 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
703
704 diag "Test ust streaming clear with tracefile rotation"
705 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
706 create_lttng_session_uri $SESSION_NAME net://localhost
707 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --subbuf-size=$PAGE_SIZE \
708 --tracefile-size=$PAGE_SIZE --tracefile-count=2 --buffers-$buffer_type
709 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
710 start_lttng_tracing_ok $SESSION_NAME
711 $TESTAPP_BIN -i 10
712 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
713 stop_lttng_tracing_ok $SESSION_NAME
714
715 if [[ $rotate_before -eq 1 ]]; then
716 validate_trace_count $EVENT_NAME $local_path 10
717 else
718 if [[ "$buffer_type" == "uid" ]]; then
719 validate_trace_empty $local_path
720 else # pid
721 validate_directory_empty $local_path
722 fi
723 fi
724
725 start_lttng_tracing_ok $SESSION_NAME
726 $TESTAPP_BIN -i 20
727 stop_lttng_tracing_ok
728
729 if [[ $rotate_before -eq 1 ]]; then
730 validate_trace_count $EVENT_NAME $local_path 30
731 else
732 validate_trace_count $EVENT_NAME $local_path 20
733 fi
734
735 destroy_lttng_session_ok $SESSION_NAME
736}
737
738# With 1 byte per event (as strict minimum), generating 200000 events
739# guarantees filling up 2 files of 64k in size, which is the maximum
740# page size known on Linux
741function test_ust_streaming_tracefile_rotation_overwrite_files ()
742{
743 local tracing_active=$1
744 local clear_twice=$2
745 local rotate_before=$3
746 local rotate_after=$4
747 local buffer_type=$5
748 local channel_name="rotchan"
749 local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*"
750
751 diag "Test ust streaming clear with tracefile rotation, overwrite files"
752 diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type"
753 create_lttng_session_uri $SESSION_NAME net://localhost
754 enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --subbuf-size=$PAGE_SIZE \
755 --tracefile-size=$PAGE_SIZE --tracefile-count=2 --buffers-$buffer_type
756 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name
757 start_lttng_tracing_ok $SESSION_NAME
fe1c64c5 758 taskset -c "$(get_any_available_cpu)" $TESTAPP_BIN -i 200000
c28fcefd
JR
759 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after
760 stop_lttng_tracing_ok $SESSION_NAME
761
762 if [[ $rotate_before -eq 1 ]]; then
763 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 200000
764 else
765 if [[ "$buffer_type" == "uid" ]]; then
766 validate_trace_empty $local_path
767 else # pid
768 validate_directory_empty $local_path
769 fi
770 fi
771
772 start_lttng_tracing_ok $SESSION_NAME
fe1c64c5 773 taskset -c "$(get_any_available_cpu)" $TESTAPP_BIN -i 400000
c28fcefd
JR
774 stop_lttng_tracing_ok
775
776 if [[ $rotate_before -eq 1 ]]; then
777 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 600000
778 else
779 validate_trace_count_range_incl_min_excl_max $EVENT_NAME $local_path 1 200000
780 fi
781
782 destroy_lttng_session_ok $SESSION_NAME
783}
784
785function test_ust_disallow_clear ()
786{
787 diag "Test ust disallow clear on relay daemon"
788 SESSION_NAME=$(randstring 16 0)
789
790 LTTNG_RELAYD_DISALLOW_CLEAR=1 start_lttng_relayd "-o $TRACE_PATH"
791
792 start_lttng_sessiond
793
794 create_lttng_session_uri $SESSION_NAME net://localhost
795 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
796 start_lttng_tracing_ok $SESSION_NAME
797 lttng_clear_session_fail $SESSION_NAME
798 destroy_lttng_session_ok $SESSION_NAME
799
800 stop_lttng_sessiond
801 stop_lttng_relayd
802 clean_path $TRACE_PATH
803}
804
805plan_tests $NUM_TESTS
806
807print_test_banner "$TEST_DESC"
808
809streaming_tests=(test_ust_streaming
810 test_ust_streaming_rotate_clear
811 test_ust_streaming_clear_rotate
812 test_ust_streaming_tracefile_rotation
813 test_ust_streaming_tracefile_rotation_overwrite_files
27d444d3 814 test_ust_streaming_no_event
c28fcefd
JR
815)
816
817live_tests=(test_ust_streaming_live
818 test_ust_basic_streaming_live_viewer
819 test_ust_streaming_live_viewer
60ef7bf7 820 test_ust_streaming_live_viewer_new_metadata_after_clear
c28fcefd
JR
821)
822
823local_tests=(test_ust_local
824 test_ust_local_rotate_clear
825 test_ust_local_clear_rotate
27d444d3 826 test_ust_local_no_event
c28fcefd
JR
827)
828
829snapshot_uid_tests=(test_ust_streaming_snapshot
830 test_ust_local_snapshot
831)
832
833snapshot_pid_tests=(test_ust_local_snapshot_per_pid)
834
835start_lttng_relayd "-o $TRACE_PATH"
836start_lttng_sessiond
837
838# Per-UID buffers
839
840# Clear with tracing active, clear once
841for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
842do
843 SESSION_NAME=$(randstring 16 0)
844 ${fct_test} 1 0 0 0 uid
845 clean_path $TRACE_PATH
846done
847
848# Clear with tracing active, clear twice
849for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
850do
851 SESSION_NAME=$(randstring 16 0)
852 ${fct_test} 1 1 0 0 uid
853 clean_path $TRACE_PATH
854done
855
856# Clear with tracing inactive, clear once
857for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
858do
859 SESSION_NAME=$(randstring 16 0)
860 ${fct_test} 0 0 0 0 uid
861 clean_path $TRACE_PATH
862done
863
864# Clear with tracing inactive, clear twice
865for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_uid_tests[@]};
866do
867 SESSION_NAME=$(randstring 16 0)
868 ${fct_test} 0 1 0 0 uid
869 clean_path $TRACE_PATH
870done
871
872# Clear with tracing inactive, rotate-clear once
873for fct_test in ${streaming_tests[@]} ${local_tests[@]};
874do
875 SESSION_NAME=$(randstring 16 0)
876 ${fct_test} 0 0 1 0 uid
877 clean_path $TRACE_PATH
878done
879
880# Clear with tracing inactive, clear once-rotate(fail)
881for fct_test in ${streaming_tests[@]} ${local_tests[@]};
882do
883 SESSION_NAME=$(randstring 16 0)
884 ${fct_test} 0 0 0 1 uid
885 clean_path $TRACE_PATH
886done
887
888
889# Per-PID buffers.
890
891# Clear with tracing active, clear once
892for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
893do
894 SESSION_NAME=$(randstring 16 0)
895 ${fct_test} 1 0 0 0 pid
896 clean_path $TRACE_PATH
897done
898
899# Clear with tracing active, clear twice
900for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
901do
902 SESSION_NAME=$(randstring 16 0)
903 ${fct_test} 1 1 0 0 pid
904 clean_path $TRACE_PATH
905done
906
907# Clear with tracing inactive, clear once
908for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
909do
910 SESSION_NAME=$(randstring 16 0)
911 ${fct_test} 0 0 0 0 pid
912 clean_path $TRACE_PATH
913done
914
915# Clear with tracing inactive, clear twice
916for fct_test in ${streaming_tests[@]} ${live_tests[@]} ${local_tests[@]} ${snapshot_pid_tests[@]};
917do
918 SESSION_NAME=$(randstring 16 0)
919 ${fct_test} 0 1 0 0 pid
920 clean_path $TRACE_PATH
921done
922
923# Clear with tracing inactive, rotate-clear once
924for fct_test in ${streaming_tests[@]} ${local_tests[@]};
925do
926 SESSION_NAME=$(randstring 16 0)
927 ${fct_test} 0 0 1 0 pid
928 clean_path $TRACE_PATH
929done
930
931# Clear with tracing inactive, clear once-rotate(fail)
932for fct_test in ${streaming_tests[@]} ${local_tests[@]};
933do
934 SESSION_NAME=$(randstring 16 0)
935 ${fct_test} 0 0 0 1 pid
936 clean_path $TRACE_PATH
937done
938
939stop_lttng_sessiond
940stop_lttng_relayd
941
942test_ust_disallow_clear
This page took 0.061106 seconds and 4 git commands to generate.