Cleanup: tests: name all temporary files to better identify leakage
[lttng-tools.git] / tests / regression / ust / buffers-pid / test_buffers_pid
1 #!/bin/bash
2 #
3 # Copyright (C) 2012 David Goulet <dgoulet@efficios.com>
4 #
5 # SPDX-License-Identifier: LGPL-2.1-only
6
7 TEST_DESC="UST tracer - Tracing with per PID buffers"
8
9 CURDIR=$(dirname $0)/
10 TESTDIR=$CURDIR/../../..
11 NR_ITER=100
12 NR_USEC_WAIT=100000
13 SESSION_NAME="buffers-pid"
14
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"
19 NUM_TESTS=59
20
21 source $TESTDIR/utils/utils.sh
22
23 if [ ! -x "$TESTAPP_BIN" ]; then
24 BAIL_OUT "No UST events binary detected."
25 fi
26
27 # MUST set TESTDIR before calling those functions
28
29 function enable_channel_per_pid()
30 {
31 sess_name=$1
32 channel_name=$2
33
34 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-pid -u $channel_name -s $sess_name >/dev/null 2>&1
35 ok $? "Enable channel $channel_name per PID for session $sess_name"
36 }
37
38 test_after_multiple_apps() {
39 local out
40 local i
41
42 diag "Start multiple applications AFTER tracing is started"
43
44 # BEFORE application is spawned
45 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
46 enable_channel_per_pid $SESSION_NAME "channel0"
47 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
48 start_lttng_tracing_ok $SESSION_NAME
49
50 for i in `seq 1 5`; do
51 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT >/dev/null 2>&1 &
52 ok $? "Start application $i for tracing"
53 done
54 wait
55
56 stop_lttng_tracing_ok $SESSION_NAME
57 destroy_lttng_session_ok $SESSION_NAME
58
59 trace_match_only $EVENT_NAME $[NR_ITER * 5] $TRACE_PATH
60
61 return $?
62 }
63
64 test_before_multiple_apps() {
65 local out
66 local i
67 local file_sync_after_first=$(mktemp --tmpdir -u "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX")
68 local file_sync_before_last=$(mktemp --tmpdir -u "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX")
69
70 diag "Start multiple applications BEFORE tracing is started"
71
72 for i in `seq 1 5`; do
73 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \
74 --sync-after-first-event ${file_sync_after_first}_${i} \
75 --sync-before-last-event ${file_sync_before_last}_${i} >/dev/null 2>&1 &
76 ok $? "Start application $i for tracing"
77 done
78
79 # BEFORE application is spawned
80 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
81 enable_channel_per_pid $SESSION_NAME "channel0"
82 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
83 start_lttng_tracing_ok $SESSION_NAME
84
85 for i in `seq 1 5`; do
86 touch ${file_sync_before_last}_${i}
87 done
88
89 diag "Waiting for applications to end"
90 wait
91 pass "Waiting done"
92
93 stop_lttng_tracing_ok $SESSION_NAME
94 destroy_lttng_session_ok $SESSION_NAME
95
96 for i in `seq 1 5`; do
97 rm -f ${file_sync_after_first}_${i}
98 rm -f ${file_sync_before_last}_${i}
99 done
100
101 out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l)
102 if [ $out -eq 0 ]; then
103 fail "Trace validation"
104 diag "No event(s) found. We are supposed to have at least one."
105 out=1
106 else
107 pass "Trace validation"
108 diag "Found $out event(s). Coherent."
109 out=0
110 fi
111
112 return $out
113 }
114
115 test_after_app() {
116 local out
117
118 diag "Start application AFTER tracing is started"
119
120 # BEFORE application is spawned
121 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
122 enable_channel_per_pid $SESSION_NAME "channel0"
123 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
124 start_lttng_tracing_ok $SESSION_NAME
125
126 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT &
127 ok $? "Start application to trace"
128 wait
129
130 stop_lttng_tracing_ok $SESSION_NAME
131 destroy_lttng_session_ok $SESSION_NAME
132
133 trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
134
135 return $?
136 }
137
138 test_before_app() {
139 local out
140 local file_sync_after_first=$(mktemp --tmpdir -u "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX")
141 local file_sync_before_last=$(mktemp --tmpdir -u "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX")
142
143 diag "Start application BEFORE tracing is started"
144
145
146 # BEFORE application is spawned
147 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
148 enable_channel_per_pid $SESSION_NAME "channel0"
149 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
150
151 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \
152 --sync-after-first-event ${file_sync_after_first} \
153 --sync-before-last-event ${file_sync_before_last} &
154 ok $? "Start application to trace"
155
156 start_lttng_tracing_ok $SESSION_NAME
157
158 touch ${file_sync_before_last}
159
160 wait
161
162 stop_lttng_tracing_ok $SESSION_NAME
163 destroy_lttng_session_ok $SESSION_NAME
164
165 rm -f ${file_sync_after_first}
166 rm -f ${file_sync_before_last}
167
168 out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l)
169 if [ $out -eq 0 ]; then
170 fail "Trace validation"
171 diag "No event(s) found. We are supposed to have at least one."
172 out=1
173 else
174 pass "Trace validation"
175 diag "Found $out event(s). Coherent."
176 out=0
177 fi
178
179 return $out
180 }
181
182 test_multiple_channels() {
183 local out
184
185 diag "Start with multiple channels"
186
187 # BEFORE application is spawned
188 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
189 enable_channel_per_pid $SESSION_NAME "channel0"
190 enable_channel_per_pid $SESSION_NAME "channel1"
191 enable_channel_per_pid $SESSION_NAME "channel2"
192 enable_channel_per_pid $SESSION_NAME "channel3"
193 enable_channel_per_pid $SESSION_NAME "channel4"
194 # Enable event in all channels.
195 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel0 -s $SESSION_NAME -u >/dev/null 2>&1
196 ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel0"
197 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel1 -s $SESSION_NAME -u >/dev/null 2>&1
198 ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel1"
199 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel2 -s $SESSION_NAME -u >/dev/null 2>&1
200 ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel2"
201 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel3 -s $SESSION_NAME -u >/dev/null 2>&1
202 ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel3"
203 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel4 -s $SESSION_NAME -u >/dev/null 2>&1
204 ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel4"
205 start_lttng_tracing_ok $SESSION_NAME
206
207 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT &
208 ok $? "Start application to trace"
209 wait
210
211 stop_lttng_tracing_ok $SESSION_NAME
212 trace_match_only $EVENT_NAME $[NR_ITER * 5] $TRACE_PATH
213 out=$?
214
215 destroy_lttng_session_ok $SESSION_NAME
216
217 return $out
218 }
219
220 # MUST set TESTDIR before calling those functions
221 plan_tests $NUM_TESTS
222
223 print_test_banner "$TEST_DESC"
224
225 TESTS=(
226 "test_before_app"
227 "test_after_app"
228 "test_after_multiple_apps"
229 "test_before_multiple_apps"
230 "test_multiple_channels"
231 )
232
233 TEST_COUNT=${#TESTS[@]}
234 i=0
235
236 start_lttng_sessiond
237
238 while [ $i -lt $TEST_COUNT ]; do
239 TRACE_PATH=$(mktemp --tmpdir -d tmp.test_buffers_pid_trace_path.XXXXXX)
240 ${TESTS[$i]}
241 rm -rf $TRACE_PATH
242 let "i++"
243 done
244
245 stop_lttng_sessiond
This page took 0.033994 seconds and 4 git commands to generate.