* 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

Reply via email to