test.sh: help; option --expect-fail to ignore specified failures

This commit is contained in:
Gerhard Rieger 2023-04-02 18:43:22 +02:00
parent ffe940041c
commit b289d66ea8
2 changed files with 100 additions and 15 deletions

10
CHANGES
View file

@ -76,6 +76,14 @@ Testing:
socktype=<val-of-SOCK_DGRAM> socktype=<val-of-SOCK_DGRAM>
Tests: EXECSOCKETPAIRPACKETS SYSTEMSOCKETPAIRPACKETS Tests: EXECSOCKETPAIRPACKETS SYSTEMSOCKETPAIRPACKETS
Cosmetic corrections of EXEC,SYSTEM tests.
test.sh: Added option --expect-fail to specify comma separated list of
test numbers whose failure shall not cause a failure of the whole
script.
test.sh: Added help text
####################### V 1.7.4.4: ####################### V 1.7.4.4:
Corrections: Corrections:
@ -647,7 +655,7 @@ Corrections:
two settings were applied with two different get/set cycles, Thanks to two settings were applied with two different get/set cycles, Thanks to
Alexandre Fenyo for providing an initial patch. Alexandre Fenyo for providing an initial patch.
However, the actual fix is part of a conceptual change of the termios However, the actual fix is part of a conceptual change of the termios
module that aims for applying all changes in a single tcsetaddr call. module that aims for applying all changes in a single tcsetattr call.
Fixes FreeBSD Bug 198441 Fixes FreeBSD Bug 198441
Termios options TAB0,TAB1,TAB2,TAB3, and XTABS did not have an effect. Termios options TAB0,TAB1,TAB2,TAB3, and XTABS did not have an effect.

105
test.sh
View file

