* tests/qual_fault-exit_group.test: Add checks with new syntax.
* tests/qual_fault.test: Likewise.
* tests/qual_inject-error-signal.test: Likewise.
* tests/qual_inject-retval.test: Likewise.
* tests/qual_inject-signal.test: Likewise.
* tests/tampering-syntax.sh: New file.
* tests/qual_fault-syntax.test: Move common syntax checks to 
tampering-syntax.sh.
Add checks with new syntax.
* tests/qual_inject-syntax.test: Likewise.
* tests/Makefile.am (EXTRA_DIST): Add tampering-syntax.sh.
---
 tests/Makefile.am                   |   1 +
 tests/qual_fault-exit_group.test    |  11 ++++
 tests/qual_fault-syntax.test        |  92 ++++++++++++------------------
 tests/qual_fault.test               |  49 +++++++++++++---
 tests/qual_inject-error-signal.test |   5 ++
 tests/qual_inject-retval.test       |   5 ++
 tests/qual_inject-signal.test       |   5 ++
 tests/qual_inject-syntax.test       | 109 ++++++++++++++----------------------
 tests/tampering-syntax.sh           |  64 +++++++++++++++++++++
 9 files changed, 210 insertions(+), 131 deletions(-)
 create mode 100644 tests/tampering-syntax.sh

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 44045aa9..dfafd8e4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -365,6 +365,7 @@ EXTRA_DIST = \
        struct_flock.c \
        sun_path.expected \
        syntax.sh \
+       tampering-syntax.sh \
        trace_fstat.in \
        trace_fstatfs.in \
        trace_lstat.in \
diff --git a/tests/qual_fault-exit_group.test b/tests/qual_fault-exit_group.test
index 34a2da58..974109e8 100755
--- a/tests/qual_fault-exit_group.test
+++ b/tests/qual_fault-exit_group.test
@@ -43,12 +43,23 @@ test_with()
 }
 
 test_with -eexit,exit_group -efault=exit_group:error=ENOSYS ../answer
+test_with -e "trace(syscall exit,exit_group)" \
+         -e "fault(syscall exit_group;error=ENOSYS)" ../answer
 
 test_with -eexit,exit_group -efault=exit_group:error=ENOSYS \
          -efault=\!process:error=1 ../answer
+test_with -e "trace(syscall exit,exit_group)" \
+         -e "fault(syscall exit_group;error=ENOSYS)" \
+         -e "fault(!syscall %process;error=1)" ../answer
 
 test_with -eexit,exit_group -efault=all:error=ENOSYS \
          -efault=exit:error=1:when=2+ ../answer
+test_with -e "trace(syscall exit,exit_group)" \
+         -e "fault(syscall all;error=ENOSYS)" \
+         -e "fault(syscall exit;error=1;when=2+)" ../answer
 
 test_with -eexit,exit_group -efault=exit_group:error=ENOSYS \
          -efault=\!%desc,%file,%memory,%process,%signal,%network,%ipc:error=1 
../answer
+test_with -e "trace(syscall exit,exit_group)" \
+         -e "fault(syscall exit_group;error=ENOSYS)" \
+         -e "fault(!syscall 
%desc,%file,%memory,%process,%signal,%network,%ipc;error=1)" ../answer
diff --git a/tests/qual_fault-syntax.test b/tests/qual_fault-syntax.test
index 7198afff..a40a22f0 100755
--- a/tests/qual_fault-syntax.test
+++ b/tests/qual_fault-syntax.test
@@ -3,6 +3,7 @@
 # Check -e fault= syntax.
 #
 # Copyright (c) 2016-2017 Dmitry V. Levin <l...@altlinux.org>
+# Copyright (c) 2017 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -27,70 +28,49 @@
 # (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"
+. "${srcdir=.}/tampering-syntax.sh"
 
 #
 # F
 # F+
 # F+S
 
-fail_with()
-{
-       dump_log_and_fail_with \
-               "strace -e fault=$* failed to handle an argument error properly"
-}
+counter=7
+for arg in 42 \
+          invalid \
+          error= \
+          error=invalid_error_name \
+          error=-1 \
+          error=-2 \
+          error=3+ \
+          error=4096 \
+          ; do
+       check_tampering_syntax fault chdir "$arg"
+       check_tampering_syntax fault chdir "$arg" "when=$counter"
+       counter=$((counter + 1))
+done
 
