/
githubmirror
/
strace
Обзор
Документация
Войти
/
githubmirror
/
strace
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/qual_fault.test
128 строк
3 KB
Dmitry V. Levin
Update copyright headers
12 дек 2022, 11:00
12 дек 2022, 11:00
a8e86aa
Код
Авторство
О чём код?
#!/bin/sh -efu # # Check that fault injection works properly. # # Copyright (c) 2016 Dmitry V. Levin <ldv@strace.io> # Copyright (c) 2016-2022 The strace developers. # All rights reserved. # # SPDX-License-Identifier: GPL-2.0-or-later . "${srcdir=.}/scno_tampering.sh" # # F # F+ # F+S N=100 : ${suffix=} [ -z "${name_override-}" ] || NAME="$name_override" check_fault_injection() { local trace fault err first last step procs extra trace=$1; shift fault=$1; shift err=$1; shift first=$1; shift last=$1; shift step=$1; shift procs=$1; shift extra="$*" local when= if [ -z "$first$last$step" ]; then first=1 last=-1 step=1 elif [ -z "$last" ]; then case "$step" in '') when=":when=$first"; step=1; last=$first ;; +) when=":when=$first+"; step=1; last=-1 ;; *) when=":when=$first+$step"; last=-1; ;; esac else case "$step" in '') when=":when=${first}..${last}"; step=1 ;; +) when=":when=${first}..${last}+"; step=1 ;; *) when=":when=${first}..${last}+${step}" ;; esac fi local error= local raw=reg set -- case "$err" in '') ;; [123456789]*) error=":error=$err" raw=raw set -- -e raw=all ;; *) error=":error=$err" ;; esac outexp="$NAME.out.exp" outgot="$NAME.out.got" outout="$NAME.out.out" outpid="$NAME.pid" run_strace -a11 -ff -e trace=$trace \ "$@" -e fault=$fault$when$error$suffix $extra \ ../$NAME $raw "$err" "$first" "$last" "$step" $N \ "$procs" "$outexp" "$outgot" "$outout" "$outpid" for i in $(seq 0 $((procs - 1)) ) do pid=$(cat "$outpid.$i") match_diff "$LOG.$pid" "$outout.$i" match_diff "$outgot.$i" "$outexp.$i" done } case "$STRACE_ARCH" in ia64) valid_scno=1068 ;; *) valid_scno=51 ;; esac for err in '' ENOSYS 22 einval; do for fault in writev desc,$valid_scno; do check_fault_injection \ writev $fault "$err" '' '' '' 1 -efault=chdir check_fault_injection \ writev $fault "$err" '' '' '' 1 -efault=chdir -efault=none for F in 1 2 3 7; do check_fault_injection \ writev $fault "$err" $F '' '' 1 check_fault_injection \ writev $fault "$err" $F '' + 1 for L in 1 2 5 11; do [ "$L" -ge "$F" ] || continue check_fault_injection \ writev $fault "$err" $F $L '' 1 check_fault_injection \ writev $fault "$err" $F $L + 1 done for S in 1 2 3 7; do check_fault_injection \ writev $fault "$err" $F '' $S 1 check_fault_injection \ writev $fault "$err" $F '' $S 4 for L in 1 2 7 11; do [ "$L" -ge "$F" ] || continue check_fault_injection \ writev $fault "$err" $F $L $S 1 check_fault_injection \ writev $fault "$err" $F $L $S 4 done done done done done