* tests/filtering_action-syntax.test: New file. * tests/filtering_expression-empty.test: Likewise. * tests/filtering_expression-syntax.test: Likewise. * tests/Makefile.am (MISC_TESTS): Add new files. --- tests/Makefile.am | 3 ++ tests/filtering_action-syntax.test | 95 ++++++++++++++++++++++++++++++++++ tests/filtering_expression-empty.test | 47 +++++++++++++++++ tests/filtering_expression-syntax.test | 77 +++++++++++++++++++++++++++ 4 files changed, 222 insertions(+) create mode 100755 tests/filtering_action-syntax.test create mode 100755 tests/filtering_expression-empty.test create mode 100755 tests/filtering_expression-syntax.test
diff --git a/tests/Makefile.am b/tests/Makefile.am index 224a4e4a..44045aa9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -258,6 +258,9 @@ MISC_TESTS = \ detach-sleeping.test \ detach-stopped.test \ filter-unavailable.test \ + filtering_action-syntax.test \ + filtering_expression-empty.test \ + filtering_expression-syntax.test \ filtering_syscall-syntax.test \ fflush.test \ get_regs.test \ diff --git a/tests/filtering_action-syntax.test b/tests/filtering_action-syntax.test new file mode 100755 index 00000000..01b7c9b1 --- /dev/null +++ b/tests/filtering_action-syntax.test @@ -0,0 +1,95 @@ +#!/bin/sh +# +# Check common action syntax. +# +# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikola...@gmail.com> +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +. "${srcdir=.}/syntax.sh" + +for arg in '' ' ' ' '\ + not \ + not_action \ + notAction \ + notaction \ + ; do + check_e "invalid filter action '$arg'" -e "$arg=open" +done + +for arg in '' ' ' ' '; do + check_e "invalid filter action 'not_action'" -e "$arg"not_action= + check_e "invalid filter action 'not_action'" -e "$arg"not_action\(\) +done + +for arg in not_action \ + notAction \ + notaction \ + and "&&" \ + or "||" \ + ; do + check_e "invalid filter action '$arg'" -e "$arg(syscall open)" +done + +check_e "invalid arguments position ';':0" -e \; +check_e "invalid arguments position 'not(syscall open;)':16" -e "not(syscall open;)" +check_e "invalid arguments position 'trace((syscall open;arg))':19" \ + -e "trace((syscall open;arg))" + +check_e "missing ')' in 'not (syscall open'" -e "not (syscall open" +check_e "missing ')' in 'not (syscall open\)'" -e "not (syscall open\)" +check_e "missing ')' in 'trace(syscall open'" -e "trace(syscall open" +check_e "missing ')' in 'trace(syscall open;args'" -e "trace(syscall open;args" +check_e "missing ')' in 'trace(syscall open;args\)'" -e "trace(syscall open;args\)" + +check_e "unexpected ')' at '! syscall open)':14" -e "! syscall open)" +check_e "unexpected ')' at '!(syscall open))':15" -e "!(syscall open))" +check_e "unexpected ')' at 'trace(syscall open))':19" -e "trace(syscall open))" + +check_e "unexpected ';' at 'trace(syscall open;arg);':23" -e "trace(syscall open;arg);" +check_e "unexpected '&' at 'trace(syscall open)&':19" -e "trace(syscall open)&" +check_e "unexpected '&' at 'trace(syscall open) &':20" -e "trace(syscall open) &" + +for arg in trace \ + read \ + write \ + raw \ + abbrev \ + verbose \ + ; do + cat > "$EXP" << __EOF__ +$strace_exp: $arg action takes no arguments, ignored arguments 'no_args' +$strace_exp: must have PROG [ARGS] or -p PID +Try '$strace_exp -h' for more information. +__EOF__ + check_exit_status_and_stderr -e $arg=none:no_args + check_exit_status_and_stderr -e "$arg(syscall none;no_args)" +done + +cat > "$EXP" << __EOF__ +$strace_exp: signal action takes no arguments, ignored arguments 'no_args' +$strace_exp: must have PROG [ARGS] or -p PID +Try '$strace_exp -h' for more information. +__EOF__ +check_exit_status_and_stderr -e signal=none:no_args diff --git a/tests/filtering_expression-empty.test b/tests/filtering_expression-empty.test new file mode 100755 index 00000000..26edbfcf --- /dev/null +++ b/tests/filtering_expression-empty.test @@ -0,0 +1,47 @@ +#!/bin/sh +# +# Check simple filter-based expressions. +# +# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikola...@gmail.com> +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +. "${srcdir=.}/syntax.sh" + +echo "+++ exited with 0 +++" > "$EXP" +for arg in "syscall none" \ + "not syscall all" \ + "syscall all and not syscall all" \ + "syscall all and not syscall all or syscall none" \ + "(syscall all and not syscall all) or syscall none" \ + "not syscall all and (syscall all or syscall none)" \ + "not syscall all and (syscall all or syscall chdir)" \ + "syscall none and not syscall all" \ + "syscall none or not syscall all" \ + ; do + run_strace -e "$arg" true + match_diff "$LOG" "$EXP" + run_strace -e "trace($arg)" true + match_diff "$LOG" "$EXP" +done diff --git a/tests/filtering_expression-syntax.test b/tests/filtering_expression-syntax.test new file mode 100755 index 00000000..f3da49a5 --- /dev/null +++ b/tests/filtering_expression-syntax.test @@ -0,0 +1,77 @@ +#!/bin/sh +# +# Check filter-based expression syntax. +# +# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikola...@gmail.com> +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +. "${srcdir=.}/syntax.sh" + +check_expression() +{ + for action in trace \ + inject \ + fault \ + read \ + write \ + raw \ + abbrev \ + verbose \ + ; do + check_e "$1" -e "$action($2)" + done +} + +check_expression "invalid operator at 'or (syscall open)':1" "or (syscall open)" +check_expression "invalid operator at '||(syscall open)':1" "||(syscall open)" +check_expression "invalid operator at 'and (syscall open)':2" "and (syscall open)" +check_expression "invalid operator at '&&(syscall open)':1" "&&(syscall open)" +check_expression "invalid operator at 'syscall open not syscall close':12" \ + "syscall open not syscall close" +check_expression "invalid operator at 'syscall open ! syscall close':10" \ + "syscall open ! syscall close" + +for arg in notsyscall \ + not_syscall \ + notSyscall \ + invalid \ + ; do + check_expression "invalid filter '$arg'" "$arg open" + check_expression "invalid filter '$arg'" "syscall open and $arg open" + check_expression "invalid filter '$arg'" "syscall open or $arg open" +done +check_expression "invalid filter 'not_'" "not_ syscall open" + +for arg in "syscall " \ + "(syscall)" \ + "syscall open or" \ + "syscall open or not" \ + "syscall open or syscall" \ + ; do + check_expression "unfinished filter expression '$arg'" "$arg" +done + +check_expression "stack overflow (expression is too complex)" \ + "(((((((((((((((((((((((((((((((((syscall open)))))))))))))))))))))))))))))))))" -- 2.11.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel