[PATCH v7 1/8] tests: improve syscall syntax testing
Dmitry V. Levin
ldv at altlinux.org
Sun Aug 13 00:38:48 UTC 2017
On Fri, Aug 11, 2017 at 05:43:46PM +0700, Nikolay Marchuk wrote:
> * tests/filtering_syscall-syntax.test: New file.
> * tests/syntax.sh: New file.
> * tests/options-syntax.test: Move syscall syntax testing to
> filtering_syscall-syntax.test. Move check_* functions to syntax.sh.
> * tests/Makefile.am (MISC_TESTS): Add filtering_syscall-syntax.test.
> (EXTRA_DIST): Add syntax.sh.
The commit message is out of sync with the change itself.
> ---
> tests/Makefile.am | 1 +
> tests/filtering_syscall-syntax.test | 91 +++++++++++++++++++++++++++++++++++++
> tests/options-syntax.test | 17 -------
> 3 files changed, 92 insertions(+), 17 deletions(-)
> create mode 100755 tests/filtering_syscall-syntax.test
>
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index f038226e..6b90d710 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -257,6 +257,7 @@ MISC_TESTS = \
> detach-stopped.test \
> filter-unavailable.test \
> fflush.test \
> + filtering_syscall-syntax.test \
> get_regs.test \
> interactive_block.test \
> ksysent.test \
> diff --git a/tests/filtering_syscall-syntax.test b/tests/filtering_syscall-syntax.test
> new file mode 100755
> index 00000000..698a894c
> --- /dev/null
> +++ b/tests/filtering_syscall-syntax.test
> @@ -0,0 +1,91 @@
> +#!/bin/sh
> +#
> +# Check syscall set parsing syntax.
> +#
> +# Copyright (c) 2016-2017 Dmitry V. Levin <ldv at altlinux.org>
> +# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikolay.a at 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"
> + check_e "invalid system call '$1'" -e raw="$2"
consider adding -equal=... (without space) variants, as well as
-e "$2"
[ -z "$2" ] || ... -e"$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 with inversion
> +for arg in -1 -2 -3 -4 -5 \
> + invalid_syscall_name \
> + 32767 \
> + 2147483647 \
> + 2147483648 \
> + 4294967295 \
> + 4294967296 \
> + /non_syscall \
> + % %not_a_class \
> + ; do
> + check_syscall "$arg" \!"$arg"
> +done
These two groups of tests have a lot in common.
Could you reduce the redundancy, please?
> +
> +# invalid syscall, multiple syscalls
> +for arg in file,nonsense \
> + \!desc,nonsense \
> + chdir,nonsense \
> + \!chdir,nonsense \
> + 1,nonsense \
> + \!1,nonsense \
> + ; do
> + check_syscall "nonsense" "$arg"
> +done
for arg in file desc chdir 1; do
check_syscall nonsense "$arg,nonsense"
check_syscall nonsense "!$arg,nonsense"
done
- isn't it shorter and easier to read?
> +
> +# special cases
> +check_syscall ":" \!:
Why this case is special? isn't it an "invalid syscall with inversion"?
> +check_syscall "!" 1,\!
> +check_syscall "!open" 1,\!open
> +check_syscall "none" 1,none
> +check_syscall "all" 1,all
for arg in \! \!open none all; do
check_syscall "$arg" "1,$arg"
done
- isn't it shorter and easier to read?
> +
> +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 b4d9be70..47f6b66e 100755
> --- a/tests/options-syntax.test
> +++ b/tests/options-syntax.test
> @@ -37,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
If you remove -e-1, -e -2, and -etrace=-3,
please add them or their analogues somewhere else.
--
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20170813/07bd20ea/attachment.bin>
More information about the Strace-devel
mailing list