#!/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="Event exclusion" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../../.. LTTNG_BIN="lttng" STATS_BIN="$TESTDIR/utils/babelstats.pl" SESSION_NAME="test-exclusion" TESTAPP_PATH="$TESTDIR/utils/testapp" TESTAPP_NAME="gen-ust-nevents" TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" NR_ITER=100 NR_USEC_WAIT=1 NUM_TESTS=149 source $TESTDIR/utils/utils.sh function enable_ust_lttng_all_event_exclusion() { sess_name="$1" exclusion="$2" $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event -a -s $sess_name -u -x "$exclusion" } function run_apps { $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT } function test_exclusion { exclusions="$1" event_name_expected_to_be_missing="$2" trace_path=$(mktemp -d) # Create session create_lttng_session_ok $SESSION_NAME $trace_path enable_ust_lttng_all_event_exclusion $SESSION_NAME "$exclusions" ok $? "Enable lttng event with event \"$exclusions\" excluded" # Trace apps start_lttng_tracing_ok $SESSION_NAME run_apps stop_lttng_tracing_ok $SESSION_NAME # Destroy session destroy_lttng_session_ok $SESSION_NAME stats=`babeltrace $trace_path | $STATS_BIN --tracepoint "$event_name_expected_to_be_missing" | grep -v index` if [ ! -z "$stats" ]; then fail "Excluded event \"$event_name_expected_to_be_missing\" was found in trace!" else ok 0 "Validate trace exclusion output" rm -rf $trace_path fi } function test_exclusion_fail { event_name="$1" exclusions="$2" create_lttng_session_ok $SESSION_NAME $trace_path $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event -u "$event_name" -s $sess_name -x "$exclusions" >/dev/null 2>&1 res=$? destroy_lttng_session_ok $SESSION_NAME if [ $res -eq 0 ]; then fail "Enable LTTng event \"$event_name\" with exclusion \"$exclusions\" passes" return 1 else pass "Enable LTTng event \"$event_name\" with exclusion \"$exclusions\" fails" return 0 fi } plan_tests $NUM_TESTS print_test_banner $TEST_DESC start_lttng_sessiond test_exclusion 'tp:tptest2' 'tp:tptest2' test_exclusion 'tp:tptest3' 'tp:tptest3' test_exclusion 'tp:tptest*' 'tp:tptest1' test_exclusion 'tp:tptest*' 'tp:tptest2' test_exclusion 'tp:tptest*' 'tp:tptest3' test_exclusion 'tp:tptest*' 'tp:tptest4' test_exclusion 'tp:tptest*' 'tp:tptest5' test_exclusion 'tp*tptest*' 'tp:tptest1' test_exclusion 'tp*tptest*' 'tp:tptest2' test_exclusion 'tp*tptest*' 'tp:tptest3' test_exclusion 'tp*tptest*' 'tp:tptest4' test_exclusion 'tp*tptest*' 'tp:tptest5' test_exclusion '*test2' 'tp:tptest2' test_exclusion '*test5' 'tp:tptest5' test_exclusion '*p*test*' 'tp:tptest1' test_exclusion '*p*test*' 'tp:tptest2' test_exclusion '*p*test*' 'tp:tptest3' test_exclusion '*p***test*' 'tp:tptest4' test_exclusion '*p*test*' 'tp:tptest5' test_exclusion '*3' 'tp:tptest3' test_exclusion 'tp*test3,*2' 'tp:tptest2' test_exclusion '**tp*test3,*2' 'tp:tptest3' # Cannot use exclusions with non-globbing event name test_exclusion_fail "allo" "lol" test_exclusion_fail "allo" "meow,lol" test_exclusion_fail "allo" "z*em" # Exclusion name excludes all possible event names test_exclusion_fail "allo*" "all*" test_exclusion_fail "allo*" "ze,all*,yes" stop_lttng_sessiond