X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Fregression%2Ftools%2Ffiltering%2Ftest_invalid_filter;h=f336f71925b378d01e301d4a89880e88a9c527f2;hp=c639ff172672b52154e8586586a7506a72340425;hb=9d16b343fb9e781fc8d8fa3c448a3f382306dd33;hpb=bf6ae429bc7bf2fefdce61e48806768dab7567d5 diff --git a/tests/regression/tools/filtering/test_invalid_filter b/tests/regression/tools/filtering/test_invalid_filter index c639ff172..f336f7192 100755 --- a/tests/regression/tools/filtering/test_invalid_filter +++ b/tests/regression/tools/filtering/test_invalid_filter @@ -1,6 +1,8 @@ #!/bin/bash # -# Copyright (C) - 2012 Christian Babeux +# Copyright (C) 2012 Christian Babeux +# +# SPDX-License-Identifier: GPL-2.0-only # # 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 @@ -19,22 +21,26 @@ TEST_DESC="Filtering - Invalid filters" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../../.. -LTTNG_BIN="lttng" SESSION_NAME="filter-invalid" EVENT_NAME="bogus" ENABLE_EVENT_STDERR="/tmp/invalid-filters-stderr" TRACE_PATH=$(mktemp -d) -NUM_TESTS=146 +NUM_GLOBAL_TESTS=2 +NUM_UST_TESTS=135 +NUM_KERNEL_TESTS=135 +NUM_TESTS=$(($NUM_UST_TESTS+$NUM_KERNEL_TESTS+$NUM_GLOBAL_TESTS)) source $TESTDIR/utils/utils.sh -function enable_ust_lttng_event_filter +function enable_lttng_event_filter { - sess_name="$1" - event_name="$2" - filter="$3" + domain="$1" + sess_name="$2" + event_name="$3" + filter="$4" - $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $event_name -s $sess_name -u --filter "$filter" 2> $ENABLE_EVENT_STDERR 1> /dev/null + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $event_name -s $sess_name \ + $domain --filter "$filter" 2> $ENABLE_EVENT_STDERR 1> /dev/null # Enable must fail if [ $? -eq 0 ]; then @@ -48,7 +54,8 @@ function enable_ust_lttng_event_filter function test_invalid_filter { - test_invalid_filter="$1" + domain="$1" + test_invalid_filter="$2" diag "Test filter expression with invalid filter" diag "Filter: $test_invalid_filter" @@ -57,14 +64,16 @@ function test_invalid_filter create_lttng_session_ok $SESSION_NAME $TRACE_PATH # Apply filter - enable_ust_lttng_event_filter $SESSION_NAME $EVENT_NAME "$test_invalid_filter" + enable_lttng_event_filter $domain $SESSION_NAME $EVENT_NAME "$test_invalid_filter" # Destroy session - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME } function test_bytecode_limit { + domain="$1" + # Current bytecode limitation is 65536 bytes long. # Generate a huge bytecode with some perl-fu BYTECODE_LIMIT=`perl -e 'print "intfield" . " && 1" x5460'` @@ -75,16 +84,17 @@ function test_bytecode_limit create_lttng_session_ok $SESSION_NAME $TRACE_PATH # Apply filter - enable_ust_lttng_event_filter $SESSION_NAME $EVENT_NAME "$BYTECODE_LIMIT" + enable_lttng_event_filter $domain $SESSION_NAME $EVENT_NAME "$BYTECODE_LIMIT" # Destroy session - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME } plan_tests $NUM_TESTS print_test_banner "$TEST_DESC" +OLDIFS="$IFS" IFS=$'\n' INVALID_FILTERS=( # Unsupported ops @@ -92,12 +102,6 @@ INVALID_FILTERS=( "intfield/1" "intfield+1" "intfield-1" - "intfield>>1" - "intfield<<1" - "intfield&1" - "intfield|1" - "intfield^1" - "~intfield" "1+11111-3333+1" "(1+2)*(55*666)" "1+2*55*666" @@ -109,15 +113,9 @@ INVALID_FILTERS=( # Unmatched parenthesis "((((((((((((((intfield)))))))))))))" '0 || ("abc" != "def")) && (3 < 4)' - # Field dereference - "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a" "a->" "a-->a" - "a->a" "a.b.c->d.e.f+1" - "!a.f.d" - "asdf.asdfsd.sadf < 4" - "asdfasdf->asdfasdf < 2" # String can\'t be root node "\"somestring\"" # Unary op on string not allowed @@ -130,32 +128,62 @@ INVALID_FILTERS=( # Logical operator with string type not allowed "\"somestring\" || 1" "1 || \"somestring\"" - # Nesting of binary operator not allowed - "1 | (1 | (1 | 1))" - "1 > (1 > (1 > 1))" - # Exactly one chaining level under \$ctx allowed - "\$ctx.vtid.blah == 0" - "0 == \$ctx.vtid.blah" - "\$ctx.44 == 0" - "0 == \$ctx.44" "\$ctx == 0" "0 == \$ctx" # Only \$ctx is supported for now "\$global.value == 0" "0 == \$global.value" - # A wildcard should only appear as the last character in a string literal - "msg == \"my_event*_blah\"" - ) + # Cannot compare two full star globbing patterns + '"hello*world" == "yes*man"' + '"hello*world" == "yesman*"' + '"helloworld*" == "yes*man"' + # May only use != and == operators when one of them is a full + # star globbing pattern + '"hello*world" < field' + '"hello*world" <= field' + '"hello*world" >= field' + '"hello*world" > field' + '"hello*world" || field' + '"hello*world" && field' + 'field < "hello*world"' + 'field <= "hello*world"' + 'field >= "hello*world"' + 'field > "hello*world"' + 'field && "hello*world"' + 'field || "hello*world"' +) +IFS="$OLDIFS" start_lttng_sessiond -for FILTER in ${INVALID_FILTERS[@]}; -do - test_invalid_filter "$FILTER" +diag "Test UST filters" + +i=0 +while [ "$i" -lt "${#INVALID_FILTERS[@]}" ]; do + echo "${INVALID_FILTERS[$i]}" + test_invalid_filter -u "${INVALID_FILTERS[$i]}" + let "i++" done -test_bytecode_limit +test_bytecode_limit -u -unset IFS +if [ "$(id -u)" == "0" ]; then + isroot=1 +else + isroot=0 +fi + +skip $isroot "Root access is needed. Skipping all kernel invalid filter tests." $NUM_KERNEL_TESTS || +{ + diag "Test kernel filters" + i=0 + while [ "$i" -lt "${#INVALID_FILTERS[@]}" ]; do + echo "${INVALID_FILTERS[$i]}" + test_invalid_filter -k "${INVALID_FILTERS[$i]}" + let "i++" + done + + test_bytecode_limit -k +} stop_lttng_sessiond rm -f $ENABLE_EVENT_STDERR