3 # Copyright (C) 2015 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
4 # Copyright (C) 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 # SPDX-License-Identifier: LGPL-2.1-only
8 TEST_DESC
="UST - Blocking mode"
11 TESTDIR
=$CURDIR/..
/..
/..
12 SESSION_NAME
="blocking"
13 CHANNEL_NAME
="testchan"
15 TESTAPP_PATH
="$TESTDIR/utils/testapp"
16 TESTAPP_NAME
="gen-ust-events"
17 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
18 EVENT_NAME
="tp:tptest"
22 # shellcheck source=../utils/utils.sh
23 source "$TESTDIR/utils/utils.sh"
25 # MUST set TESTDIR before calling those functions
26 # Run app on a single CPU to ensure we only write in a single ring buffer.
29 taskset
--cpu-list "$(get_any_available_cpu)" $TESTAPP_BIN -i $NUM_EVENT
30 ok $?
"Application done"
33 function check_disk_space
()
38 kb_free
=$
(df
-k -P "${path}" |
tail -n 1 |
awk '{ print $4 }')
39 if [ "${kb_free}" -lt "1048576" ] ; then
46 function test_ust_implicit_no_blocking
()
49 diag
"UST implicit non-blocking mode (default): will hang if fails"
52 # session in no-output mode
53 create_lttng_session_no_output
$SESSION_NAME
54 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME"
55 start_lttng_tracing_ok
$SESSION_NAME
57 stop_lttng_tracing_ok
$SESSION_NAME
58 destroy_lttng_session_ok
$SESSION_NAME
64 function test_ust_implicit_no_blocking_with_channel_blocking
()
67 diag
"UST implicit non-blocking mode (default) with blocking-timeout=inf channel: will hang if fails"
70 # session in no-output mode
71 create_lttng_session_no_output
$SESSION_NAME
72 enable_ust_lttng_channel_ok
$SESSION_NAME $CHANNEL_NAME "--blocking-timeout=inf"
73 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME
74 start_lttng_tracing_ok
$SESSION_NAME
76 stop_lttng_tracing_ok
$SESSION_NAME
77 destroy_lttng_session_ok
$SESSION_NAME
83 function test_ust_timeout_no_blocking
()
86 diag
"UST 1ms timeout blocking mode: will hang if fails"
89 # session in no-output mode
90 create_lttng_session_no_output
$SESSION_NAME
91 # blocking timeout 1ms
92 enable_ust_lttng_channel_ok
$SESSION_NAME $CHANNEL_NAME "--blocking-timeout=1000"
93 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME
94 start_lttng_tracing_ok
$SESSION_NAME
95 LTTNG_UST_ALLOW_BLOCKING
=1 run_app
96 stop_lttng_tracing_ok
$SESSION_NAME
97 destroy_lttng_session_ok
$SESSION_NAME
103 function test_ust_snapshot_no_blocking
()
106 diag
"UST blocking mode: don't block in snapshot mode"
108 # Test without the plugin
110 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH --snapshot
111 # blocking timeout 1ms
112 enable_ust_lttng_channel_ok
$SESSION_NAME $CHANNEL_NAME "--blocking-timeout=1000"
113 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME
114 start_lttng_tracing_ok
$SESSION_NAME
115 LTTNG_UST_ALLOW_BLOCKING
=1 run_app
116 stop_lttng_tracing_ok
$SESSION_NAME
117 destroy_lttng_session_ok
$SESSION_NAME
123 function test_ust_blocking_no_discard
()
126 diag
"UST blocking mode: no event discarded"
128 # Test without the plugin
130 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
131 # infinite blocking timeout
132 enable_ust_lttng_channel_ok
$SESSION_NAME $CHANNEL_NAME "--blocking-timeout=inf"
133 enable_ust_lttng_event_ok
$SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME
134 start_lttng_tracing_ok
$SESSION_NAME
135 LTTNG_UST_ALLOW_BLOCKING
=1 run_app
136 stop_lttng_tracing_ok
$SESSION_NAME
137 discarded
=$
("${XML_EXTRACT}" <("${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}" --mi=xml list --channel="${CHANNEL_NAME}" "${SESSION_NAME}") '//lttng:command/lttng:output/lttng:sessions/lttng:session/lttng:domains/lttng:domain/lttng:channels/lttng:channel/lttng:attributes/lttng:discarded_events')
138 destroy_lttng_session_ok
$SESSION_NAME
141 test "$(echo "${discarded}" | grep -Eo '[0-9]+')" = "0"
142 ok $?
"No event lost with UST blocking mode: ${discarded}"
145 plan_tests
$NUM_TESTS
147 print_test_banner
"$TEST_DESC"
149 bail_out_if_no_babeltrace
151 if ! check_disk_space
"${TMPDIR:-/tmp}"; then
152 BAIL_OUT
"Not enough free space to run blocking tests"
156 "test_ust_implicit_no_blocking"
157 "test_ust_implicit_no_blocking_with_channel_blocking"
158 "test_ust_timeout_no_blocking"
159 "test_ust_snapshot_no_blocking"
160 "test_ust_blocking_no_discard"
163 TEST_COUNT
=${#TESTS[@]}
166 while [ "$i" -lt "$TEST_COUNT" ]; do
168 TRACE_PATH
=$
(mktemp
-d -t tmp.test_blocking_ust_trace_path.XXXXXX
)