[PATCH v10 12/16] tests: check new syntax of inject/fault actions
Nikolay Marchuk
marchuk.nikolay.a at gmail.com
Mon Aug 28 08:54:49 UTC 2017
* 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 <ldv at 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 <ldv at 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 <ldv at 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
More information about the Strace-devel
mailing list