-for arg in chdir:42 \!chdir:42 \
-          chdir:42:when=7 \
-          chdir:invalid \
-          chdir:invalid:when=8 \
-          chdir:error= \
-          chdir:error=:when=10 \
-          chdir:error=invalid_error_name \
-          chdir:error=invalid_error_name:when=11 \
-          chdir:error=-1 \
-          chdir:error=-1:when=12 \
-          chdir:error=-2 \
-          chdir:error=-2:when=13 \
-          chdir:error=3+ \
-          chdir:error=3+:when=14 \
-          chdir:error=4096 \
-          chdir:error=4096:when=15 \
-          chdir:when=7:error=invalid_error_name \
-          chdir:when= \
-          chdir:when=:error=19 \
-          chdir:when=0 \
-          chdir:when=0:error=20 \
-          chdir:when=-1 \
-          chdir:when=-1:error=21 \
-          chdir:when=-2+ \
-          chdir:when=-2+:error=22 \
-          chdir:when=-3+0 \
-          chdir:when=-3+0:error=23 \
-          chdir:when=4- \
-          chdir:when=4-:error=24 \
-          chdir:when=5+- \
-          chdir:when=5+-:error=25 \
-          chdir:when=6++ \
-          chdir:when=6++:error=26 \
-          chdir:when=7+0 \
-          chdir:when=7+0:error=27 \
-          chdir:when=8+-1 \
-          chdir:when=8+-1:error=28 \
-          chdir:when=9+1+ \
-          chdir:when=9+1+:error=29 \
-          chdir:when=65536 \
-          chdir:when=65536:error=30 \
-          chdir:when=1+65536 \
-          chdir:when=1+65536:error=31 \
-          chdir:retval=0 \
-          chdir:signal=1 \
-          chdir:error=1:error=2 \
+for arg in when= \
+          when=0 \
+          when=-1 \
+          when=-2+ \
+          when=-3+0 \
+          when=4- \
+          when=5+- \
+          when=6++ \
+          when=7+0 \
+          when=8+-1 \
+          when=9+1+ \
+          when=65536 \
+          when=1+65536 \
           ; do
-       $STRACE -e fault="$arg" true 2> "$LOG" &&
-               fail_with "$arg"
-       LC_ALL=C grep -F 'invalid fault argument' < "$LOG" > /dev/null ||
-               fail_with "$arg"
+       check_tampering_syntax fault chdir "$arg"
+       check_tampering_syntax fault chdir "$arg" "error=$counter"
+       counter=$((counter + 1))
 done
 
+check_tampering_syntax fault chdir "retval=0"
+check_tampering_syntax fault chdir "signal=1"
+check_tampering_syntax fault chdir "error=1" "error=2"
+
 exit 0
diff --git a/tests/qual_fault.test b/tests/qual_fault.test
index 12b0a850..e2fbd4df 100755
--- a/tests/qual_fault.test
+++ b/tests/qual_fault.test
@@ -48,29 +48,46 @@ check_fault_injection()
        procs=$1; shift
        extra="$*"
 
-       local when=
+       local when_qualify=
+       local when_new=
        if [ -z "$first$step" ]; then
                first=1
                step=1
        else
                case "$step" in
-                       '') when=":when=$first"; step=0 ;;
-                       +) when=":when=$first+"; step=1 ;;
-                       *) when=":when=$first+$step" ;;
+                       '')
+                       when_qualify=":when=$first"
+                       when_new=";when=$first"
+                       step=0
+                       ;;
+                       +)
+                       when_qualify=":when=$first+"
+                       when_new=";when=$first+"
+                       step=1
+                       ;;
+                       *)
+                       when_qualify=":when=$first+$step"
+                       when_new=";when=$first+$step"
+                       ;;
                esac
        fi
 
-       local error=
+       local error_qualify=
+       local error_new=
        local raw=reg
        set --
        case "$err" in
                '') ;;
                [123456789]*)
-                       error=":error=$err"
+                       error_qualify=":error=$err"
+                       error_new=";error=$err"
                        raw=raw
                        set -- -e raw=all
                        ;;
-               *) error=":error=$err" ;;
+               *)
+               error_qualify=":error=$err"
+               error_new=";error=$err"
+               ;;
        esac
 
        outexp="$NAME.out.exp"
@@ -79,7 +96,21 @@ check_fault_injection()
        outpid="$NAME.pid"
 
        run_strace -a11 -ff -e trace=$trace \
