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}/..
/..
/..
18 UST_EVENT_NAME
="tp:tptest"
19 KERNEL_EVENT_NAME
="sched_switch"
20 CHANNEL_NAME
="testchan"
21 HEALTH_CHECK_BIN
="health_check"
25 source $TESTDIR/utils
/utils.sh
27 function report_errors
29 test_thread_error_string
="$1"
31 err_no_relayd_match
="Error querying relayd health"
33 # Check for health errors
34 # Include inability to contact relayd health as an expected
35 # error, since this can happen whenever the relayd shutdown due
36 # to an error in any thread.
37 out
=$
(grep "${test_thread_error_string}" ${STDOUT_PATH} |
wc -l)
38 if [ $test_relayd -ne 0 ]; then
39 outerr
=$
(grep "${err_no_relayd_match}" ${STDERR_PATH} |
wc -l)
43 if [ $out -eq 0 ] && [ $outerr -eq 0 ]; then
44 fail
"Validation failure"
45 diag
"Health returned:"
66 test_thread_error_string
="$3"
71 diag
"Test health problem detection with ${test_thread_name}"
73 # Set the socket timeout to 5 so the health check detection
75 export LTTNG_NETWORK_SOCKET_TIMEOUT
=5
76 export LTTNG_RELAYD_HEALTH
="${HEALTH_PATH}/test-health"
79 export LTTNG_TESTPOINT_ENABLE
=1
81 # Activate specific thread test
82 export ${test_thread_name}_
${test_suffix}=1
84 # Spawn sessiond with preload healthexit lib
85 export LD_PRELOAD
="$CURDIR/$SESSIOND_PRELOAD"
87 diag
"Start session daemon"
90 if [ ${test_consumerd} -eq 1 ]; then
91 create_lttng_session_no_output
$SESSION_NAME
93 diag
"With UST consumer daemons"
94 enable_ust_lttng_event_ok
$SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME
96 skip
$isroot "Root access is needed. Skipping kernel consumer health check test." "1" ||
98 diag
"With kernel consumer daemon"
99 lttng_enable_kernel_event
$SESSION_NAME $KERNEL_EVENT_NAME $CHANNEL_NAME
101 start_lttng_tracing_ok
$SESSION_NAME
104 if [ ${test_relayd} -eq 1 ]; then
105 diag
"With relay daemon"
106 RELAYD_ARGS
="--relayd-path=${LTTNG_RELAYD_HEALTH}"
108 start_lttng_relayd
"-o $TRACE_PATH"
113 # Check health status, not caring about result
114 $CURDIR/$HEALTH_CHECK_BIN ${RELAYD_ARGS} \
118 diag
"Check after running for ${SLEEP_TIME} seconds"
121 # Check health status
122 $CURDIR/$HEALTH_CHECK_BIN ${RELAYD_ARGS} \
123 > ${STDOUT_PATH} 2> ${STDERR_PATH}
126 if [ ${test_needs_root} -eq 1 ]; then
127 skip
${isroot} "Root access needed for test \"${test_thread_name}\"." "1" ||
129 report_errors
"${test_thread_error_string}" "${test_relayd}"
132 report_errors
"${test_thread_error_string}" "${test_relayd}"
135 if [ ${test_relayd} -eq 1 ]; then
136 # We may fail to stop relayd here, and this is OK, since
137 # it may have been killed volountarily by testpoint.
138 stop_lttng_relayd_notap
$KILL_SIGNAL
140 stop_lttng_consumerd
$KILL_SIGNAL
141 stop_lttng_sessiond
$KILL_SIGNAL
143 unset LTTNG_TESTPOINT_ENABLE
144 unset ${test_thread_name}_
${test_suffix}
146 unset LTTNG_NETWORK_SOCKET_TIMEOUT
147 unset LTTNG_RELAYD_HEALTH
150 plan_tests
$NUM_TESTS
152 print_test_banner
"$TEST_DESC"
154 if [ -f "$CURDIR/$SESSIOND_PRELOAD" ]; then
160 skip
$foundobj "No shared object generated. Skipping all tests." $NUM_TESTS && exit 0
162 THREAD
=("LTTNG_SESSIOND_THREAD_MANAGE_CLIENTS"
163 "LTTNG_SESSIOND_THREAD_MANAGE_APPS"
164 "LTTNG_SESSIOND_THREAD_REG_APPS"
165 "LTTNG_SESSIOND_THREAD_HT_CLEANUP"
166 "LTTNG_SESSIOND_THREAD_APP_MANAGE_NOTIFY"
167 "LTTNG_SESSIOND_THREAD_APP_REG_DISPATCH"
168 "LTTNG_SESSIOND_THREAD_MANAGE_KERNEL"
170 "LTTNG_CONSUMERD_THREAD_CHANNEL"
171 "LTTNG_CONSUMERD_THREAD_METADATA"
172 "LTTNG_CONSUMERD_THREAD_METADATA_TIMER"
174 "LTTNG_RELAYD_THREAD_DISPATCHER"
175 "LTTNG_RELAYD_THREAD_WORKER"
176 "LTTNG_RELAYD_THREAD_LISTENER"
177 "LTTNG_RELAYD_THREAD_LIVE_DISPATCHER"
178 "LTTNG_RELAYD_THREAD_LIVE_WORKER"
179 "LTTNG_RELAYD_THREAD_LIVE_LISTENER"
183 "Thread \"Session daemon command\" is not responding in component \"sessiond\"."
184 "Thread \"Session daemon application manager\" is not responding in component \"sessiond\"."
185 "Thread \"Session daemon application registration\" is not responding in component \"sessiond\"."
186 "Thread \"Session daemon hash table cleanup\" is not responding in component \"sessiond\"."
187 "Thread \"Session daemon application notification manager\" is not responding in component \"sessiond\"."
188 "Thread \"Session daemon application registration dispatcher\" is not responding in component \"sessiond\"."
189 "Thread \"Session daemon kernel\" is not responding in component \"sessiond\"."
191 "Thread \"Consumer daemon channel\" is not responding"
192 "Thread \"Consumer daemon metadata\" is not responding"
193 "Thread \"Consumer daemon metadata timer\" is not responding"
195 "Thread \"Relay daemon dispatcher\" is not responding in component \"relayd\"."
196 "Thread \"Relay daemon worker\" is not responding in component \"relayd\"."
197 "Thread \"Relay daemon listener\" is not responding in component \"relayd\"."
198 "Thread \"Relay daemon live dispatcher\" is not responding in component \"relayd\"."
199 "Thread \"Relay daemon live worker\" is not responding in component \"relayd\"."
200 "Thread \"Relay daemon live listener\" is not responding in component \"relayd\"."
204 # "LTTNG_SESSIOND_THREAD_MANAGE_CONSUMER"
205 # "Thread \"Session daemon manage consumer\" is not responding in component \"sessiond\"."
207 # TODO: test kernel consumerd specifically in addition to UST consumerd
209 # TODO: need refactoring of consumerd teardown
210 # "LTTNG_CONSUMERD_THREAD_SESSIOND"
211 # "Thread \"Consumer daemon session daemon command manager\" is not responding"
213 # TODO: this thread is responsible for close a file descriptor that
214 # triggers teardown of metadata thread. We should revisit teardown of
216 # "LTTNG_CONSUMERD_THREAD_DATA"
217 # "Thread \"Consumer daemon data\" is not responding"
282 STDOUT_PATH
=$
(mktemp
)
283 STDERR_PATH
=$
(mktemp
)
284 TRACE_PATH
=$
(mktemp
-d)
285 HEALTH_PATH
=$
(mktemp
-d)
287 if [ "$(id -u)" == "0" ]; then
293 THREAD_COUNT
=${#THREAD[@]}
295 while [ "$i" -lt "$THREAD_COUNT" ]; do
296 test_health
"${TEST_SUFFIX}" \
298 "${ERROR_STRING[$i]}" \
299 "${NEEDS_ROOT[$i]}" \
300 "${TEST_CONSUMERD[$i]}" \
305 rm -rf ${HEALTH_PATH}