Document test anti-patterns
[lttng-tools.git] / tests / regression / ust / periodical-metadata-flush / test_periodical_metadata_flush
CommitLineData
a788a3ed
DG
1#!/bin/bash
2#
3# Copyright (C) - 2012 David Goulet <dgoulet@efficios.com>
4#
5# This library is free software; you can redistribute it and/or modify it under
6# the terms of the GNU Lesser General Public License as published by the Free
7# Software Foundation; version 2.1 of the License.
8#
9# This library is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12# details.
13#
14# You should have received a copy of the GNU Lesser General Public License
15# along with this library; if not, write to the Free Software Foundation, Inc.,
16# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17TEST_DESC="UST tracer - Tracing with per UID buffers and periodical flush"
18
19CURDIR=$(dirname $0)/
20TESTDIR=$CURDIR/../../..
21NR_ITER=100
b688191f
CB
22NR_USEC_WAIT=100000
23TESTAPP_PATH="$TESTDIR/utils/testapp"
24TESTAPP_NAME="gen-ust-events"
25TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
a788a3ed 26SESSION_NAME="periodical-flush"
b688191f 27EVENT_NAME="tp:tptest"
a788a3ed
DG
28BIN_NAME="gen-nevents"
29NUM_TESTS=38
8c93562f 30APP_TMP_FILE="/tmp/lttng_test_ust.42.file"
a788a3ed
DG
31
32source $TESTDIR/utils/utils.sh
33
b688191f
CB
34if [ ! -x "$TESTAPP_BIN" ]; then
35 BAIL_OUT "No UST events binary detected."
a788a3ed
DG
36fi
37
38# MUST set TESTDIR before calling those functions
39
40function enable_channel_per_uid()
41{
42 local sess_name=$1
43 local channel_name=$2
44
a055228d 45 $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
46 ok $? "Enable channel $channel_name per UID for session $sess_name"
47}
48
49function enable_channel_per_pid()
50{
51 local sess_name=$1
52 local channel_name=$2
53
a055228d 54 $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
55 ok $? "Enable channel $channel_name per UID for session $sess_name"
56}
57
58function enable_metadata_per_uid()
59{
60 local sess_name=$1
61 local channel_name="metadata"
62
63 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name --switch-timer 200000 >/dev/null 2>&1
64 ok $? "Enable channel $channel_name per UID for session $sess_name"
65}
66
67function enable_metadata_per_pid()
68{
69 local sess_name=$1
70 local channel_name="metadata"
71
72 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-pid -u $channel_name -s $sess_name --switch-timer 200000 >/dev/null 2>&1
73 ok $? "Enable channel $channel_name per PID for session $sess_name"
74}
75
dd770530
DG
76function validate_trace()
77{
78 local out
79
80 out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l)
81 if [ $out -eq 0 ]; then
82 fail "Trace validation"
83 diag "No event(s) found. We are supposed to have at least one."
84 out=1
85 else
86 pass "Trace validation"
87 diag "Found $out event(s). Coherent."
88 out=0
89 fi
90
91 return $out
92}
93
8c93562f
DG
94function check_app_tmp_file()
95{
96 # Wait for the application file to appear indicating that at least one
97 # tracepoint has been fired.
98 while [ ! -f "$APP_TMP_FILE" ]; do
99 sleep 0.5
100 done
101 diag "Removing test app temporary file $APP_TMP_FILE"
102 rm -f $APP_TMP_FILE
103}
104
105function start_trace_app()
106{
107 # Start application with a temporary file.
108 $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT $APP_TMP_FILE &
109 ok $? "Start application to trace"
110}
111
112function start_check_trace_app()
113{
114 start_trace_app
115 check_app_tmp_file
116}
117
a788a3ed
DG
118test_after_app_pid() {
119 local out
120
121 diag "Start application AFTER tracing is started"
122
a788a3ed
DG
123 create_lttng_session $SESSION_NAME $TRACE_PATH
124 enable_metadata_per_pid $SESSION_NAME
dd770530 125 enable_channel_per_pid $SESSION_NAME "channel0"
447e8ad9 126 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME "channel0"
a788a3ed
DG
127 start_lttng_tracing $SESSION_NAME
128
a055228d 129 # Start application after tracing
8c93562f
DG
130 start_check_trace_app
131 # After this point we are sure that at least one event has been hit.
a055228d
MD
132
133 # Make sure the application does not generate any more data,
134 # thus ensuring that we are not flushing a packet concurrently
135 # with validate_trace.
8a251cb8
DG
136 killall -SIGSTOP -q $TESTAPP_NAME
137
138 # Give time to the consumer to write inflight data.
a055228d
MD
139 sleep 2
140
dd770530
DG
141 validate_trace
142 out=$?
143
5dca3876 144 killall -SIGKILL -q $TESTAPP_NAME
a788a3ed
DG
145 stop_lttng_tracing $SESSION_NAME
146 destroy_lttng_session $SESSION_NAME
147
5dca3876 148 wait
8a251cb8 149
dd770530 150 return $out
a788a3ed
DG
151}
152
153test_before_app_pid() {
154 local out
8c93562f 155 local tmp_file="/tmp/lttng_test_ust.42.file"
a788a3ed
DG
156
157 diag "Start application BEFORE tracing is started"
158
8c93562f 159 start_trace_app
a788a3ed 160
a055228d 161 # Start application before tracing
a788a3ed
DG
162 create_lttng_session $SESSION_NAME $TRACE_PATH
163 enable_metadata_per_pid $SESSION_NAME
dd770530 164 enable_channel_per_pid $SESSION_NAME "channel0"
447e8ad9 165 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME "channel0"
a788a3ed
DG
166 start_lttng_tracing $SESSION_NAME
167
8c93562f
DG
168 check_app_tmp_file
169 # Let the application at least perform a flush!
a788a3ed 170 sleep 2
a055228d
MD
171
172 # Make sure the application does not generate any more data,
173 # thus ensuring that we are not flushing a packet concurrently
174 # with validate_trace.
8a251cb8
DG
175 killall -SIGSTOP -q $TESTAPP_NAME
176
177 # Give time to the consumer to write inflight data.
a055228d
MD
178 sleep 2
179
dd770530
DG
180 validate_trace
181 out=$?
a788a3ed 182
5dca3876 183 killall -SIGKILL -q $TESTAPP_NAME
a788a3ed
DG
184 stop_lttng_tracing $SESSION_NAME
185 destroy_lttng_session $SESSION_NAME
186
5dca3876 187 wait
a788a3ed
DG
188
189 return $out
190}
191
192test_after_app_uid() {
193 local out
194
195 diag "Start application AFTER tracing is started"
196
a788a3ed
DG
197 create_lttng_session $SESSION_NAME $TRACE_PATH
198 enable_metadata_per_uid $SESSION_NAME
199 enable_channel_per_uid $SESSION_NAME "channel0"
1afc6e74 200 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME "channel0"
a788a3ed
DG
201 start_lttng_tracing $SESSION_NAME
202
a055228d 203 # Start application after tracing
8c93562f
DG
204 start_check_trace_app
205 # After this point we are sure that at least one event has been hit.
a055228d
MD
206
207 # Make sure the application does not generate any more data,
208 # thus ensuring that we are not flushing a packet concurrently
209 # with validate_trace.
8a251cb8
DG
210 killall -SIGSTOP -q $TESTAPP_NAME
211
212 # Give time to the consumer to write inflight data.
a055228d
MD
213 sleep 2
214
dd770530
DG
215 validate_trace
216 out=$?
217
5dca3876 218 killall -SIGKILL -q $TESTAPP_NAME
a788a3ed
DG
219 stop_lttng_tracing $SESSION_NAME
220 destroy_lttng_session $SESSION_NAME
221
5dca3876 222 wait
8a251cb8 223
dd770530 224 return $out
a788a3ed
DG
225}
226
227test_before_app_uid() {
228 local out
229
230 diag "Start application BEFORE tracing is started"
231
8a251cb8 232 # Start application before tracing
8c93562f 233 start_trace_app
a788a3ed 234
a788a3ed
DG
235 create_lttng_session $SESSION_NAME $TRACE_PATH
236 enable_metadata_per_uid $SESSION_NAME
237 enable_channel_per_uid $SESSION_NAME "channel0"
1afc6e74 238 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME "channel0"
a788a3ed
DG
239 start_lttng_tracing $SESSION_NAME
240
8c93562f
DG
241 check_app_tmp_file
242 # Let the application at least perform a flush!
a788a3ed 243 sleep 2
a055228d
MD
244
245 # Make sure the application does not generate any more data,
246 # thus ensuring that we are not flushing a packet concurrently
247 # with validate_trace.
8a251cb8
DG
248 killall -SIGSTOP -q $TESTAPP_NAME
249
250 # Give time to the consumer to write inflight data.
a055228d
MD
251 sleep 2
252
dd770530
DG
253 validate_trace
254 out=$?
a788a3ed 255
5dca3876 256 killall -SIGKILL -q $TESTAPP_NAME
a788a3ed
DG
257 stop_lttng_tracing $SESSION_NAME
258 destroy_lttng_session $SESSION_NAME
259
5dca3876 260 wait
a788a3ed
DG
261
262 return $out
263}
264
265# MUST set TESTDIR before calling those functions
266plan_tests $NUM_TESTS
267
268print_test_banner "$TEST_DESC"
269
270TESTS=(
271 "test_before_app_uid"
272 "test_after_app_uid"
273 "test_before_app_pid"
274 "test_after_app_pid"
275)
276
277TEST_COUNT=${#TESTS[@]}
278i=0
279
280start_lttng_sessiond
281
282while [ $i -lt $TEST_COUNT ]; do
283 TRACE_PATH=$(mktemp -d)
284 ${TESTS[$i]}
2345b91f 285 rm -rf $TRACE_PATH
a788a3ed
DG
286 let "i++"
287done
288
289stop_lttng_sessiond
This page took 0.044181 seconds and 5 git commands to generate.