3 # Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 TEST_DESC
="UST tracer - Tracing with per UID buffers and periodical flush"
9 CURDIR
=$
(dirname "$0")/
10 TESTDIR
="$CURDIR/../../.."
13 TESTAPP_PATH
="$TESTDIR/utils/testapp"
14 TESTAPP_NAME
="gen-ust-events"
15 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
16 SESSION_NAME
="periodical-flush"
17 EVENT_NAME
="tp:tptest"
19 APP_TMP_FILE
=$
(mktemp
-u -t tmp.test_periodical_metadata_flush_ust_app_tmp_file.XXXXXX
)
22 # shellcheck source-path=SCRIPTDIR/../../../
23 source "$TESTDIR/utils/utils.sh"
25 if [ ! -x "$TESTAPP_BIN" ]; then
26 BAIL_OUT
"No UST events binary detected."
29 # MUST set TESTDIR before calling those functions
31 function enable_channel_per_uid
()
36 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-channel
--buffers-uid -u "$channel_name" -s "$sess_name" --switch-timer 100000 >/dev
/null
2>&1
37 ok $?
"Enable channel $channel_name per UID for session $sess_name"
40 function enable_channel_per_pid
()
45 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-channel
--buffers-pid -u "$channel_name" -s "$sess_name" --switch-timer 100000 >/dev
/null
2>&1
46 ok $?
"Enable channel $channel_name per UID for session $sess_name"
49 function enable_metadata_per_uid
()
52 local channel_name
="metadata"
54 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-channel
--buffers-uid -u "$channel_name" -s "$sess_name" --switch-timer 200000 2>&1
55 ok $?
"Enable channel $channel_name per UID for session $sess_name"
58 function enable_metadata_per_pid
()
61 local channel_name
="metadata"
63 "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" enable-channel
--buffers-pid -u "$channel_name" -s "$sess_name" --switch-timer 200000 >/dev
/null
2>&1
64 ok $?
"Enable channel $channel_name per PID for session $sess_name"
67 function validate_trace
()
71 out
=$
("$BABELTRACE_BIN" "$TRACE_PATH" |
grep -c $EVENT_NAME)
72 if [ "$out" -eq 0 ]; then
73 fail
"Trace validation"
74 diag
"No event(s) found. We are supposed to have at least one."
77 pass
"Trace validation"
78 diag
"Found $out event(s). Coherent."
85 function check_app_tmp_file
()
87 # Wait for the application file to appear indicating that at least one
88 # tracepoint has been fired.
89 while [ ! -f "$APP_TMP_FILE" ]; do
92 diag
"Removing test app temporary file $APP_TMP_FILE"
96 function start_trace_app
()
98 # Start application with a temporary file.
99 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT --sync-after-first-event "$APP_TMP_FILE" &
102 ok
$ret "Start application to trace"
105 function start_check_trace_app
()
112 function wait_trace_apps
()
114 wait "${APP_PIDS[@]}" 2> /dev
/null
118 test_after_app_pid
() {
123 diag
"Start application AFTER tracing is started"
125 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
126 enable_metadata_per_pid
$SESSION_NAME
127 enable_channel_per_pid
$SESSION_NAME "channel0"
128 enable_ust_lttng_event_ok
$SESSION_NAME $EVENT_NAME "channel0"
129 start_lttng_tracing_ok
$SESSION_NAME
131 # Start application after tracing
132 start_check_trace_app
133 # After this point we are sure that at least one event has been hit.
135 # Make sure the application does not generate any more data,
136 # thus ensuring that we are not flushing a packet concurrently
137 # with validate_trace.
138 kill -s SIGSTOP
"${APP_PIDS[@]}"
140 # Give time to the consumer to write inflight data.
143 # shellcheck disable=SC2119
147 kill -s SIGKILL
"${APP_PIDS[@]}"
148 wait "${APP_PIDS[@]}" 2>/dev
/null
149 stop_lttng_tracing_ok
$SESSION_NAME
150 destroy_lttng_session_ok
$SESSION_NAME
157 test_before_app_pid
() {
162 diag
"Start application BEFORE tracing is started"
166 # Start application before tracing
167 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
168 enable_metadata_per_pid
$SESSION_NAME
169 enable_channel_per_pid
$SESSION_NAME "channel0"
170 enable_ust_lttng_event_ok
$SESSION_NAME $EVENT_NAME "channel0"
171 start_lttng_tracing_ok
$SESSION_NAME
174 # Let the application at least perform a flush!
177 # Make sure the application does not generate any more data,
178 # thus ensuring that we are not flushing a packet concurrently
179 # with validate_trace.
180 kill -s SIGSTOP
"${APP_PIDS[@]}"
182 # Give time to the consumer to write inflight data.
185 # shellcheck disable=SC2119
189 kill -s SIGKILL
"${APP_PIDS[@]}"
190 wait "${APP_PIDS[@]}" 2>/dev
/null
192 stop_lttng_tracing_ok
$SESSION_NAME
193 destroy_lttng_session_ok
$SESSION_NAME
200 test_after_app_uid
() {
205 diag
"Start application AFTER tracing is started"
207 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
208 enable_metadata_per_uid
$SESSION_NAME
209 enable_channel_per_uid
$SESSION_NAME "channel0"
210 enable_ust_lttng_event_ok
$SESSION_NAME $EVENT_NAME "channel0"
211 start_lttng_tracing_ok
$SESSION_NAME
213 # Start application after tracing
214 start_check_trace_app
215 # After this point we are sure that at least one event has been hit.
217 # Make sure the application does not generate any more data,
218 # thus ensuring that we are not flushing a packet concurrently
219 # with validate_trace.
220 kill -s SIGSTOP
"${APP_PIDS[@]}"
222 # Give time to the consumer to write inflight data.
225 # shellcheck disable=SC2119
229 kill -s SIGKILL
"${APP_PIDS[@]}"
230 wait "${APP_PIDS[@]}"
231 stop_lttng_tracing_ok
$SESSION_NAME
232 destroy_lttng_session_ok
$SESSION_NAME
239 test_before_app_uid
() {
244 diag
"Start application BEFORE tracing is started"
246 # Start application before tracing
249 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
250 enable_metadata_per_uid
$SESSION_NAME
251 enable_channel_per_uid
$SESSION_NAME "channel0"
252 enable_ust_lttng_event_ok
$SESSION_NAME $EVENT_NAME "channel0"
253 start_lttng_tracing_ok
$SESSION_NAME
256 # Let the application at least perform a flush!
259 # Make sure the application does not generate any more data,
260 # thus ensuring that we are not flushing a packet concurrently
261 # with validate_trace.
262 kill -s SIGSTOP
"${APP_PIDS[@]}"
264 # Give time to the consumer to write inflight data.
267 # shellcheck disable=SC2119
271 kill -s SIGKILL
"${APP_PIDS[@]}"
272 wait "${APP_PIDS[@]}"
273 stop_lttng_tracing_ok
$SESSION_NAME
274 destroy_lttng_session_ok
$SESSION_NAME
281 # MUST set TESTDIR before calling those functions
282 plan_tests
$NUM_TESTS
284 print_test_banner
"$TEST_DESC"
285 bail_out_if_no_babeltrace
288 "test_before_app_uid"
290 "test_before_app_pid"
294 TEST_COUNT
=${#TESTS[@]}
297 # shellcheck disable=SC2119
300 while [ $i -lt "$TEST_COUNT" ]; do
301 TRACE_PATH
=$
(mktemp
-d -t tmp.test_periodical_metadata_flush_ust_trace_path.XXXXXX
)
307 # shellcheck disable=SC2119