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