Fix: bytecode test should be in UST_FILTERS, not UST_STR_FILTERS
[lttng-tools.git] / tests / regression / tools / filtering / test_valid_filter
index 9a9e31c83aaea4b64f6e8e9ad18e660a1f40e1d4..cfd8de3bfbe189b994f02e2bbdf0a76a866833f6 100755 (executable)
 #!/bin/bash
 #
-# Copyright (C) 2012 Christian Babeux <christian.babeux@efficios.com>
+# Copyright (C) 2012 Christian Babeux <christian.babeux@efficios.com>
 #
-# 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.
+# SPDX-License-Identifier: GPL-2.0-only
 #
-# 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="Filtering - Valid filters"
 
 CURDIR=$(dirname $0)/
 TESTDIR=$CURDIR/../../..
-LTTNG_BIN="lttng"
-BIN_NAME="gen-ust-events"
 STATS_BIN="$TESTDIR/utils/babelstats.pl"
 SESSION_NAME="valid_filter"
-EVENT_NAME="tp:tptest"
 NR_ITER=100
-NUM_TESTS=290
+NUM_GLOBAL_TESTS=2
+NUM_UST_TESTS=1122
+NUM_KERNEL_TESTS=1056
+NUM_TESTS=$(($NUM_UST_TESTS+$NUM_KERNEL_TESTS+$NUM_GLOBAL_TESTS))
 
 source $TESTDIR/utils/utils.sh
 
-if [ ! -x "$CURDIR/$BIN_NAME" ]; then
-       BAIL_OUT "No UST nevents binary detected."
-fi
-
-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>&1 >/dev/null
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $event_name \
+                       -s $sess_name $domain --filter "$filter" 2>&1 >/dev/null
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-context \
+                       -s $sess_name $domain -t procname 2>&1 >/dev/null
 
        ok $? "Enable lttng event with filtering"
 }
 
-function run_apps
+function run_ust
 {
        ./$CURDIR/$BIN_NAME $NR_ITER >/dev/null 2>&1
 }
 
+function run_ust_str
+{
+       $TESTDIR/utils/testapp/gen-ust-nevents-str/gen-ust-nevents-str $NR_ITER \
+               hypothec \
+               hypotheca \
+               hypothecary \
+               hypothecate \
+               hypothecation \
+               hypothecator \
+               hypothecium \
+               hypothenar \
+               hypothenuse \
+               hypothermal \
+               hypothermia \
+               hypothermic \
+               hypotheses \
+               hypothesis \
+               hypothesise \
+               hypothesised \
+               hypothesises \
+               hypothesize \
+               hypothesizing \
+               hypothetic \
+               electrothermic \
+               endothermic \
+               exothermic \
+               geothermic \
+               apothecary \
+               hypothecary \
+               peccary \
+               scary \
+               actinomycosis \
+               adenohypophysis \
+               adiposis \
+               emesis \
+               emphasis \
+               conformal \
+               coseismal \
+               decimal \
+               dermal
+}
+
+function run_kernel
+{
+       # Trigger the event for 100 iterations
+       echo -n "100" > /proc/lttng-test-filter-event
+}
+
 function test_valid_filter
 {
-       filter="$1"
-       validator="$2"
+       domain_name="$1"
+       domain="$2"
+       event_name="$3"
+       filter="$4"
+       validator="$5"
 
-       diag "Test valid filter: $1"
+       diag "Test valid $domain_name filter: $filter"
 
        trace_path=$(mktemp -d)
 
@@ -62,17 +103,17 @@ function test_valid_filter
        create_lttng_session_ok $SESSION_NAME $trace_path
 
        # Enable filter
-       enable_ust_lttng_event_filter $SESSION_NAME $EVENT_NAME $filter
+       enable_lttng_event_filter $domain $SESSION_NAME "$event_name" "$filter"
 
        # Trace apps
        start_lttng_tracing_ok $SESSION_NAME
-       run_apps
-       stop_lttng_tracing $SESSION_NAME
+       run_$domain_name
+       stop_lttng_tracing_ok $SESSION_NAME
 
        # Destroy session
-       destroy_lttng_session $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
 
-       stats=`babeltrace $trace_path | $STATS_BIN --tracepoint $EVENT_NAME`
+       stats=`babeltrace $trace_path | $STATS_BIN --tracepoint $event_name`
 
        rm -rf $trace_path
 
@@ -115,11 +156,13 @@ function validator_intfield
        validate_min_max "$stats" "netintfieldhex" "0x1" "0x63"
        status=$(($status|$?))
 
-       validate_min_max "$stats" "floatfield" "2222" "2222"
-       status=$(($status|$?))
+       if [ $KERNEL_CHECK -eq 0 ]; then
+               validate_min_max "$stats" "floatfield" "2222" "2222"
+               status=$(($status|$?))
 
-       validate_min_max "$stats" "doublefield" "2" "2"
-       status=$(($status|$?))
+               validate_min_max "$stats" "doublefield" "2" "2"
+               status=$(($status|$?))
+       fi
 
        return $status
 }