-               "$@" -e fault=$fault$when$error $extra \
+               "$@" -e fault=$fault$when_qualify$error_qualify $extra \
+               ../$NAME $raw "$err" "$first" "$step" $N \
+               "$procs" "$outexp" "$outgot" "$outout" "$outpid"
+
+       for i in $(seq 0 $((procs - 1)) )
+       do
+               pid=$(cat "$outpid.$i")
+
+               match_diff "$outout.$i" "$LOG.$pid"
+               match_diff "$outexp.$i" "$outgot.$i"
+       done
+
+       # New syntax
+       run_strace -a11 -ff -e "trace(syscall $trace)" \
+               "$@" -e "fault(syscall $fault$when_new$error_new)" $extra \
                ../$NAME $raw "$err" "$first" "$step" $N \
                "$procs" "$outexp" "$outgot" "$outout" "$outpid"
 
@@ -93,7 +124,7 @@ check_fault_injection()
 }
 
 for err in '' ENOSYS 22 einval; do
-       for fault in writev desc,51; do
+       for fault in writev %desc,51; do
                check_fault_injection \
                        writev $fault "$err" '' '' 1 -efault=chdir
                check_fault_injection \
diff --git a/tests/qual_inject-error-signal.test 
b/tests/qual_inject-error-signal.test
index 1fe46126..ddbbef8b 100755
--- a/tests/qual_inject-error-signal.test
+++ b/tests/qual_inject-error-signal.test
@@ -6,3 +6,8 @@
 run_strace -a12 -echdir,exit_group -einject=chdir:error=ENOENT:signal=USR1 \
        "../$NAME"
 match_diff
+
+run_strace -a12 -e "syscall chdir,exit_group" \
+          -e "inject(syscall chdir;error=ENOENT;signal=USR1)" \
+       "../$NAME"
+match_diff
diff --git a/tests/qual_inject-retval.test b/tests/qual_inject-retval.test
index 5a4efd11..d71106fc 100755
--- a/tests/qual_inject-retval.test
+++ b/tests/qual_inject-retval.test
@@ -14,6 +14,11 @@ check_injection()
        run_strace -a12 -e$syscall -einject="$syscall:retval=$rval" "$@" \
                ../qual_inject-retval "$rval" > "$EXP"
        match_diff "$LOG" "$EXP"
+
+       run_strace -a12 -e "syscall $syscall" \
+                  -e "inject(syscall $syscall;retval=$rval)" "$@" \
+               ../qual_inject-retval "$rval" > "$EXP"
+       match_diff "$LOG" "$EXP"
 }
 
 check_injection 0
diff --git a/tests/qual_inject-signal.test b/tests/qual_inject-signal.test
index f17e5a01..6cf6c7e5 100755
--- a/tests/qual_inject-signal.test
+++ b/tests/qual_inject-signal.test
@@ -6,3 +6,8 @@
 run_strace -a12 -echdir,exit_group -einject=chdir:signal=USR1 \
        ../$NAME
 match_diff
+
+run_strace -a12 -e "syscall chdir,exit_group" \
+          -e "inject(syscall chdir;signal=USR1)" \
+       ../$NAME
+match_diff
diff --git a/tests/qual_inject-syntax.test b/tests/qual_inject-syntax.test
index 17c18fde..bac8eb40 100755
--- a/tests/qual_inject-syntax.test
+++ b/tests/qual_inject-syntax.test
@@ -3,6 +3,7 @@
 # Check -e inject= syntax.
 #
 # Copyright (c) 2016-2017 Dmitry V. Levin <l...@altlinux.org>
+# Copyright (c) 2017 The strace developers.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -27,76 +28,52 @@
 # (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"
+. "${srcdir=.}/tampering-syntax.sh"
 
-#
-# F
-# F+
-# F+S
+check_tampering_syntax inject 42
+check_tampering_syntax inject chdir
 
-fail_with()
-{
-       dump_log_and_fail_with \
-               "strace -e inject=$* failed to handle an argument error 
properly"
-}
+counter=7
+for arg in 42 \
+          invalid \
+          error= \
+          error=invalid_error_name \
+          error=-1 \
+          error=-2 \
+          error=3+ \
+          error=4096 \
+          ; do
+       check_tampering_syntax inject chdir "$arg"
+       check_tampering_syntax inject chdir "$arg" "when=$counter"
+       counter=$((counter + 1))
+done
 
