#!/bin/bash # # Copyright (C) - 2012 Christian Babeux # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License, version 2 only, as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., 51 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. TEST_DESC="Health check - Thread exit" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../.. LTTNG_BIN="lttng" SESSION_NAME="health_thread_exit" EVENT_NAME="bogus" HEALTH_CHECK_BIN="health_check" SESSIOND_PRELOAD=".libs/libhealthexit.so" source $TESTDIR/utils.sh print_test_banner "$TEST_DESC" if [ ! -f "$SESSIOND_PRELOAD" ]; then echo -e "libhealthexit.so not available for this test. Skipping." exit 0 fi function test_thread_exit { test_thread_exit_name="$1" test_thread_exit_code="$2" echo "" echo -e "=== Testing health failure with ${test_thread_exit_name}" # Activate testpoints export LTTNG_TESTPOINT_ENABLE=1 # Activate specific thread exit export ${test_thread_exit_name}_EXIT=1 # Spawn sessiond with preload healthexit lib export LD_PRELOAD="$CURDIR/$SESSIOND_PRELOAD" start_lttng_sessiond # Cleanup some env. var. unset LD_PRELOAD unset ${test_thread_exit_name}_EXIT # Check initial health status $CURDIR/$HEALTH_CHECK_BIN &> /dev/null echo -n "Validating thread ${test_thread_exit_name} failure... " # Wait sleep 25 # Check health status, exit code should indicate failure $CURDIR/$HEALTH_CHECK_BIN &> /dev/null health_check_exit_code=$? if [ $health_check_exit_code -eq $test_thread_exit_code ]; then print_ok stop_lttng_sessiond else print_fail echo -e "Health returned: $health_check_exit_code\n" stop_lttng_sessiond return 1 fi } THREAD=("LTTNG_THREAD_MANAGE_CLIENTS" "LTTNG_THREAD_MANAGE_APPS" "LTTNG_THREAD_REG_APPS" "LTTNG_THREAD_MANAGE_KERNEL") # Exit code value to indicate specific thread failure EXIT_CODE=(1 2 4 8) THREAD_COUNT=${#THREAD[@]} i=0 while [ "$i" -lt "$THREAD_COUNT" ]; do test_thread_exit "${THREAD[$i]}" "${EXIT_CODE[$i]}" if [ $? -eq 1 ]; then exit 1 fi let "i++" done # Special case manage consumer, need to spawn consumer via commands. #"LTTNG_THREAD_MANAGE_CONSUMER"