Tests: Add periodical flush fast regression test
[lttng-tools.git] / tests / regression / ust / periodical-metadata-flush / test_periodical_metadata_flush
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
17 TEST_DESC="UST tracer - Tracing with per UID buffers and periodical flush"
18
19 CURDIR=$(dirname $0)/
20 TESTDIR=$CURDIR/../../..
21 NR_ITER=100
22 SESSION_NAME="periodical-flush"
23 EVENT_NAME="ust_gen_nevents:tptest"
24 BIN_NAME="gen-nevents"
25 NUM_TESTS=38
26
27 source $TESTDIR/utils/utils.sh
28
29 if [ ! -x "$CURDIR/gen-nevents" ]; then
30 BAIL_OUT "No UST nevents binary detected."
31 fi
32
33 # MUST set TESTDIR before calling those functions
34
35 function enable_channel_per_uid()
36 {
37 local sess_name=$1
38 local channel_name=$2
39
40 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name >/dev/null 2>&1
41 ok $? "Enable channel $channel_name per UID for session $sess_name"
42 }
43
44 function enable_metadata_per_uid()
45 {
46 local sess_name=$1
47 local channel_name="metadata"
48
49 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name --switch-timer 200000 >/dev/null 2>&1
50 ok $? "Enable channel $channel_name per UID for session $sess_name"
51 }
52
53 function enable_metadata_per_pid()
54 {
55 local sess_name=$1
56 local channel_name="metadata"
57
58 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-pid -u $channel_name -s $sess_name --switch-timer 200000 >/dev/null 2>&1
59 ok $? "Enable channel $channel_name per PID for session $sess_name"
60 }
61
62 function wait_apps
63 {
64 diag "Waiting for applications to end..."
65 while [ -n "$(pidof $BIN_NAME)" ]; do
66 sleep 1
67 done
68 }
69
70 test_after_app_pid() {
71 local out
72
73 diag "Start application AFTER tracing is started"
74
75 # BEFORE application is spawned
76 create_lttng_session $SESSION_NAME $TRACE_PATH
77 enable_metadata_per_pid $SESSION_NAME
78 enable_ust_lttng_channel $SESSION_NAME "channel0"
79 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME
80 start_lttng_tracing $SESSION_NAME
81
82 ./$CURDIR/$BIN_NAME $NR_ITER
83 ok $? "Start application to trace"
84
85 stop_lttng_tracing $SESSION_NAME
86 destroy_lttng_session $SESSION_NAME
87
88 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
89
90 return $?
91 }
92
93 test_before_app_pid() {
94 local out
95
96 diag "Start application BEFORE tracing is started"
97
98 ./$CURDIR/$BIN_NAME $NR_ITER &
99 ok $? "Start application to trace"
100
101 # BEFORE application is spawned
102 create_lttng_session $SESSION_NAME $TRACE_PATH
103 enable_metadata_per_pid $SESSION_NAME
104 enable_ust_lttng_channel $SESSION_NAME "channel0"
105 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME
106 start_lttng_tracing $SESSION_NAME
107
108 # At least hit one event
109 sleep 2
110
111 stop_lttng_tracing $SESSION_NAME
112 destroy_lttng_session $SESSION_NAME
113
114 out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l)
115 if [ $out -eq 0 ]; then
116 fail "Trace validation"
117 diag "No event(s) found. We are supposed to have at least one."
118 out=1
119 else
120 pass "Trace validation"
121 diag "Found $out event(s). Coherent."
122 out=0
123 fi
124
125 wait_apps
126
127 return $out
128 }
129
130 test_after_app_uid() {
131 local out
132
133 diag "Start application AFTER tracing is started"
134
135 # BEFORE application is spawned
136 create_lttng_session $SESSION_NAME $TRACE_PATH
137 enable_metadata_per_uid $SESSION_NAME
138 enable_channel_per_uid $SESSION_NAME "channel0"
139 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME
140 start_lttng_tracing $SESSION_NAME
141
142 ./$CURDIR/$BIN_NAME $NR_ITER
143 ok $? "Start application to trace"
144
145 stop_lttng_tracing $SESSION_NAME
146 destroy_lttng_session $SESSION_NAME
147
148 trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH
149
150 return $?
151 }
152
153 test_before_app_uid() {
154 local out
155
156 diag "Start application BEFORE tracing is started"
157
158 ./$CURDIR/$BIN_NAME $NR_ITER &
159 ok $? "Start application to trace"
160
161 # BEFORE application is spawned
162 create_lttng_session $SESSION_NAME $TRACE_PATH
163 enable_metadata_per_uid $SESSION_NAME
164 enable_channel_per_uid $SESSION_NAME "channel0"
165 enable_ust_lttng_event $SESSION_NAME $EVENT_NAME
166 start_lttng_tracing $SESSION_NAME
167
168 # At least hit one event
169 sleep 2
170
171 stop_lttng_tracing $SESSION_NAME
172 destroy_lttng_session $SESSION_NAME
173
174 out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l)
175 if [ $out -eq 0 ]; then
176 fail "Trace validation"
177 diag "No event(s) found. We are supposed to have at least one."
178 out=1
179 else
180 pass "Trace validation"
181 diag "Found $out event(s). Coherent."
182 out=0
183 fi
184
185 wait_apps
186
187 return $out
188 }
189
190 # MUST set TESTDIR before calling those functions
191 plan_tests $NUM_TESTS
192
193 print_test_banner "$TEST_DESC"
194
195 TESTS=(
196 "test_before_app_uid"
197 "test_after_app_uid"
198 "test_before_app_pid"
199 "test_after_app_pid"
200 )
201
202 TEST_COUNT=${#TESTS[@]}
203 i=0
204
205 start_lttng_sessiond
206
207 while [ $i -lt $TEST_COUNT ]; do
208 TRACE_PATH=$(mktemp -d)
209 ${TESTS[$i]}
210 #rm -rf $TRACE_PATH
211 let "i++"
212 done
213
214 stop_lttng_sessiond
This page took 0.034623 seconds and 5 git commands to generate.