#!/bin/bash # # Copyright (C) 2012 Christian Babeux # # SPDX-License-Identifier: GPL-2.0-only # TEST_DESC="Event exclusion" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../../.. 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=178 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 -u "tp:*" -s $sess_name -x "$exclusion" > /dev/null } function run_apps { $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT >/dev/null 2>&1 ok $? "Running test application" } # Testing for the absence of an event when testing exclusion is tricky. An # event could be absent because our exclusion mechanism works but also because # the event was not generate in the first place. This function test the ability # of our test suite to generate events. function dry_run { trace_path=$(mktemp -d) # Create session create_lttng_session_ok $SESSION_NAME $trace_path $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event -u "tp:*" -s $SESSION_NAME > /dev/null ok $? "Enabling events without exclusion" # Trace apps start_lttng_tracing_ok $SESSION_NAME run_apps stop_lttng_tracing_ok $SESSION_NAME nb_events=$(babeltrace $trace_path | wc -l) if [ "$nb_events" -ne "0" ]; then ok 0 "Events were found during the dry run without exclusion" else fail "No events were found during the dry run without exclusion" fi rm -rf $trace_path # Destroy session destroy_lttng_session_ok $SESSION_NAME } 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 2> /dev/null` 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 diag "Enable event without exclusion" dry_run diag "Enable event with exclusion" 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' diag "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" diag "Exclusion name excludes all possible event names" test_exclusion_fail "allo*" "all*" test_exclusion_fail "allo*" "ze,all*,yes" stop_lttng_sessiond