1 # Copyright (C) - 2012 Christian Babeux <christian.babeux@efficios.com>
2 # Copyright (C) - 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 # This program is free software; you can redistribute it and/or modify it
5 # under the terms of the GNU General Public License, version 2 only, as
6 # published by the Free Software Foundation.
8 # This program is distributed in the hope that it will be useful, but WITHOUT
9 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 # You should have received a copy of the GNU General Public License along with
14 # this program; if not, write to the Free Software Foundation, Inc., 51
15 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 TESTDIR
=${CURDIR}/..
/..
/..
19 UST_EVENT_NAME
="tp:tptest"
20 KERNEL_EVENT_NAME
="sched_switch"
21 CHANNEL_NAME
="testchan"
22 HEALTH_CHECK_BIN
="health_check"
26 source $TESTDIR/utils
/utils.sh
28 if [ ! -f "$CURDIR/$SESSIOND_PRELOAD" ]; then
29 BAIL_OUT
"${CURDIR}/${SESSIOND_PRELOAD} is missing."
32 function lttng_create_session_uri
34 # Create session with default path
35 $TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN create
$SESSION_NAME \
36 -U net
://localhost
>/dev
/null
2>&1
37 ok $?
"Create session with default path"
40 function report_errors
42 test_thread_error_string
="$1"
44 err_no_relayd_match
="Error querying relayd health"
46 # Check for health errors
47 # Include inability to contact relayd health as an expected
48 # error, since this can happen whenever the relayd shutdown due
49 # to an error in any thread.
50 out
=$
(grep "${test_thread_error_string}" ${STDOUT_PATH} |
wc -l)
51 if [ $test_relayd -ne 0 ]; then
52 outerr
=$
(grep "${err_no_relayd_match}" ${STDERR_PATH} |
wc -l)
56 if [ $out -eq 0 ] && [ $outerr -eq 0 ]; then
57 fail
"Validation failure"
58 diag
"Health returned:"
79 test_thread_error_string
="$3"
84 diag
"Test health problem detection with ${test_thread_name}"
86 # Set the socket timeout to 5 so the health check detection
88 export LTTNG_NETWORK_SOCKET_TIMEOUT
=5
89 export LTTNG_RELAYD_HEALTH
="${HEALTH_PATH}/test-health"
92 export LTTNG_TESTPOINT_ENABLE
=1
94 # Activate specific thread test
95 export ${test_thread_name}_
${test_suffix}=1
97 # Spawn sessiond with preload healthexit lib
98 export LD_PRELOAD
="$CURDIR/$SESSIOND_PRELOAD"
100 diag
"Start session daemon"
103 if [ ${test_consumerd} -eq 1 ]; then
104 create_lttng_session_no_output
$SESSION_NAME
106 diag
"With UST consumer daemons"
107 enable_ust_lttng_event_ok
$SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME
109 skip
$isroot "Root access is needed. Skipping kernel consumer health check test." "1" ||
111 diag
"With kernel consumer daemon"
112 lttng_enable_kernel_event
$SESSION_NAME $KERNEL_EVENT_NAME $CHANNEL_NAME
114 start_lttng_tracing_ok
$SESSION_NAME
117 if [ ${test_relayd} -eq 1 ]; then
118 diag
"With relay daemon"
119 RELAYD_ARGS
="--relayd-path=${LTTNG_RELAYD_HEALTH}"
121 start_lttng_relayd
"-o $TRACE_PATH"
126 # Check health status, not caring about result
127 $CURDIR/$HEALTH_CHECK_BIN ${RELAYD_ARGS} \
131 diag
"Check after running for ${SLEEP_TIME} seconds"
134 # Check health status
135 $CURDIR/$HEALTH_CHECK_BIN ${RELAYD_ARGS} \
136 > ${STDOUT_PATH} 2> ${STDERR_PATH}
139 if [ ${test_needs_root} -eq 1 ]; then
140 skip
${isroot} "Root access needed for test \"${test_thread_name}\"." "1" ||
142 report_errors
"${test_thread_error_string}" "${test_relayd}"
145 report_errors
"${test_thread_error_string}" "${test_relayd}"
148 if [ ${test_relayd} -eq 1 ]; then
149 # We may fail to stop relayd here, and this is OK, since
150 # it may have been killed volountarily by testpoint.
151 stop_lttng_relayd_notap
155 unset LTTNG_TESTPOINT_ENABLE
156 unset ${test_thread_name}_
${test_suffix}
158 unset LTTNG_NETWORK_SOCKET_TIMEOUT
159 unset LTTNG_RELAYD_HEALTH
162 plan_tests
$NUM_TESTS
164 print_test_banner
"$TEST_DESC"
166 THREAD
=("LTTNG_SESSIOND_THREAD_MANAGE_CLIENTS"
167 "LTTNG_SESSIOND_THREAD_MANAGE_APPS"
168 "LTTNG_SESSIOND_THREAD_REG_APPS"
169 "LTTNG_SESSIOND_THREAD_HT_CLEANUP"
170 "LTTNG_SESSIOND_THREAD_APP_MANAGE_NOTIFY"
171 "LTTNG_SESSIOND_THREAD_APP_REG_DISPATCH"
172 "LTTNG_SESSIOND_THREAD_MANAGE_KERNEL"
174 "LTTNG_CONSUMERD_THREAD_CHANNEL"
175 "LTTNG_CONSUMERD_THREAD_METADATA"
176 "LTTNG_CONSUMERD_THREAD_METADATA_TIMER"
178 "LTTNG_RELAYD_THREAD_DISPATCHER"
179 "LTTNG_RELAYD_THREAD_WORKER"
180 "LTTNG_RELAYD_THREAD_LISTENER"
181 "LTTNG_RELAYD_THREAD_LIVE_DISPATCHER"
182 "LTTNG_RELAYD_THREAD_LIVE_WORKER"
183 "LTTNG_RELAYD_THREAD_LIVE_LISTENER"
187 "Thread \"Session daemon command\" is not responding in component \"sessiond\"."
188 "Thread \"Session daemon application manager\" is not responding in component \"sessiond\"."
189 "Thread \"Session daemon application registration\" is not responding in component \"sessiond\"."
190 "Thread \"Session daemon hash table cleanup\" is not responding in component \"sessiond\"."
191 "Thread \"Session daemon application notification manager\" is not responding in component \"sessiond\"."
192 "Thread \"Session daemon application registration dispatcher\" is not responding in component \"sessiond\"."
193 "Thread \"Session daemon kernel\" is not responding in component \"sessiond\"."
195 "Thread \"Consumer daemon channel\" is not responding"
196 "Thread \"Consumer daemon metadata\" is not responding"
197 "Thread \"Consumer daemon metadata timer\" is not responding"
199 "Thread \"Relay daemon dispatcher\" is not responding in component \"relayd\"."
200 "Thread \"Relay daemon worker\" is not responding in component \"relayd\"."
201 "Thread \"Relay daemon listener\" is not responding in component \"relayd\"."
202 "Thread \"Relay daemon live dispatcher\" is not responding in component \"relayd\"."
203 "Thread \"Relay daemon live worker\" is not responding in component \"relayd\"."
204 "Thread \"Relay daemon live listener\" is not responding in component \"relayd\"."
208 # "LTTNG_SESSIOND_THREAD_MANAGE_CONSUMER"
209 # "Thread \"Session daemon manage consumer\" is not responding in component \"sessiond\"."
211 # TODO: test kernel consumerd specifically in addition to UST consumerd
213 # TODO: need refactoring of consumerd teardown
214 # "LTTNG_CONSUMERD_THREAD_SESSIOND"
215 # "Thread \"Consumer daemon session daemon command manager\" is not responding"
217 # TODO: this thread is responsible for close a file descriptor that
218 # triggers teardown of metadata thread. We should revisit teardown of
220 # "LTTNG_CONSUMERD_THREAD_DATA"
221 # "Thread \"Consumer daemon data\" is not responding"
286 STDOUT_PATH
=$
(mktemp
)
287 STDERR_PATH
=$
(mktemp
)
288 TRACE_PATH
=$
(mktemp
-d)
289 HEALTH_PATH
=$
(mktemp
-d)
291 if [ "$(id -u)" == "0" ]; then
297 THREAD_COUNT
=${#THREAD[@]}
299 while [ "$i" -lt "$THREAD_COUNT" ]; do
300 test_health
"${TEST_SUFFIX}" \
302 "${ERROR_STRING[$i]}" \
303 "${NEEDS_ROOT[$i]}" \
304 "${TEST_CONSUMERD[$i]}" \
309 rm -rf ${HEALTH_PATH}