@@ -150,6 +193,11 @@ function validator_has_no_event
        fi
 }
 
+function validator_str_has_no_event
+{
+       validator_has_no_event "$1"
+}
+
 function validator_has_events
 {
        stats="$1"
@@ -161,6 +209,28 @@ function validator_has_events
        return $status
 }
 
+function validator_str_has_events
+{
+       stats="$1"
+       status=0
+
+       echo $stats | grep -q str
+       status=$(($status|$?))
+
+       return $status
+}
+
+function validator_stringfield_has_events
+{
+       stats="$1"
+       status=0
+
+       echo $stats | grep -q stringfield
+       status=$(($status|$?))
+
+       return $status
+}
+
 function validator_intfield_ge
 {
        stats="$1"
@@ -311,11 +381,13 @@ function validator_true_statement
        validate_min_max "$stats" "netintfieldhex" "0x0" "0x63"
        status=$(($status|$?))
 
-       validate_min_max "$stats" "floatfield" "2222" "2222"
-       status=$(($status|$?))
+       if [ $KERNEL_CHECK -eq 0 ]; then
+               validate_min_max "$stats" "floatfield" "2222" "2222"
+               status=$(($status|$?))
 
-       validate_min_max "$stats" "doublefield" "2" "2"
-       status=$(($status|$?))
+               validate_min_max "$stats" "doublefield" "2" "2"
+               status=$(($status|$?))
+       fi
 
        validate_min_max "$stats" "stringfield" "\"test\"" "\"test\""
        status=$(($status|$?))
@@ -330,131 +402,1090 @@ plan_tests $NUM_TESTS
 
 print_test_banner "$TEST_DESC"
 
-IFS=$'\n'
-
 issue_356_filter="intfield > 0 && intfield > 1 && "
 issue_356_filter+="intfield > 2 && intfield > 3 && "
 issue_356_filter+="intfield > 4 && intfield > 5 && "
 issue_356_filter+="intfield > 6 && intfield > 7 && "
 issue_356_filter+="intfield > 8 || intfield > 0"
 
-# One to one mapping between filters and validators
+start_lttng_sessiond
+
+### UST TESTS
+
+BIN_NAME="gen-ust-events"
+
+KIRK_KRAUSS_TESTS=(
+       # the tests below were written by Kirk Krauss in this article:
+       # http://www.drdobbs.com/architecture-and-design/matching-wildcards-an-empirical-way-to-t/240169123
+
+       str_has_events
+       '"abcccd" == "*ccd"'
+
+       str_has_events
+       '"mississipissippi" == "*issip*ss*"'
+
+       str_has_no_event
+       '"xxxx\*zzzzzzzzy\*f" == "xxxx*zzy*fffff"'
+
+       str_has_events
+       '"xxxx\*zzzzzzzzy\*f" == "xxx*zzy*f"'
 
-FILTERS=("intfield"                                                     #1
-        "intfield > 1"                                                 #2
-        "intfield >= 1"                                                #3
-        "intfield < 2"                                                 #4
-        "intfield <= 2"                                                #5
-        "intfield == 1"                                                #6
-        "intfield != 99"                                               #7
-        "!intfield"                                                    #8
-        "-intfield"                                                    #9
-        "--intfield"                                                   #10
-        "+intfield"                                                    #11
-        "++intfield"                                                   #12
-        "intfield > 1 && longfield > 42"                               #13
-        "intfield >= 42 && longfield <= 42"                            #14
-        "intfield < 1 || longfield > 98"                               #15
-        "(stringfield == \"test\" || intfield != 10) && intfield > 33" #16
-        "intfield < 42.4242424242"                                     #17
-        "\"test\" == \"test\""                                         #18 #Issue #342
-        "stringfield == \"test\""                                      #19
-        "stringfield == \"t*\""                                        #20
-        "stringfield == \"*\""                                         #21
-        $issue_356_filter                                              #22 #Issue #356
-        "intfield < 0xDEADBEEF"                                        #23
-        "intfield < 0x2"                                               #24
-        "intfield < 02"                                                #25
-        "stringfield2 == \"\\\*\""                                     #26
-        "1.0 || intfield || 1.0"                                       #27
-        "1 < intfield"                                                 #28
-        "\$ctx.vtid == 0"                                              #29
-        "\$ctx.vtid != 0"                                              #30
-        "0 == \$ctx.vtid"                                              #31
-        "0 != \$ctx.vtid"                                              #32
-        "\$ctx.vpid == 0"                                              #33
-        "\$ctx.vpid != 0"                                              #34
-        "0 == \$ctx.vpid"                                              #35
-        "0 != \$ctx.vpid"                                              #36
-        "\$ctx.procname != \"$BIN_NAME\""                              #37
-        "\$ctx.procname == \"$BIN_NAME\""                              #38
-        "\"$BIN_NAME\" != \$ctx.procname"                              #39
-        "\"$BIN_NAME\" == \$ctx.procname"                              #40
-        "\$ctx.procname != \"$BIN_NAME*\""                             #41
-        "\$ctx.procname == \"$BIN_NAME*\""                             #42
-        "\"$BIN_NAME*\" != \$ctx.procname"                             #43
-        "\"$BIN_NAME*\" == \$ctx.procname"                             #44
-        "\$ctx.procname != \"*\""                                      #45
-        "\$ctx.procname == \"*\""                                      #46
-        "\"*\" != \$ctx.procname"                                      #47
-        "\"*\" == \$ctx.procname"                                      #48
+       str_has_no_event
+       '"xxxxzzzzzzzzyf" == "xxxx*zzy*fffff"'
+
+       str_has_events
+       '"xxxxzzzzzzzzyf" == "xxxx*zzy*f"'
+
+       str_has_events
+       '"xyxyxyzyxyz" == "xy*z*xyz"'
+
+       str_has_events
+       '"mississippi" == "*sip*"'
+
+       str_has_events
+       '"xyxyxyxyz" == "xy*xyz"'
+
+       str_has_events
+       '"mississippi" == "mi*sip*"'
+
+       str_has_events
+       '"ababac" == "*abac*"'
+
+       str_has_events
+       '"ababac" == "*abac*"'
+
+       str_has_events
+       '"aaazz" == "a*zz*"'
+
+       str_has_no_event
+       '"a12b12" == "*12*23"'
+
+       str_has_no_event
+       '"a12b12" == "a12b"'
+
+       str_has_events
+       '"a12b12" == "*12*12*"'
+
+       str_has_events
+       '"\*" == "*"'
+
+       str_has_events
+       '"a\*abab" == "a*b"'
+
+       str_has_events
+       '"a\*r" == "a*"'
+
+       str_has_no_event
+       '"a\*ar" == "a*aar"'
+
+       str_has_events
+       '"XYXYXYZYXYz" == "XY*Z*XYz"'
+
+       str_has_events
+       '"missisSIPpi" == "*SIP*"'
+
+       str_has_events
+       '"mississipPI" == "*issip*PI"'
+
+       str_has_events
+       '"xyxyxyxyz" == "xy*xyz"'
+
+       str_has_events
+       '"miSsissippi" == "mi*sip*"'
+
+       str_has_no_event
+       '"miSsissippi" == "mi*Sip*"'
+
+       str_has_events
+       '"abAbac" == "*Abac*"'
+
+       str_has_events
+       '"abAbac" == "*Abac*"'
+
+       str_has_events
+       '"aAazz" == "a*zz*"'
+
+       str_has_no_event
+       '"A12b12" == "*12*23"'
+
+       str_has_events
+       '"a12B12" == "*12*12*"'
+
+       str_has_events
+       '"oWn" == "*oWn*"'
+
+       str_has_events
+       '"bLah" == "bLah"'
+
+       str_has_no_event
+       '"bLah" == "bLaH"'
+
+       str_has_events
+       '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab" == "a*a*a*a*a*a*aa*aaa*a*a*b"'
+
+       str_has_events
+       '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*a*aa*aaa*fa*ga*b*"'
+
+       str_has_no_event
+       '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*a*x*aaa*fa*ga*b*"'
+
+       str_has_no_event
+       '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*aaaa*fa*ga*gggg*b*"'
+
+       str_has_events
+       '"abababababababababababababababababababaacacacacacacacadaeafagahaiajakalaaaaaaaaaaaaaaaaaffafagaagggagaaaaaaaab" == "*a*b*ba*ca*aaaa*fa*ga*ggg*b*"'
+
+       str_has_events
+       '"aaabbaabbaab" == "*aabbaa*a*"'
+
+       str_has_events
+       '"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*a*a*a*a*a*a*a*a*"'
+
+       str_has_events
+       '"aaaaaaaaaaaaaaaaa" == "*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
+
+       str_has_no_event
+       '"aaaaaaaaaaaaaaaa" == "*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*"'
+
+       str_has_no_event
+       '"abc\*abcd\*abcde\*abcdef\*abcdefg\*abcdefgh\*abcdefghi\*abcdefghij\*abcdefghijk\*abcdefghijkl\*abcdefghijklm\*abcdefghijklmn" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*"'
+
+       str_has_events
+       '"abc\*abcd\*abcde\*abcdef\*abcdefg\*abcdefgh\*abcdefghi\*abcdefghij\*abcdefghijk\*abcdefghijkl\*abcdefghijklm\*abcdefghijklmn" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*"'
+
+       str_has_no_event
+       '"abc\*abcd\*abcd\*abc\*abcd" == "abc*abc*abc*abc*abc"'
+
+       str_has_events
+       '"abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abc\*abcd" == "abc*abc*abc*abc*abc*abc*abc*abc*abc*abc*abcd"'
 )
 
-VALIDATOR=("validator_intfield"                     #1
-          "validator_intfield_gt"                  #2
-          "validator_intfield_ge"                  #3
-          "validator_intfield_lt"                  #4
-          "validator_intfield_le"                  #5
-          "validator_intfield_eq"                  #6
-          "validator_intfield_ne"                  #7
-          "validator_intfield_not"                 #8
-          "validator_intfield"                     #9
-          "validator_intfield"                     #10
-          "validator_intfield"                     #11
-          "validator_intfield"                     #12
-          "validator_intfield_gt_and_longfield_gt" #13
-          "validator_intfield_ge_and_longfield_le" #14
-          "validator_intfield_lt_or_longfield_gt"  #15
-          "validator_mixed_str_or_int_and_int"     #16
-          "validator_mixed_int_double"             #17
-          "validator_true_statement"               #18
-          "validator_true_statement"               #19
-          "validator_true_statement"               #20
-          "validator_true_statement"               #21
-          "validator_intfield"                     #22
-          "validator_true_statement"               #23
-          "validator_intfield_lt"                  #24
-          "validator_intfield_lt"                  #25
-          "validator_true_statement"               #26
-          "validator_true_statement"               #27
-          "validator_intfield_gt"                  #28
-          "validator_has_no_event"                 #29
-          "validator_has_events"                   #30
-          "validator_has_no_event"                 #31
-          "validator_has_events"                   #32
-          "validator_has_no_event"                 #33
-          "validator_has_events"                   #34
-          "validator_has_no_event"                 #35
-          "validator_has_events"                   #36
-          "validator_has_no_event"                 #36
-          "validator_has_events"                   #37
-          "validator_has_no_event"                 #38
-          "validator_has_events"                   #39
-          "validator_has_no_event"                 #41
-          "validator_has_events"                   #42
-          "validator_has_no_event"                 #43
-          "validator_has_events"                   #44
-          "validator_has_no_event"                 #45
-          "validator_has_events"                   #46
-          "validator_has_no_event"                 #47
-          "validator_has_events"                   #48
+# Set IFS to newline to facilitate array declaration
+OLDIFS="$IFS"
+IFS=$'\n'
+UST_FILTERS=(
+       intfield
+       "intfield"
+
+       intfield_gt
+       "intfield > 1"
+
+       intfield_ge
+       "intfield >= 1"
+
+       intfield_lt
+       "intfield < 2"
+
+       intfield_le
+       "intfield <= 2"
+
+       intfield_eq
+       "intfield == 1"
+
+       intfield_ne
+       "intfield != 99"
+
+       intfield_not
+       "!intfield"
+
+       intfield
+       "-intfield"
+
+       intfield
+       "--intfield"
+
+       intfield
+       "+intfield"
+
+       intfield
+       "++intfield"
+
+       intfield_gt_and_longfield_gt
+       "intfield > 1 && longfield > 42"
+
+       intfield_ge_and_longfield_le
+       "intfield >= 42 && longfield <= 42"
+
+       intfield_lt_or_longfield_gt
+       "intfield < 1 || longfield > 98"
+
+       mixed_str_or_int_and_int
+       "(stringfield == \"test\" || intfield != 10) && intfield > 33"
+
+       mixed_int_double
+       "intfield < 42.4242424242"
+
+       # Issue #342
+       true_statement
+       "\"test\" == \"test\""
+
+       true_statement
+       "stringfield == \"test\""
+
+       true_statement
+       "stringfield == \"t*\""
+
+       true_statement
+       "stringfield == \"*\""
+
+       # Issue 356
+       intfield
+       $issue_356_filter
+
+       true_statement
+       "1&1"
+
+       true_statement
+       "0|1"
+
+       true_statement
+       "0^1"
+
+       true_statement
+       "seqfield4[1]==2"
+
+       true_statement
+       "arrfield1[1]==2"
+
+       true_statement
+       "arrfield1[1]==2"
+
+       true_statement
+       "arrfield3[1]==2"
+
+       true_statement
+       "seqfield3[1]==2"
+
+       true_statement
+       "1 | (1 | (1 | 1))"
+
+       true_statement
+       "1 >= (1 >= (1 >= 1))"
+
+       true_statement
+       "(0x101 & 0x100) == 0x100"
+
+       true_statement
+       "(0x101 | 0x10100) == 0x10101"
+
+       true_statement
+       "(0xF00F0F ^ 0xFF0F00) == 0x0F000F"
+
+       true_statement
+       "(1 << 1) == 2"
+
+       true_statement
+       "(4 >> 1) == 2"
+
+       true_statement
+       "(1 << 8) == 256"
+
+       true_statement
+       "(262144 >> 16) == 4"
+
+       true_statement
+       "(~0 & 0xffff) == 0xffff"
+
+       true_statement
+       "(~0 & 0xffffffff) == 0xffffffff"
+
+       true_statement
+       "(~0 & 0xffffffffffffffff) == 0xffffffffffffffff"
+
+       true_statement
+       "-1==~0"
+
+       true_statement  # unsigned bitwise ops
+       "~0>>4==0x0fffffffffffffff"
+
+       has_no_event
+       "1<<-1"
+
+       has_no_event
+       "1<<10000"
+
+       true_statement  # comparator is signed, shift is unsigned
+       "(1<<63) < 0"
+
+       true_statement
+       "(1<<2!=4)==0"  # operator priority: shift before equality
+
+       true_statement
+       "1&3==1"        # operator priority: masks before equality
+
+       true_statement
+       "(3|1==3)==1"   # operator priority: masks before equality
+
+       true_statement
+       "(2^1==3)==1"   # operator priority: masks before equality
+
+       true_statement
+       "(1 << 32) == 4294967296"
+
+       true_statement
+       "(1 << 63) == 9223372036854775808"
+
+       true_statement
+       "(arrfield1[2] & 1) == 1"
+
+       true_statement
+       "(arrfield1[2] | 0x111000) == 0x111003"
+
+       true_statement
+       "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
+
+       true_statement
+       "(seqfield4[2] & 1) == 1"
+
+       true_statement
+       "(seqfield4[2] | 0x111000) == 0x111003"
+
+       true_statement
+       "intfield < 0xDEADBEEF"
+
+       intfield_lt
+       "intfield < 0x2"
+
+       intfield_lt
+       "intfield < 02"
+
+       true_statement
+       "stringfield2 == \"\\\*\""
+
+       true_statement
+       "1.0 || intfield || 1.0"
+
+       intfield_gt
+       "1 < intfield"
+
+       has_no_event
+       "\$ctx.vtid == 0"
+
+       has_events
+       "\$ctx.vtid != 0"
+
+       has_no_event
+       "0 == \$ctx.vtid"
+
+       has_events
+       "0 != \$ctx.vtid"
+
+       has_no_event
+       "\$ctx.vpid == 0"
+
+       has_events
+       "\$ctx.vpid != 0"
+
+       has_no_event
+       "0 == \$ctx.vpid"
+
+       has_events
+       "0 != \$ctx.vpid"
+
+       has_no_event
+       "\$ctx.procname != \"$BIN_NAME\""
+
+       has_events
+       "\$ctx.procname == \"$BIN_NAME\""
+
+       has_no_event
+       "\"$BIN_NAME\" != \$ctx.procname"
+
+       has_events
+       "\"$BIN_NAME\" == \$ctx.procname"
+
+       has_no_event
+       "\$ctx.procname != \"$BIN_NAME*\""
+
+       has_events
+       "\$ctx.procname == \"$BIN_NAME*\""
+
+       has_no_event
+       "\"$BIN_NAME*\" != \$ctx.procname"
+
+       has_events
+       "\"$BIN_NAME*\" == \$ctx.procname"
+
+       has_no_event
+       "\$ctx.procname != \"*\""
+
+       has_events
+       "\$ctx.procname == \"*\""
+
+       has_no_event
+       "\"*\" != \$ctx.procname"
+
+       has_events
+       "\"*\" == \$ctx.procname"
+
+       has_no_event
+       "!a.f.d"
+
+       has_no_event
+       "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
+
+       has_no_event
+       "\$ctx.vtid.blah == 0"
+
+       has_no_event
+       "asdf.asdfsd.sadf < 4"
+
+       has_no_event
+       "0 == \$ctx.vtid.blah"
+
+       # check that bytecode linker refuses to link against a
+       # non-string array.
+       has_no_event
+       'arrfield1 != "dontmatch"'
+
+       # check that bytecode linker refuses to link against a
+       # non-string sequence.
+       has_no_event
+       'seqfield1 != "dontmatch"'
+
+       END
 )
 
-FILTER_COUNT=${#FILTERS[@]}
+UST_STR_FILTERS=(
+       str_has_events
+       'str == "hypothecary"'
+
+       str_has_events
+       '"hypothecary" == str'
+
+       str_has_events
+       'str != "hypothecary"'
+
+       str_has_events
+       '"hypothecary" != str'
+
+       str_has_events
+       'str == "*cary"'
+
+       str_has_events
+       '"*cary" == str'
+
+       str_has_events
+       'str != "*cary"'
+
+       str_has_events
+       '"*cary" != str'
+
+       str_has_events
+       'str == "hypo*"'
+
+       str_has_events
+       '"hypo*" == str'
+
+       str_has_events
+       'str != "hypo*"'
+
+       str_has_events
+       '"hypo*" != str'
+
+       str_has_events
+       'str == "*the*"'
+
+       str_has_events
+       '"*the*" == str'
+
+       str_has_events
+       'str != "*the*"'
+
+       str_has_events
+       '"*the*" != str'
+
+       str_has_events
+       'str == "**"'
+
+       str_has_events
+       '"**" == str'
+
+       str_has_no_event
+       'str != "**"'
+
+       str_has_no_event
+       '"**" != str'
+
+       str_has_events
+       'str == "sc*"'
+
+       str_has_events
+       '"sc*" == str'
+
+       str_has_events
+       'str != "sc*"'
+
+       str_has_events
+       '"sc*" != str'
+
+       str_has_events
+       'str == "de*al"'
+
+       str_has_events
+       '"de*al" == str'
+
+       str_has_events
+       'str != "de*al"'
+
+       str_has_events
+       '"de*al" != str'
+
+       str_has_events
+       'str == "*po*siz*"'
+
+       str_has_events
+       '"*po*siz*" == str'
+
+       str_has_events
+       'str != "*po*siz*"'
+
+       str_has_events
+       '"*po*siz*" != str'
+
+       str_has_events
+       'str == "*po***siz*"'
+
+       str_has_events
+       '"*po***siz*" == str'
+
+       str_has_events
+       'str != "*po***siz*"'
+
+       str_has_events
+       '"*po***siz*" != str'
+
+       str_has_no_event
+       'str == "*po*\**siz*"'
+
+       str_has_no_event
+       '"*po*\**siz*" == str'
+
+       str_has_no_event
+       'str == "*zulu*"'
+
+       str_has_no_event
+       '"*zulu*" == str'
+
+       str_has_no_event
+       'str == "8*"'
+
+       str_has_no_event
+       '"8*" == str'
+
+       str_has_no_event
+       'str == "*8"'
+
+       str_has_no_event
+       '"*8" == str'
+
+       str_has_no_event
+       'str == "de\*al"'
+
+       str_has_no_event
+       '"de\*al" == str'
+
+       str_has_events
+       '"salut*" == "salut vous"'
+
+       str_has_events
+       '"salut*" == "salut vous*"'
+
+       str_has_events
+       '"salut vous*" == "salut*"'
+
+       ${KIRK_KRAUSS_TESTS[@]}
+
+       END
+)
+
+if [ ! -x "$CURDIR/$BIN_NAME" ]; then
+       BAIL_OUT "No UST nevents binary detected."
+fi
+
+IFS="$OLDIFS"
+
+diag "Test UST valid filters"
+
+KERNEL_CHECK=0
 i=0
+while true; do
+       validator="${UST_FILTERS[$i]}"
 
-start_lttng_sessiond
+       if [ "$validator" = END ]; then
+               break
+       fi
+
+       filter="${UST_FILTERS[$(( i + 1 ))]}"
+       test_valid_filter ust -u "tp:tptest" "$filter" "validator_$validator"
+
+       if [ $? -eq 1 ]; then
+               stop_lttng_sessiond
+               exit 1
+       fi
 
-while [ "$i" -lt "$FILTER_COUNT" ]; do
+       i=$(( i + 2 ))
+done
 
-       test_valid_filter "${FILTERS[$i]}" "${VALIDATOR[$i]}"
+i=0
+while true; do
+       validator="${UST_STR_FILTERS[$i]}"
+
+       if [ "$validator" = END ]; then
+               break
+       fi
+
+       filter="${UST_STR_FILTERS[$(( i + 1 ))]}"
+       test_valid_filter ust_str -u "tp:the_string" "$filter" "validator_$validator"
 
        if [ $? -eq 1 ]; then
                stop_lttng_sessiond
                exit 1
        fi
 
-       let "i++"
+       i=$(( i + 2 ))
 done
 
+### KERNEL TESTS
+
+BIN_NAME="test_valid_filt"     # Current script name truncated by kernel
+
+# One to one mapping between filters and validators
+# Set IFS to newline to facilitate array declaration
+OLDIFS="$IFS"
+IFS=$'\n'
+KERNEL_FILTERS=(
+       intfield
+       "intfield"
+
+       intfield_gt
+       "intfield > 1"
+
+       intfield_ge
+       "intfield >= 1"
+
+       intfield_lt
+       "intfield < 2"
+
+       intfield_le
+       "intfield <= 2"
+
+       intfield_eq
+       "intfield == 1"
+
+       intfield_ne
+       "intfield != 99"
+
+       intfield_not
+       "!intfield"
+
+       intfield
+       "-intfield"
+
+       intfield
+       "--intfield"
+
+       intfield
+       "+intfield"
+
+       intfield
+       "++intfield"
+
+       intfield_gt_and_longfield_gt
+       "intfield > 1 && longfield > 42"
+
+       intfield_ge_and_longfield_le
+       "intfield >= 42 && longfield <= 42"
+
+       intfield_lt_or_longfield_gt
+       "intfield < 1 || longfield > 98"
+
+       mixed_str_or_int_and_int
+       "(stringfield == \"test\" || intfield != 10) && intfield > 33"
+
+       has_no_event
+       "intfield < 42.4242424242"
+
+       true_statement
+       "\"test\" == \"test\""
+
+       true_statement
+       "stringfield == \"test\""
+
+       true_statement
+       "stringfield == \"t*\""
+
+       true_statement
+       "stringfield == \"*\""
+
+       intfield
+       $issue_356_filter
+
+       true_statement
+       "1&1"
+
+       true_statement
+       "0|1"
+
+       true_statement
+       "0^1"
+
+       true_statement
+       "seqfield4[1]==2"
+
+       true_statement
+       "arrfield1[1]==2"
+
+       true_statement
+       "arrfield1[1]==2"
+
+       true_statement
+       "arrfield3[1]==2"
+
+       true_statement
+       "seqfield3[1]==2"
+
+       true_statement
+       "1 | (1 | (1 | 1))"
+
+       true_statement
+       "1 >= (1 >= (1 >= 1))"
+
+       true_statement
+       "(0x101 & 0x100) == 0x100"
+
+       true_statement
+       "(0x101 | 0x10100) == 0x10101"
+
+       true_statement
+       "(0xF00F0F ^ 0xFF0F00) == 0x0F000F"
+
+       true_statement
+       "(1 << 1) == 2"
+
+       true_statement
+       "(4 >> 1) == 2"
+
+       true_statement
+       "(1 << 8) == 256"
+
+       true_statement
+       "(262144 >> 16) == 4"
+
+       true_statement
+       "(~0 & 0xffff) == 0xffff"
+
+       true_statement
+       "(~0 & 0xffffffff) == 0xffffffff"
+
+       true_statement
+       "(~0 & 0xffffffffffffffff) == 0xffffffffffffffff"
+
+       true_statement
+       "-1==~0"
+
+       true_statement  # unsigned bitwise ops
+       "~0>>4==0x0fffffffffffffff"
+
+       has_no_event
+       "1<<-1"
+
+       has_no_event
+       "1<<10000"
+
+       true_statement  # comparator is signed, shift is unsigned
+       "(1<<63) < 0"
+
+       true_statement
+       "(1<<2!=4)==0"  # operator priority: shift before equality
+
+       true_statement
+       "1&3==1"        # operator priority: masks before equality
+
+       true_statement
+       "(3|1==3)==1"   # operator priority: masks before equality
+
+       true_statement
+       "(2^1==3)==1"   # operator priority: masks before equality
+
+       true_statement
+       "(1 << 32) == 4294967296"
+
+       true_statement
+       "(1 << 63) == 9223372036854775808"
+
+       true_statement
+       "(arrfield1[2] & 1) == 1"
+
+       true_statement
+       "(arrfield1[2] | 0x111000) == 0x111003"
+
+       true_statement
+       "(arrfield1[0] | arrfield1[1] | arrfield1[2]) == 0x3"
+
+       true_statement
+       "(seqfield4[2] & 1) == 1"
+
+       true_statement
+       "(seqfield4[2] | 0x111000) == 0x111003"
+
+       true_statement
+       "intfield < 0xDEADBEEF"
+
+       intfield_lt
+       "intfield < 0x2"
+
+       intfield_lt
+       "intfield < 02"
+
+       true_statement
+       "stringfield2 == \"\\\*\""
+
+       has_no_event
+       "1.0 || intfield || 1.0"
+
+       intfield_gt
+       "1 < intfield"
+
+       has_no_event
+       "\$ctx.vtid == 0"
+
+       has_events
+       "\$ctx.vtid != 0"
+
+       has_no_event
+       "0 == \$ctx.vtid"
+
+       has_events
+       "0 != \$ctx.vtid"
+
+       has_no_event
+       "\$ctx.vpid == 0"
+
+       has_events
+       "\$ctx.vpid != 0"
+
+       has_no_event
+       "0 == \$ctx.vpid"
+
+       has_events
+       "0 != \$ctx.vpid"
+
+       has_no_event
+       "\$ctx.procname != \"$BIN_NAME\""
+
+       has_events
+       "\$ctx.procname == \"$BIN_NAME\""
+
+       has_no_event
+       "\"$BIN_NAME\" != \$ctx.procname"
+
+       has_events
+       "\"$BIN_NAME\" == \$ctx.procname"
+
+       has_no_event
+       "\$ctx.procname != \"$BIN_NAME*\""
+
+       has_events
+       "\$ctx.procname == \"$BIN_NAME*\""
+
+       has_no_event
+       "\"$BIN_NAME*\" != \$ctx.procname"
+
+       has_events
+       "\"$BIN_NAME*\" == \$ctx.procname"
+
+       has_no_event
+       "\$ctx.procname != \"*\""
+
+       has_events
+       "\$ctx.procname == \"*\""
+
+       has_no_event
+       "\"*\" != \$ctx.procname"
+
+       has_events
+       "\"*\" == \$ctx.procname"
+
+       has_no_event
+       "!a.f.d"
+
+       has_no_event
+       "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"
+
+       has_no_event
+       "\$ctx.vtid.blah == 0"
+
+       has_no_event
+       "asdf.asdfsd.sadf < 4"
+
+       has_no_event
+       "0 == \$ctx.vtid.blah"
+
+       stringfield_has_events
+       'stringfield == "test"'
+
+       stringfield_has_events
+       '"test" == stringfield'
+
+       has_no_event
+       'stringfield != "test"'
+
+       has_no_event
+       '"test" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "*st"'
+
+       stringfield_has_events
+       '"*st" == stringfield'
+
+       has_no_event
+       'stringfield != "*st"'
+
+       has_no_event
+       '"*st" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "te*"'
+
+       stringfield_has_events
+       '"te*" == stringfield'
+
+       has_no_event
+       'stringfield != "te*"'
+
+       has_no_event
+       '"te*" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "te*t"'
+
+       stringfield_has_events
+       '"te*t" == stringfield'
+
+       has_no_event
+       'stringfield != "te*t"'
+
+       has_no_event
+       '"te*t" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "tes*t"'
+
+       stringfield_has_events
+       '"tes*t" == stringfield'
+
+       has_no_event
+       'stringfield != "tes*t"'
+
+       has_no_event
+       '"tes*t" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "*test"'
+
+       stringfield_has_events
+       '"*test" == stringfield'
+
+       has_no_event
+       'stringfield != "*test"'
+
+       has_no_event
+       '"*test" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "test*"'
+
+       stringfield_has_events
+       '"test*" == stringfield'
+
+       has_no_event
+       'stringfield != "test*"'
+
+       has_no_event
+       '"test*" != stringfield'
+
+       stringfield_has_events
+       'stringfield == "*"'
+
+       stringfield_has_events
+       '"*" == stringfield'
+
+       has_no_event
+       'stringfield != "*"'
+
+       has_no_event
+       '"*" != stringfield'
+
+       has_no_event
+       'stringfield == "test*2"'
+
+       has_no_event
+       'stringfield == "2*test"'
+
+       has_no_event
+       'stringfield == "te\*st"'
+
+       has_no_event
+       'stringfield == "te*ts"'
+
+       has_no_event
+       'stringfield == "*\*test"'
+
+       has_no_event
+       'stringfield == "test\*"'
+
+       # check that bytecode linker refuses to link against a
+       # non-string array.
+       has_no_event
+       'arrfield1 != "dontmatch"'
+
+       # check that bytecode linker refuses to link against a
+       # non-string sequence.
+       has_no_event
+       'seqfield1 != "dontmatch"'
+
+       ${KIRK_KRAUSS_TESTS[@]}
+
+       END
+)
+
+IFS=$OLDIFS
+
+if [ "$(id -u)" == "0" ]; then
+       isroot=1
+else
+       isroot=0
+fi
+
+skip $isroot "Root access is needed. Skipping all kernel valid filter tests." $NUM_KERNEL_TESTS ||
+{
+       diag "Test kernel valid filters"
+
+       KERNEL_CHECK=1
+       modprobe lttng-test
+
+       i=0
+       while true; do
+               validator="${KERNEL_FILTERS[$i]}"
+
+               if [ "$validator" = END ]; then
+                       break
+               fi
+
+               filter="${KERNEL_FILTERS[$(( i + 1 ))]}"
+               test_valid_filter kernel -k "lttng_test_filter_event" "$filter" "validator_$validator"
+
+               if [ $? -eq 1 ]; then
+                       stop_lttng_sessiond
+                       exit 1
+               fi
+
+               i=$(( i + 2 ))
+       done
+
+       modprobe --remove lttng-test
+}
+
 stop_lttng_sessiond
This page took 0.036995 seconds and 4 git commands to generate.