From: Dmitry V. Levin Date: Tue, 16 Jan 2018 04:34:25 +0000 (+0000) Subject: tests: improve syscall set syntax testing X-Git-Tag: v4.21~139 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=114c7d3e80661f5e2c1ff4f2db091c73562c9b0d;p=strace tests: improve syscall set syntax testing * tests/filtering_syscall-syntax.test: New file. * tests/options-syntax.test: Move syscall set syntax testing to filtering_syscall-syntax.test. * tests/qual_fault-syntax.test: Likewise. * tests/qual_inject-syntax.test: Likewise. * tests/Makefile.am (MISC_TESTS): Add filtering_syscall-syntax.test. Co-authored-by: Nikolay Marchuk --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 10e9b463..daaf4091 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -277,6 +277,7 @@ MISC_TESTS = \ detach-sleeping.test \ detach-stopped.test \ filter-unavailable.test \ + filtering_syscall-syntax.test \ fflush.test \ get_regs.test \ interactive_block.test \ diff --git a/tests/filtering_syscall-syntax.test b/tests/filtering_syscall-syntax.test new file mode 100755 index 00000000..8fda8dc2 --- /dev/null +++ b/tests/filtering_syscall-syntax.test @@ -0,0 +1,121 @@ +#!/bin/sh +# +# Check syscall set parsing syntax. +# +# Copyright (c) 2016-2018 Dmitry V. Levin +# Copyright (c) 2017 Nikolay Marchuk +# 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() +{ + [ -z "$2" ] || check_e "invalid system call '$1'" -e"$2" + + check_e "invalid system call '$1'" -e "$2" + check_e "invalid system call '$1'" -etrace="$2" + check_e "invalid system call '$1'" -e trace="$2" + + check_e "invalid system call '$1'" -eabbrev="$2" + check_e "invalid system call '$1'" -e abbrev="$2" + + check_e "invalid system call '$1'" -everbose="$2" + check_e "invalid system call '$1'" -e verbose="$2" + + check_e "invalid system call '$1'" -eraw="$2" + check_e "invalid system call '$1'" -e raw="$2" + + check_e "invalid system call '$1'" -einject="$2" + check_e "invalid system call '$1'" -e inject="$2" + check_e "invalid system call '$1'" -einject="$2:" + check_e "invalid system call '$1'" -einject="$2::" + check_e "invalid system call '$1'" -einject="$2:::" + check_e "invalid system call '$1'" -e inject="$2:" + check_e "invalid system call '$1'" -e inject="$2::" + check_e "invalid system call '$1'" -e inject="$2:::" + check_e "invalid system call '$1'" -einject="$2:when=3" + check_e "invalid system call '$1'" -e inject="$2:when=3" + + check_e "invalid system call '$1'" -efault="$2" + check_e "invalid system call '$1'" -e fault="$2" + check_e "invalid system call '$1'" -efault="$2:" + check_e "invalid system call '$1'" -efault="$2::" + check_e "invalid system call '$1'" -efault="$2:::" + check_e "invalid system call '$1'" -e fault="$2:" + check_e "invalid system call '$1'" -e fault="$2::" + check_e "invalid system call '$1'" -e fault="$2:::" + check_e "invalid system call '$1'" -efault="$2:when=4" + check_e "invalid system call '$1'" -e fault="$2:when=4" +} + +for arg in '' , ,, ,,, ; do + check_syscall "$arg" "$arg" + check_syscall "!$arg" "!$arg" +done + +for arg in -1 -2 -3 -4 -5 \ + invalid_syscall_name \ + 0x 0y \ + 32767 \ + 2147483647 \ + 2147483648 \ + 4294967295 \ + 4294967296 \ + /non_syscall \ + % %not_a_class \ + ; do + check_syscall "$arg" "$arg" + check_syscall "$arg" "!$arg" + check_syscall "$arg" "1,$arg" +done + +for arg in '!chdir' none all; do + check_syscall "$arg" "1,$arg" +done + +# invalid syscall, multiple syscalls +for arg in %desc \ + %file \ + %memory \ + %process \ + %network \ + chdir \ + 1 \ + ?32767 \ + ?invalid \ + ?%not_a_class \ + ?/non_syscall \ + ; do + check_syscall nonsense "$arg,nonsense" + check_syscall nonsense "!$arg,nonsense" + check_syscall nonsense "nonsense,$arg" + check_syscall nonsense "!nonsense,$arg" +done + +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 6d6706cf..105837f7 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 -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 @@ -59,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_e_using_grep 'exec: File *name too long' "$(printf '%4096s' ' ')" ff_name="$(printf '%4084s' ' ')" diff --git a/tests/qual_fault-syntax.test b/tests/qual_fault-syntax.test index 2044c3de..43ade769 100755 --- a/tests/qual_fault-syntax.test +++ b/tests/qual_fault-syntax.test @@ -40,28 +40,6 @@ 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 \ - file,nonsense \ - \!desc,nonsense \ - chdir,nonsense \ - \!chdir,nonsense \ - 1,nonsense \ - \!1,nonsense \ - ; do - $STRACE -e fault="$arg" true 2> "$LOG" && - fail_with "$arg" - LC_ALL=C grep -F "invalid system call '" < "$LOG" > /dev/null || - fail_with "$arg" -done - for arg in chdir:42 \!chdir:42 \ chdir:42:when=7 \ chdir:invalid \ diff --git a/tests/qual_inject-syntax.test b/tests/qual_inject-syntax.test index 33096269..46cead28 100755 --- a/tests/qual_inject-syntax.test +++ b/tests/qual_inject-syntax.test @@ -2,7 +2,7 @@ # # Check -e inject= syntax. # -# Copyright (c) 2016-2017 Dmitry V. Levin +# Copyright (c) 2016-2018 Dmitry V. Levin # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -40,28 +40,6 @@ 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 \ - file,nonsense \ - \!desc,nonsense \ - chdir,nonsense \ - \!chdir,nonsense \ - 1,nonsense \ - \!1,nonsense \ - ; do - $STRACE -e inject="$arg" true 2> "$LOG" && - fail_with "$arg" - LC_ALL=C grep -F "invalid system call '" < "$LOG" > /dev/null || - fail_with "$arg" -done - for arg in 42 chdir \ chdir:42 \!chdir:42 \ chdir:42:when=7 \