-for arg in 42 chdir \
-          chdir:42 \!chdir:42 \
-          chdir:42:when=7 \
-          chdir:invalid \
-          chdir:invalid:when=8 \
-          chdir:error= \
-          chdir:error=:when=10 \
-          chdir:error=invalid_error_name \
-          chdir:error=invalid_error_name:when=11 \
-          chdir:error=-1 \
-          chdir:error=-1:when=12 \
-          chdir:error=-2 \
-          chdir:error=-2:when=13 \
-          chdir:error=3+ \
-          chdir:error=3+:when=14 \
-          chdir:error=4096 \
-          chdir:error=4096:when=15 \
-          chdir:when=7:error=invalid_error_name \
-          chdir:when= \
-          chdir:when=:error=19 \
-          chdir:when=0 \
-          chdir:when=0:error=20 \
-          chdir:when=-1 \
-          chdir:when=-1:error=21 \
-          chdir:when=-2+ \
-          chdir:when=-2+:error=22 \
-          chdir:when=-3+0 \
-          chdir:when=-3+0:error=23 \
-          chdir:when=4- \
-          chdir:when=4-:error=24 \
-          chdir:when=5+- \
-          chdir:when=5+-:error=25 \
-          chdir:when=6++ \
-          chdir:when=6++:error=26 \
-          chdir:when=7+0 \
-          chdir:when=7+0:error=27 \
-          chdir:when=8+-1 \
-          chdir:when=8+-1:error=28 \
-          chdir:when=9+1+ \
-          chdir:when=9+1+:error=29 \
-          chdir:when=65536 \
-          chdir:when=65536:error=30 \
-          chdir:when=1+65536 \
-          chdir:when=1+65536:error=31 \
-          chdir:retval=-1 \
-          chdir:signal=0 \
-          chdir:signal=129 \
-          chdir:retval=0:retval=1 \
-          chdir:error=1:error=2 \
-          chdir:retval=0:error=1 \
-          chdir:error=1:retval=0 \
-          chdir:retval=0:signal=1:error=1 \
+for arg in when= \
+          when=0 \
+          when=-1 \
+          when=-2+ \
+          when=-3+0 \
+          when=4- \
+          when=5+- \
+          when=6++ \
+          when=7+0 \
+          when=8+-1 \
+          when=9+1+ \
+          when=65536 \
+          when=1+65536 \
           ; do
-       $STRACE -e inject="$arg" true 2> "$LOG" &&
-               fail_with "$arg"
-       LC_ALL=C grep -F 'invalid inject argument' < "$LOG" > /dev/null ||
-               fail_with "$arg"
+       check_tampering_syntax inject chdir "$arg"
+       check_tampering_syntax inject chdir "$arg" "error=$counter"
+       counter=$((counter + 1))
 done
 
+check_tampering_syntax inject chdir "retval=-1"
+check_tampering_syntax inject chdir "signal=0"
+check_tampering_syntax inject chdir "signal=129"
+check_tampering_syntax inject chdir "retval=0" "retval=1"
+check_tampering_syntax inject chdir "error=1" "error=2"
+check_tampering_syntax inject chdir "retval=0" "error=1"
+check_tampering_syntax inject chdir "error=1" "retval=0"
+check_tampering_syntax inject chdir "retval=0" "signal=1" "error=1"
+
 exit 0
diff --git a/tests/tampering-syntax.sh b/tests/tampering-syntax.sh
new file mode 100644
index 00000000..6b7ed261
--- /dev/null
+++ b/tests/tampering-syntax.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+# Define inject/fault 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=.}/syntax.sh"
+
+check_tampering_syntax()
+{
+       local action syscall argument_qualify argument_new
+       action=$1; shift
+       syscall=$1; shift
+
+       if [ -n "$1" ]; then
+               argument_qualify="$1"
+               argument_new="$1"
+               shift
+       else
+               check_e "invalid $action argument ''" \
+                       -e "$action=$syscall" true
+               check_e "invalid $action argument ''" \
+                       -e "$action(syscall $syscall)" true
+               return
+       fi
+
+       for arg in "$@"
+       do
+               [ -z "$arg" ] && break
+               argument_qualify="$argument_qualify:$arg"
+               argument_new="$argument_new;$arg"
+               shift
+       done
+       check_e "invalid $action argument '$argument_qualify'" \
+               -e "$action=$syscall:$argument_qualify" \
+               true
+       check_e "invalid $action argument '$argument_new'" \
+               -e "$action(syscall $syscall;$argument_new)" \
+               true
+}
-- 
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