@ -11,13 +11,56 @@
# you can eg strace socat with: export TRACE="strace -v -tt -ff -D -x -s 1024 -o /tmp/$USER/socat.strace" # you can eg strace socat with: export TRACE="strace -v -tt -ff -D -x -s 1024 -o /tmp/$USER/socat.strace"
#set -vx #set -vx
#TODO: Add options for interface, broadcast-interface
[ -z "$USER" ] && USER="$LOGNAME" # HP-UX
if [ -z "$TMPDIR" ]; then
if [ -z "$TMP" ]; then
TMP=/tmp
fi
TMPDIR="$TMP"
fi
#E=-e # Linux
if [ $(echo "x\c") = "x" ]; then E=""
elif [ $(echo -e "x\c") = "x" ]; then E="-e"
else
echo "cannot suppress trailing newline on echo" >&2
exit 1
fi
ECHO="echo $E"
PRINTF="printf"
usage() {
$ECHO "Usage: $0 <options> [<test-spec> ...]"
$ECHO "options:"
$ECHO "\t-h \t\tShow this help"
$ECHO "\t-t <sec> \tBase for timeouts in seconds, default: 0.1"
$ECHO "\t-v \t\tBe more verbose, show failed commands"
$ECHO "\t-n <num> \tOnly perform test with given number"
$ECHO "\t-N <num> \tOnly perform tests starting with given number"
$ECHO "\t-C \t\tClear/remove left over certificates from previous runs"
$ECHO "\t-x \t\tShow commands executed, even when test succeeded"
#$ECHO "\t-d \t\tShow log output of commands, even when they did not fail"
$ECHO "\t-foreign \tAllow tests that send packets to Internet"
$ECHO "\t-expect-fail N1,N2,... \tIgnore failure of these tests"
$ECHO "\ttest-spec \Number of test or name of test"
$ECHO "Contents of environment variable OPTS are passed to Socat invokations, e.'g:"
$ECHO "OPTS=\"-d -d -d -d -lu\" ./test.sh"
$ECHO "TRACE=\"strace -tt -v\" Use trace,valgrind etc.on socat"
$ECHO "SOCAT=/path/to/socat \tselect socat executable for test"
$ECHO "FILAN=... PROCAN=..."
$ECHO "Find the tests' stdout,stderr,diff in $TMPDIR/$USER/\$PID"
}
val_t=0.1 val_t=0.1
NUMCOND=true NUMCOND=true
#NUMCOND="test \$N -gt 70" #NUMCOND="test \$N -gt 70"
VERBOSE= VERBOSE=
FOREIGN= FOREIGN=
EXPECT_FAIL=
while [ "$1" ]; do while [ "$1" ]; do
case "X$1" in case "X$1" in
X-h) usage; exit 0 ;;
X-t?*) val_t="${1#-t}" ;; X-t?*) val_t="${1#-t}" ;;
X-t) shift; val_t="$1" ;; X-t) shift; val_t="$1" ;;
X-v) VERBOSE=1 ;; # show commands X-v) VERBOSE=1 ;; # show commands
@ -27,6 +70,10 @@ while [ "$1" ]; do
X-N) shift; NUMCOND="test \$N -ge $1" ;; X-N) shift; NUMCOND="test \$N -ge $1" ;;
X-C) rm -f testcert*.conf testcert.dh testcli*.* testsrv*.* ;; X-C) rm -f testcert*.conf testcert.dh testcli*.* testsrv*.* ;;
X-foreign) FOREIGN=1 ;; # allow access to 3rd party Internet hosts X-foreign) FOREIGN=1 ;; # allow access to 3rd party Internet hosts
X-expect-fail|X--expect-fail) shift; EXPECT_FAIL="$1" ;;
X-*) echo "Unknown option \"$1\"" >&2
usage >&2
exit 1 ;;
*) break; *) break;
esac esac
shift shift
@ -4207,16 +4254,17 @@ esac
N=$((N+1)) N=$((N+1))
# I cannot remember the clou of this test, seems rather useless
NAME=CHILDDEFAULT NAME=CHILDDEFAULT
case "$TESTS" in case "$TESTS" in
*%$N%*|*%functions%*|*%$NAME%*) *%$N%*|*%functions%*|*%$NAME%*)
if ! eval $NUMCOND; then : if ! eval $NUMCOND; then :
elif ! a=$(testfeats STDIO EXEC); then elif ! F=$(testfeats STDIO EXEC); then
$PRINTF "test $F_n $TEST... ${YELLOW}Feature $a not available in $SOCAT${NORMAL}\n" $N $PRINTF "test $F_n $TEST... ${YELLOW}Feature $F not available in $SOCAT${NORMAL}\n" $N
numCANT=$((numCANT+1)) numCANT=$((numCANT+1))
listCANT="$listCANT $N" listCANT="$listCANT $N"
elif ! a=$(testaddrs STDIO EXEC); then elif ! A=$(testaddrs STDIO EXEC); then
$PRINTF "test $F_n $TEST... ${YELLOW}Address $a not available in $SOCAT${NORMAL}\n" $N $PRINTF "test $F_n $TEST... ${YELLOW}Address $A not available in $SOCAT${NORMAL}\n" $N
numCANT=$((numCANT+1)) numCANT=$((numCANT+1))
listCANT="$listCANT $N" listCANT="$listCANT $N"
else else
@ -4231,8 +4279,9 @@ MYPPID=`expr "\`grep "process parent id =" $tf\`" : '[^0-9]*\([0-9]*\).*'`
MYPGID=`expr "\`grep "process group id =" $tf\`" : '[^0-9]*\([0-9]*\).*'` MYPGID=`expr "\`grep "process group id =" $tf\`" : '[^0-9]*\([0-9]*\).*'`
MYSID=`expr "\`grep "process session id =" $tf\`" : '[^0-9]*\([0-9]*\).*'` MYSID=`expr "\`grep "process session id =" $tf\`" : '[^0-9]*\([0-9]*\).*'`
#echo "PID=$MYPID, PPID=$MYPPID, PGID=$MYPGID, SID=$MYSID" #echo "PID=$MYPID, PPID=$MYPPID, PGID=$MYPGID, SID=$MYSID"
if [ "$MYPID" = "$MYPPID" -o "$MYPID" = "$MYPGID" -o "$MYPID" = "$MYSID" -o \ #if [ "$MYPID" = "$MYPPID" -o "$MYPID" = "$MYPGID" -o "$MYPID" = "$MYSID" -o \
"$MYPPID" = "$MYPGID" -o "$MYPPID" = "$MYSID" -o "$MYPGID" = "$MYSID" ]; # "$MYPPID" = "$MYPGID" -o "$MYPPID" = "$MYSID" -o "$MYPGID" = "$MYSID" ];
if [ "$MYPID" = "$MYPPID" ];
then then
$PRINTF "$FAILED:\n" $PRINTF "$FAILED:\n"
echo "$CMD" echo "$CMD"
@ -14569,10 +14618,10 @@ if ! kill $pid1 2>"$tk1"; then
listCANT="$listCANT $N" listCANT="$listCANT $N"
else else
# Second, set accept-timeout and see if socat exits before kill # Second, set accept-timeout and see if socat exits before kill
CMD2="$TRACE $SOCAT $opts TCP-LISTEN:$PORT,reuseaddr,accept-timeout=1 PIPE" & CMD2="$TRACE $SOCAT $opts TCP-LISTEN:$PORT,reuseaddr,accept-timeout=1 PIPE"
$CMD2 >"$te2" 2>&1 </dev/null & $CMD2 >"$te2" 2>&1 </dev/null &
pid2=$! pid2=$!
sleep 1 sleep 2
if kill $pid2 2>"$tk2"; then if kill $pid2 2>"$tk2"; then
$PRINTF "$FAILED\n" $PRINTF "$FAILED\n"
echo "$CMD2" >&2 echo "$CMD2" >&2
@ -15985,14 +16034,42 @@ N=$((N+1))
echo "Used temp directory $TD - you might want to remove it after analysis" echo "Used temp directory $TD - you might want to remove it after analysis"
echo "Summary: $((N-1)) tests, $((numOK+numFAIL+numCANT)) selected; $numOK ok, $numFAIL failed, $numCANT could not be performed" echo "Summary: $((N-1)) tests, $((numOK+numFAIL+numCANT)) selected; $numOK ok, $numFAIL failed, $numCANT could not be performed"
set -- $listCANT; while [ "$1" ]; do echo "$1"; shift; done >"$td/cannot.lst"
ln -sf "$td/cannot.lst" .
set -- $listFAIL; while [ "$1" ]; do echo "$1"; shift; done >"$td/failed.lst"
ln -sf "$td/failed.lst" .
sort -n <(cat "$td/cannot.lst" |while read x; do echo "$x CANT"; done) <(cat "$td/failed.lst" |while read x; do echo "$x FAILED"; done) >"$td/result.txt"
ln -sf "$td/result.txt" .
if [ "$numCANT" -gt 0 ]; then if [ "$numCANT" -gt 0 ]; then
echo "CANT: $listCANT" echo "CANT: $listCANT"
fi fi
if [ "$numFAIL" -gt 0 ]; then if [ "$numFAIL" -gt 0 ]; then
echo "FAILED: $listFAIL" echo "FAILED: $listFAIL"
exit 1
fi fi
exit 0
if [ -z "$EXPECT_FAIL" ]; then
[ "$numFAIL" -eq 0 ]
exit # with rc from above statement
fi
#set -vx
if [ "$EXPECT_FAIL" ]; then
diff <(set -- $(echo "$EXPECT_FAIL" |tr ',' ' '); while [ "$1" ]; do echo "$1"; shift; done) "$td/failed.lst" >"$td/failed.diff"
ln -sf "$td/failed.diff" .
#grep "^"
grep "^> " "$td/failed.diff" |awk '{print($2);}' >"$td/failed.unexp"
ln -s "$td/failed.unexp" .
echo "FAILED unexpected: $(cat "$td/failed.unexp" |xargs echo)"
grep "^< " "$td/failed.diff" |awk '{print($2);}' >"$td/ok.unexp"
ln -s "$td/ok.unexp" .
echo "OK unexpected: $(cat "$td/ok.unexp" |xargs echo)"
fi
listFAIL=$(cat "$td/failed.lst" |xargs echo)
numFAIL="$(wc -l "$td/failed.lst" |awk '{print($1);}')"
! test -s "$td/failed.unexp"
exit
#============================================================================== #==============================================================================
@ -16032,12 +16109,12 @@ elif ! $(type systemd-socket-activate >/dev/null 2>&1); then
$PRINTF "test $F_n $TEST... ${YELLOW}systemd-socket-activate not available${NORMAL}\n" $N $PRINTF "test $F_n $TEST... ${YELLOW}systemd-socket-activate not available${NORMAL}\n" $N
numCANT=$((numCANT+1)) numCANT=$((numCANT+1))
listCANT="$listCANT $N" listCANT="$listCANT $N"
elif ! a=$(testfeats STDIO IP4 TCP PIPE); then elif ! F=$(testfeats STDIO IP4 TCP PIPE); then
$PRINTF "test $F_n $TEST... ${YELLOW}Feature $a not available in $SOCAT${NORMAL}\n" $N $PRINTF "test $F_n $TEST... ${YELLOW}Feature $F not available in $SOCAT${NORMAL}\n" $N
numCANT=$((numCANT+1)) numCANT=$((numCANT+1))
listCANT="$listCANT $N" listCANT="$listCANT $N"
elif ! a=$(testaddrs - TCP4 TCP4-LISTEN PIPE); then elif ! A=$(testaddrs - TCP4 TCP4-LISTEN PIPE); then
$PRINTF "test $F_n $TEST... ${YELLOW}Address $a not available in $SOCAT${NORMAL}\n" $N $PRINTF "test $F_n $TEST... ${YELLOW}Address $A not available in $SOCAT${NORMAL}\n" $N
numCANT=$((numCANT+1)) numCANT=$((numCANT+1))
listCANT="$listCANT $N" listCANT="$listCANT $N"
elif ! o=$(testoptions so-reuseaddr fork ) >/dev/null; then elif ! o=$(testoptions so-reuseaddr fork ) >/dev/null; then