Tests: use babeltrace2 for all tests
[lttng-tools.git] / tests / regression / ust / periodical-metadata-flush / test_periodical_metadata_flush
CommitLineData
a788a3ed
DG
1#!/bin/bash
2#
9d16b343 3# Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
a788a3ed 4#
9d16b343
MJ
5# SPDX-License-Identifier: LGPL-2.1-only
6
a788a3ed
DG
7TEST_DESC="UST tracer - Tracing with per UID buffers and periodical flush"
8
9CURDIR=$(dirname $0)/
10TESTDIR=$CURDIR/../../..
11NR_ITER=100
b688191f
CB
12NR_USEC_WAIT=100000
13TESTAPP_PATH="$TESTDIR/utils/testapp"
14TESTAPP_NAME="gen-ust-events"
15TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
a788a3ed 16SESSION_NAME="periodical-flush"
b688191f 17EVENT_NAME="tp:tptest"
a788a3ed
DG
18BIN_NAME="gen-nevents"
19NUM_TESTS=38
33e55711 20APP_TMP_FILE=$(mktemp --tmpdir -u tmp.test_periodical_metadata_flush_ust_app_tmp_file.XXXXXX)
c7613334 21APPS_PID=
a788a3ed
DG
22
23source $TESTDIR/utils/utils.sh
24
b688191f
CB
25if [ ! -x "$TESTAPP_BIN" ]; then
26 BAIL_OUT "No UST events binary detected."
a788a3ed
DG
27fi
28
29# MUST set TESTDIR before calling those functions
30
31function enable_channel_per_uid()
32{
33 local sess_name=$1
34 local channel_name=$2
35
a055228d 36 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name --switch-timer 100000 >/dev/null 2>&1
dd770530
DG
37 ok $? "Enable channel $channel_name per UID for session $sess_name"
38}
39
40function enable_channel_per_pid()
41{
42 local sess_name=$1
43 local channel_name=$2
44
a055228d 45 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-pid -u $channel_name -s $sess_name --switch-timer 100000 >/dev/null 2>&1
a788a3ed
DG
46 ok $? "Enable channel $channel_name per UID for session $sess_name"
47}
48
49function enable_metadata_per_uid()
50{
51 local sess_name=$1
52 local channel_name="metadata"
53
54 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name --switch-timer 200000 >/dev/null 2>&1
55 ok $? "Enable channel $channel_name per UID for session $sess_name"
56}
57
58function enable_metadata_per_pid()
59{
60 local sess_name=$1
61 local channel_name="metadata"
62
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"
65}
66
dd770530
DG
67function validate_trace()
68{
69 local out
70
c125de8f 71 out=$("$BABELTRACE_BIN" $TRACE_PATH | grep $EVENT_NAME | wc -l)
dd770530
DG
72 if [ $out -eq 0 ]; then
73 fail "Trace validation"
74 diag "No event(s) found. We are supposed to have at least one."
75 out=1
76 else
77 pass "Trace validation"
78 diag "Found $out event(s). Coherent."
79 out=0
80 fi
81
82 return $out
83}
84
8c93562f
DG
85function check_app_tmp_file()
86{
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
90 sleep 0.5
91 done
92 diag "Removing test app temporary file $APP_TMP_FILE"
93 rm -f $APP_TMP_FILE
94}
95
96function start_trace_app()
97{
98 # Start application with a temporary file.
6c4a91d6 99 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT --sync-after-first-event $APP_TMP_FILE &
c7613334
MD
100 ret=$?
101 APPS_PID="${APPS_PID} ${!}"
102 ok $ret "Start application to trace"
8c93562f
DG
103}
104
105function start_check_trace_app()
106{
107 start_trace_app
108 check_app_tmp_file
109}
110
c7613334
MD
111
112function wait_trace_apps()
113{
114 for p in ${APPS_PID}; do
115 wait ${p} 2>/dev/null
116 done
117 APPS_PID=
118}
119
a788a3ed
DG
120test_after_app_pid() {
121 local out
122
c7613334
MD
123 APPS_PID=
124
a788a3ed
DG
125 diag "Start application AFTER tracing is started"
126
bf6ae429 127 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
a788a3ed 128 enable_metadata_per_pid $SESSION_NAME
dd770530 129 enable_channel_per_pid $SESSION_NAME "channel0"
c4926bb5 130 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
e563bbdb 131 start_lttng_tracing_ok $SESSION_NAME
a788a3ed 132
a055228d 133 # Start application after tracing
8c93562f
DG
134 start_check_trace_app
135 # After this point we are sure that at least one event has been hit.
a055228d
MD
136
137 # Make sure the application does not generate any more data,
138 # thus ensuring that we are not flushing a packet concurrently
139 # with validate_trace.
c7613334
MD
140 for p in ${APPS_PID}; do
141 kill -s SIGSTOP ${p}
142 done
8a251cb8
DG
143
144 # Give time to the consumer to write inflight data.
a055228d
MD
145 sleep 2
146
dd770530
DG
147 validate_trace
148 out=$?
149
c7613334
MD
150 for p in ${APPS_PID}; do
151 kill -s SIGKILL ${p}
152 wait ${p} 2>/dev/null
153 done
96340a01 154 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 155 destroy_lttng_session_ok $SESSION_NAME
a788a3ed 156
c7613334 157 wait_trace_apps
8a251cb8 158
dd770530 159 return $out
a788a3ed
DG
160}
161
162test_before_app_pid() {
163 local out
8c93562f 164 local tmp_file="/tmp/lttng_test_ust.42.file"
a788a3ed 165
c7613334
MD
166 APPS_PID=
167
a788a3ed
DG
168 diag "Start application BEFORE tracing is started"
169
8c93562f 170 start_trace_app
a788a3ed 171
a055228d 172 # Start application before tracing
bf6ae429 173 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
a788a3ed 174 enable_metadata_per_pid $SESSION_NAME
dd770530 175 enable_channel_per_pid $SESSION_NAME "channel0"
c4926bb5 176 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
e563bbdb 177 start_lttng_tracing_ok $SESSION_NAME
a788a3ed 178
8c93562f
DG
179 check_app_tmp_file
180 # Let the application at least perform a flush!
a788a3ed 181 sleep 2
a055228d
MD
182
183 # Make sure the application does not generate any more data,
184 # thus ensuring that we are not flushing a packet concurrently
185 # with validate_trace.
c7613334
MD
186 for p in ${APPS_PID}; do
187 kill -s SIGSTOP ${p}
188 done
8a251cb8
DG
189
190 # Give time to the consumer to write inflight data.
a055228d
MD
191 sleep 2
192
dd770530
DG
193 validate_trace
194 out=$?
a788a3ed 195
c7613334
MD
196 for p in ${APPS_PID}; do
197 kill -s SIGKILL ${p}
198 wait ${p} 2>/dev/null
199 done
200
96340a01 201 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 202 destroy_lttng_session_ok $SESSION_NAME
a788a3ed 203
c7613334 204 wait_trace_apps
a788a3ed
DG
205
206 return $out
207}
208
209test_after_app_uid() {
210 local out
211
c7613334
MD
212 APPS_PID=
213
a788a3ed
DG
214 diag "Start application AFTER tracing is started"
215
bf6ae429 216 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
a788a3ed
DG
217 enable_metadata_per_uid $SESSION_NAME
218 enable_channel_per_uid $SESSION_NAME "channel0"
c4926bb5 219 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
e563bbdb 220 start_lttng_tracing_ok $SESSION_NAME
a788a3ed 221
a055228d 222 # Start application after tracing
8c93562f
DG
223 start_check_trace_app
224 # After this point we are sure that at least one event has been hit.
a055228d
MD
225
226 # Make sure the application does not generate any more data,
227 # thus ensuring that we are not flushing a packet concurrently
228 # with validate_trace.
c7613334
MD
229 for p in ${APPS_PID}; do
230 kill -s SIGSTOP ${p}
231 done
232
8a251cb8
DG
233
234 # Give time to the consumer to write inflight data.
a055228d
MD
235 sleep 2
236
dd770530
DG
237 validate_trace
238 out=$?
239
c7613334
MD
240 for p in ${APPS_PID}; do
241 kill -s SIGKILL ${p}
242 wait ${p} 2>/dev/null
243 done
96340a01 244 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 245 destroy_lttng_session_ok $SESSION_NAME
a788a3ed 246
c7613334 247 wait_trace_apps
8a251cb8 248
dd770530 249 return $out
a788a3ed
DG
250}
251
252test_before_app_uid() {
253 local out
254
c7613334
MD
255 APPS_PID=
256
a788a3ed
DG
257 diag "Start application BEFORE tracing is started"
258
8a251cb8 259 # Start application before tracing
8c93562f 260 start_trace_app
a788a3ed 261
bf6ae429 262 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
a788a3ed
DG
263 enable_metadata_per_uid $SESSION_NAME
264 enable_channel_per_uid $SESSION_NAME "channel0"
c4926bb5 265 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
e563bbdb 266 start_lttng_tracing_ok $SESSION_NAME
a788a3ed 267
8c93562f
DG
268 check_app_tmp_file
269 # Let the application at least perform a flush!
a788a3ed 270 sleep 2
a055228d
MD
271
272 # Make sure the application does not generate any more data,
273 # thus ensuring that we are not flushing a packet concurrently
274 # with validate_trace.
c7613334
MD
275 for p in ${APPS_PID}; do
276 kill -s SIGSTOP ${p}
277 done
8a251cb8
DG
278
279 # Give time to the consumer to write inflight data.
a055228d
MD
280 sleep 2
281
dd770530
DG
282 validate_trace
283 out=$?
a788a3ed 284
c7613334
MD
285 for p in ${APPS_PID}; do
286 kill -s SIGKILL ${p}
287 wait ${p} 2>/dev/null
288 done
96340a01 289 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 290 destroy_lttng_session_ok $SESSION_NAME
a788a3ed 291
c7613334 292 wait_trace_apps
a788a3ed
DG
293
294 return $out
295}
296
297# MUST set TESTDIR before calling those functions
298plan_tests $NUM_TESTS
299
300print_test_banner "$TEST_DESC"
c125de8f 301bail_out_if_no_babeltrace
a788a3ed
DG
302
303TESTS=(
304 "test_before_app_uid"
305 "test_after_app_uid"
306 "test_before_app_pid"
307 "test_after_app_pid"
308)
309
310TEST_COUNT=${#TESTS[@]}
311i=0
312
313start_lttng_sessiond
314
315while [ $i -lt $TEST_COUNT ]; do
33e55711 316 TRACE_PATH=$(mktemp --tmpdir -d tmp.test_periodical_metadata_flush_ust_trace_path.XXXXXX)
a788a3ed 317 ${TESTS[$i]}
2345b91f 318 rm -rf $TRACE_PATH
a788a3ed
DG
319 let "i++"
320done
321
322stop_lttng_sessiond
This page took 0.056652 seconds and 4 git commands to generate.