* tests/syntax.sh: New file. * filtering_syscall-syntax.test: Likewise. * tests/qual_fault-syntax.test: Move syscall set syntax testing to filtering_syscall-syntax.test. * tests/qual_inject-syntax.test: Likewise. * tests/options-syntax.test: Likewise. Move check_* functions to syntax.sh. * tests/Makefile.am (MISC_TESTS): Add filtering_syscall-syntax.test. (EXTRA_DIST): Add syntax.sh. --- tests/Makefile.am | 2 + tests/filtering_syscall-syntax.test | 75 ++++++++++++++++++++++++++++++++++ tests/options-syntax.test | 69 +------------------------------ tests/qual_fault-syntax.test | 17 +------- tests/qual_inject-syntax.test | 18 +-------- tests/syntax.sh | 81 +++++++++++++++++++++++++++++++++++++ 6 files changed, 161 insertions(+), 101 deletions(-) create mode 100755 tests/filtering_syscall-syntax.test create mode 100644 tests/syntax.sh
diff --git a/tests/Makefile.am b/tests/Makefile.am index 5687a8d..d6306d0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -248,6 +248,7 @@ MISC_TESTS = \ detach-sleeping.test \ detach-stopped.test \ filter-unavailable.test \ + filtering_syscall-syntax.test \ get_regs.test \ interactive_block.test \ ksysent.test \ @@ -347,6 +348,7 @@ EXTRA_DIST = \ strace.supp \ struct_flock.c \ sun_path.expected \ + syntax.sh \ trace_fstat.in \ trace_fstatfs.in \ trace_lstat.in \ diff --git a/tests/filtering_syscall-syntax.test b/tests/filtering_syscall-syntax.test new file mode 100755 index 0000000..8436b8f --- /dev/null +++ b/tests/filtering_syscall-syntax.test @@ -0,0 +1,75 @@ +#!/bin/sh +# +# Check syscall set parsing syntax. +# +# Copyright (c) 2016-2017 Dmitry V. Levin <l...@altlinux.org> +# 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_syscall() +{ + check_e "invalid system call '$1'" -e trace="$2" + check_e "invalid system call '$1'" -e abbrev="$2" + check_e "invalid system call '$1'" -e verbose="$2" +} + +# invalid syscall +for arg in '' , ,, ,,, \! % \!, \ + invalid_syscall_name \ + -1 -2 -3 -4 -5\ + 32767 \ + 2147483647 \ + 2147483648 \ + 4294967295 \ + 4294967296 \ + /non_syscall \ + %not_a_class \ + ; do + check_syscall "$arg" "$arg" +done + +# invalid syscall, multiple syscall +for arg in file,nonsense \ + \!desc,nonsense \ + chdir,nonsense \ + \!chdir,nonsense \ + 1,nonsense \ + \!1,nonsense \ + ; do + check_syscall "nonsense" "$arg" +done + +# special cases +check_syscall "!" 1,\! +check_syscall "!open" 1,\!open +check_syscall "none" 1,none +check_syscall "all" 1,all + +check_e_using_grep 'regcomp: \+id: [[:alpha:]].+' -e trace='/+id' +check_e_using_grep 'regcomp: \*id: [[:alpha:]].+' -e trace='/*id' +check_e_using_grep 'regcomp: \{id: [[:alpha:]].+' -e trace='/{id' +check_e_using_grep 'regcomp: \(id: [[:alpha:]].+' -e trace='/(id' +check_e_using_grep 'regcomp: \[id: [[:alpha:]].+' -e trace='/[id' diff --git a/tests/options-syntax.test b/tests/options-syntax.test index 7cfc579..47f6b66 100755 --- a/tests/options-syntax.test +++ b/tests/options-syntax.test @@ -28,57 +28,7 @@ # (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=.}/init.sh" - -check_exit_status_and_stderr() -{ - $STRACE "$@" 2> "$LOG" && - dump_log_and_fail_with \ - "strace $* failed to handle the error properly" - match_diff "$LOG" "$EXP" || - dump_log_and_fail_with \ - "strace $* failed to print expected diagnostics" -} - -check_exit_status_and_stderr_using_grep() -{ - $STRACE "$@" 2> "$LOG" && - dump_log_and_fail_with \ - "strace $* failed to handle the error properly" - match_grep "$LOG" "$EXP" || - dump_log_and_fail_with \ - "strace $* failed to print expected diagnostics" -} - -strace_exp="${STRACE##* }" - -check_e() -{ - local pattern="$1"; shift - cat > "$EXP" << __EOF__ -$strace_exp: $pattern -__EOF__ - check_exit_status_and_stderr "$@" -} - -check_e_using_grep() -{ - local pattern="$1"; shift - cat > "$EXP" << __EOF__ -$strace_exp: $pattern -__EOF__ - check_exit_status_and_stderr_using_grep "$@" -} - -check_h() -{ - local pattern="$1"; shift - cat > "$EXP" << __EOF__ -$strace_exp: $pattern -Try '$strace_exp -h' for more information. -__EOF__ - check_exit_status_and_stderr "$@" -} +. "${srcdir=.}/syntax.sh" check_e "Invalid process id: '0'" -p 0 check_e "Invalid process id: '-42'" -p -42 @@ -87,17 +37,6 @@ check_e "Invalid process id: 'a'" -p 1,a check_e "Syscall 'chdir' for -b isn't supported" -b chdir check_e "Syscall 'chdir' for -b isn't supported" -b execve -b chdir -check_e "invalid system call '-1'" -e-1 -check_e "invalid system call '-2'" -e -2 -check_e "invalid system call '-3'" -etrace=-3 -check_e "invalid system call '-4'" -e trace=-4 -check_e "invalid system call '-5'" -e trace=1,-5 -check_e "invalid system call '/non_syscall'" -e trace=/non_syscall -check_e "invalid system call '2147483647'" -e 2147483647 -check_e "invalid system call '2147483648'" -e 2147483648 -check_e "invalid system call '4294967295'" -e 4294967295 -check_e "invalid system call '4294967296'" -e 4294967296 - check_e "invalid descriptor '-1'" -eread=-1 check_e "invalid descriptor '-42'" -ewrite=-42 check_e "invalid descriptor '2147483648'" -eread=2147483648 @@ -109,12 +48,6 @@ check_e "invalid descriptor '!'" -ewrite='!' check_e "invalid descriptor '!'" -eread='0,!' check_e "invalid descriptor '!,'" -ewrite='!,' -check_e_using_grep 'regcomp: \+id: [[:alpha:]].+' -e trace='/+id' -check_e_using_grep 'regcomp: \*id: [[:alpha:]].+' -e trace='/*id' -check_e_using_grep 'regcomp: \{id: [[:alpha:]].+' -e trace='/{id' -check_e_using_grep 'regcomp: \(id: [[:alpha:]].+' -e trace='/(id' -check_e_using_grep 'regcomp: \[id: [[:alpha:]].+' -e trace='/[id' - check_h 'must have PROG [ARGS] or -p PID' check_h 'PROG [ARGS] must be specified with -D' -D -p $$ check_h '-c and -C are mutually exclusive' -c -C true diff --git a/tests/qual_fault-syntax.test b/tests/qual_fault-syntax.test index 0cce539..384fcff 100755 --- a/tests/qual_fault-syntax.test +++ b/tests/qual_fault-syntax.test @@ -40,16 +40,7 @@ fail_with() "strace -e fault=$* failed to handle an argument error properly" } -for arg in '' , ,, ,,, : :: ::: \! \!, \!: \ - invalid_syscall_name \ - invalid_syscall_name:when=3 \ - -1 \!-1 \ - -1:when=4 \ - -2 \ - -2:when=5 \ - 32767 \!32767 \ - 32767:when=6 \ - chdir:42 \!chdir:42 \ +for arg in chdir:42 \!chdir:42 \ chdir:42:when=7 \ chdir:invalid \ chdir:invalid:when=8 \ @@ -92,12 +83,6 @@ for arg in '' , ,, ,,, : :: ::: \! \!, \!: \ chdir:when=65536:error=30 \ chdir:when=1+65536 \ chdir:when=1+65536:error=31 \ - file,nonsense \ - \!desc,nonsense \ - chdir,nonsense \ - \!chdir,nonsense \ - 1,nonsense \ - \!1,nonsense \ chdir:retval=0 \ chdir:signal=1 \ chdir:error=1:error=2 \ diff --git a/tests/qual_inject-syntax.test b/tests/qual_inject-syntax.test index a9e44d7..83638b1 100755 --- a/tests/qual_inject-syntax.test +++ b/tests/qual_inject-syntax.test @@ -40,17 +40,7 @@ fail_with() "strace -e inject=$* failed to handle an argument error properly" } -for arg in '' , ,, ,,, : :: ::: \! \!, \!: \ - invalid_syscall_name \ - invalid_syscall_name:when=3 \ - -1 \!-1 \ - -1:when=4 \ - -2 \ - -2:when=5 \ - 32767 \!32767 \ - 32767:when=6 \ - 42 \ - chdir \ +for arg in chdir chdir: chdir:: \ chdir:42 \!chdir:42 \ chdir:42:when=7 \ chdir:invalid \ @@ -94,12 +84,6 @@ for arg in '' , ,, ,,, : :: ::: \! \!, \!: \ chdir:when=65536:error=30 \ chdir:when=1+65536 \ chdir:when=1+65536:error=31 \ - file,nonsense \ - \!desc,nonsense \ - chdir,nonsense \ - \!chdir,nonsense \ - 1,nonsense \ - \!1,nonsense \ chdir:retval=-1 \ chdir:signal=0 \ chdir:signal=129 \ diff --git a/tests/syntax.sh b/tests/syntax.sh new file mode 100644 index 0000000..0a0d2a5 --- /dev/null +++ b/tests/syntax.sh @@ -0,0 +1,81 @@ +#!/bin/sh +# +# Define syntax testing primitives. +# +# Copyright (c) 2016 Dmitry V. Levin <l...@altlinux.org> +# Copyright (c) 2016-2017 The strace developers. +# 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=.}/init.sh" + +check_exit_status_and_stderr() +{ + $STRACE "$@" 2> "$LOG" && + dump_log_and_fail_with \ + "strace $* failed to handle the error properly" + match_diff "$LOG" "$EXP" || + dump_log_and_fail_with \ + "strace $* failed to print expected diagnostics" +} + +check_exit_status_and_stderr_using_grep() +{ + $STRACE "$@" 2> "$LOG" && + dump_log_and_fail_with \ + "strace $* failed to handle the error properly" + match_grep "$LOG" "$EXP" || + dump_log_and_fail_with \ + "strace $* failed to print expected diagnostics" +} + +strace_exp="${STRACE##* }" + +check_e() +{ + local pattern="$1"; shift + cat > "$EXP" << __EOF__ +$strace_exp: $pattern +__EOF__ + check_exit_status_and_stderr "$@" +} + +check_e_using_grep() +{ + local pattern="$1"; shift + cat > "$EXP" << __EOF__ +$strace_exp: $pattern +__EOF__ + check_exit_status_and_stderr_using_grep "$@" +} + +check_h() +{ + local pattern="$1"; shift + cat > "$EXP" << __EOF__ +$strace_exp: $pattern +Try '$strace_exp -h' for more information. +__EOF__ + check_exit_status_and_stderr "$@" +} -- 2.1.4 ------------------------------------------------------------------------------ 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