diff options
author | David Young <dyoung@hdfgroup.org> | 2019-08-28 18:21:26 (GMT) |
---|---|---|
committer | David Young <dyoung@hdfgroup.org> | 2019-08-28 18:21:26 (GMT) |
commit | 508cfab552d844c1ea313af99b5e815e87053c7c (patch) | |
tree | 20ba128b365836841f6a56c2242c35657dbc72a0 /test | |
parent | e178ab0e11a6d4ac8f3541549b03cfff1456b38a (diff) | |
download | hdf5-508cfab552d844c1ea313af99b5e815e87053c7c.zip hdf5-508cfab552d844c1ea313af99b5e815e87053c7c.tar.gz hdf5-508cfab552d844c1ea313af99b5e815e87053c7c.tar.bz2 |
Tand the he VFD SWMR test script used `| tee` to redirect test programs'
output, then it tested $? for an error exit. $? told the error status of
`tee`, though, not the test programs! So no test failures were counted, even
when some tests clearly failed. I changed the test script to use a shell
subroutine, `catch_out_err_and_rc`, to catch test programs' output and result
code.
Diffstat (limited to 'test')
-rw-r--r-- | test/supervise.subr | 30 | ||||
-rw-r--r-- | test/testvfdswmr.sh.in | 135 |
2 files changed, 106 insertions, 59 deletions
diff --git a/test/supervise.subr b/test/supervise.subr new file mode 100644 index 0000000..4a27378 --- /dev/null +++ b/test/supervise.subr @@ -0,0 +1,30 @@ +#!/bin/sh + +# +# catch_out_err_and_rc outbase command [arguments] +# +# Run `command` with any `arguments` provided. Redirect `command`'s +# stderr and stdout to the file `outbase.out`. Record the result code +# of `command` in `outbase.rc`. +# +catch_out_err_and_rc() +{ + if [ $# -lt 2 ]; then + echo "usage: catch_output_and_rc outbase command [arguments]" \ + 1>&2 + exit 1 + fi + outbase=$1 + shift + { + eval "$@" 2>&1 + echo $? > ${outbase}.rc + } | tee ${outbase}.out +} + +#catch_out_err_and_rc xxlsxx ls smiles & + +#wait +#echo result=$(cat xxlsxx.rc) + +#exit 0 diff --git a/test/testvfdswmr.sh.in b/test/testvfdswmr.sh.in index 09fdb23..6cb2960 100644 --- a/test/testvfdswmr.sh.in +++ b/test/testvfdswmr.sh.in @@ -21,6 +21,8 @@ srcdir=@srcdir@ +. ${srcdir}/supervise.subr + ############################################################################### ## test parameters ############################################################################### @@ -211,7 +213,8 @@ do # Launch the Writer echo launch the vfd_swmr_writer seed="" # Put -r <random seed> command here - ./vfd_swmr_writer -o $Nrecords $seed 2>&1 |tee vfd_swmr_writer.out & + catch_out_err_and_rc vfd_swmr_writer \ + ./vfd_swmr_writer -o $Nrecords $seed & pid_writer=$! $DPRINT pid_writer=$pid_writer @@ -226,30 +229,32 @@ do while [ $n -lt $Nreaders ]; do #seed="-r ${seeds[$n]}" seed="" - ./vfd_swmr_reader $Nsecs_add $seed 2>&1 |tee vfd_swmr_reader.out.$n & + catch_out_err_and_rc vfd_swmr_reader.$n \ + ./vfd_swmr_reader $Nsecs_add $seed & pid_readers="$pid_readers $!" n=`expr $n + 1` done $DPRINT pid_readers=$pid_readers $IFDEBUG ps - # Collect exit code of the readers first because they usually finish - # before the writer. - for xpid in $pid_readers; do - $DPRINT checked reader $xpid - wait $xpid - if test $? -ne 0; then + # Wait for the readers and the writer to finish. + wait + + # Collect exit codes of the readers + n=0 + while [ $n -lt $Nreaders ]; do + if [ $(cat vfd_swmr_reader.$n.rc) -ne 0 ]; then echo reader had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi + n=$((n + 1)) done # Collect exit code of the writer $DPRINT checked writer $pid_writer - wait $pid_writer - if test $? -ne 0; then + if [ $(cat vfd_swmr_writer.rc) -ne 0 ]; then echo writer had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi # Check for error and exit if one occured @@ -261,8 +266,8 @@ do fi # Clean up output files - rm -f vfd_swmr_writer.out - rm -f vfd_swmr_reader.out.* + rm -f vfd_swmr_writer.{out,rc} + rm -f vfd_swmr_reader.*.{out,rc} echo echo "###############################################################################" @@ -274,7 +279,8 @@ do # Launch the Remove Writer echo launch the vfd_swmr_remove_writer seed="" # Put -r <random seed> command here - ./vfd_swmr_remove_writer -o $Nrecs_rem $seed 2>&1 |tee vfd_swmr_writer.out & + catch_out_err_and_rc vfd_swmr_writer \ + ./vfd_swmr_remove_writer -o $Nrecs_rem $seed & pid_writer=$! $DPRINT pid_writer=$pid_writer @@ -289,30 +295,32 @@ do while [ $n -lt $Nreaders ]; do #seed="-r ${seeds[$n]}" seed="" - ./vfd_swmr_remove_reader $Nsecs_rem $seed 2>&1 |tee vfd_swmr_reader.out.$n & + catch_out_err_and_rc vfd_swmr_reader.$n \ + ./vfd_swmr_remove_reader $Nsecs_rem $seed & pid_readers="$pid_readers $!" n=`expr $n + 1` done $DPRINT pid_readers=$pid_readers $IFDEBUG ps - # Collect exit code of the readers first because they usually finish - # before the writer. - for xpid in $pid_readers; do - $DPRINT checked reader $xpid - wait $xpid - if test $? -ne 0; then + # Wait for the readers and the writer to finish. + wait + + # Collect exit codes of the readers + n=0 + while [ $n -lt $Nreaders ]; do + if [ $(cat vfd_swmr_reader.$n.rc) -ne 0 ]; then echo reader had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi + n=$((n + 1)) done # Collect exit code of the writer $DPRINT checked writer $pid_writer - wait $pid_writer - if test $? -ne 0; then + if [ $(cat vfd_swmr_writer.rc) -ne 0 ]; then echo writer had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi # Check for error and exit if one occured @@ -324,9 +332,10 @@ do fi # Clean up output files - rm -f vfd_swmr_writer.out - rm -f vfd_swmr_reader.out.* + rm -f vfd_swmr_writer.{out,rc} + rm -f vfd_swmr_reader.*.{out,rc} +if false; then echo echo "###############################################################################" echo "## Add/remove test - randomly grow or shrink the dataset" @@ -355,7 +364,8 @@ do # Launch the Add/Remove Writer echo launch the vfd_swmr_addrem_writer seed="" # Put -r <random seed> command here - ./vfd_swmr_addrem_writer $Nrecords $seed 2>&1 |tee vfd_swmr_writer.out & + catch_out_err_and_rc vfd_swmr_writer \ + ./vfd_swmr_addrem_writer $Nrecords $seed & pid_writer=$! $DPRINT pid_writer=$pid_writer @@ -370,30 +380,32 @@ do while [ $n -lt $Nreaders ]; do #seed="-r ${seeds[$n]}" seed="" - ./vfd_swmr_remove_reader $Nsecs_addrem $seed 2>&1 |tee vfd_swmr_reader.out.$n & + catch_out_err_and_rc vfd_swmr_reader.$n \ + ./vfd_swmr_remove_reader $Nsecs_addrem $seed & pid_readers="$pid_readers $!" n=`expr $n + 1` done $DPRINT pid_readers=$pid_readers $IFDEBUG ps - # Collect exit code of the readers first because they usually finish - # before the writer. - for xpid in $pid_readers; do - $DPRINT checked reader $xpid - wait $xpid - if test $? -ne 0; then + # Wait for the readers and the writer to finish. + wait + + # Collect exit codes of the readers + n=0 + while [ $n -lt $Nreaders ]; do + if [ $(cat vfd_swmr_reader.$n.rc) -ne 0 ]; then echo reader had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi + n=$((n + 1)) done # Collect exit code of the writer $DPRINT checked writer $pid_writer - wait $pid_writer - if test $? -ne 0; then + if [ $(cat vfd_swmr_writer.rc) -ne 0 ]; then echo writer had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi # Check for error and exit if one occured @@ -405,9 +417,10 @@ do fi # Clean up output files - rm -f vfd_swmr_writer.out - rm -f vfd_swmr_reader.out.* + rm -f vfd_swmr_writer.{out,rc} + rm -f vfd_swmr_reader.*.{out,rc} +fi echo echo "###############################################################################" echo "## Sparse writer test - test writing to random locations in the dataset" @@ -428,7 +441,8 @@ do rm -f $WRITER_MESSAGE # Launch the Sparse writer echo launch the vfd_swmr_sparse_writer - nice -n 20 ./vfd_swmr_sparse_writer $Nrecs_spa 2>&1 |tee vfd_swmr_writer.out & + catch_out_err_and_rc vfd_swmr_writer nice -n 20 \ + ./vfd_swmr_sparse_writer $Nrecs_spa & pid_writer=$! $DPRINT pid_writer=$pid_writer @@ -441,31 +455,34 @@ do echo launch $Nrdrs_spa vfd_swmr_sparse_readers while [ $n -lt $Nrdrs_spa ]; do # The sparse reader spits out a LOT of data so it's set to 'quiet' - ./vfd_swmr_sparse_reader -q $Nrecs_spa 2>&1 |tee vfd_swmr_reader.out.$n & + catch_out_err_and_rc vfd_swmr_reader.$n \ + ./vfd_swmr_sparse_reader -q $Nrecs_spa & pid_readers="$pid_readers $!" n=`expr $n + 1` done $DPRINT pid_readers=$pid_readers $IFDEBUG ps - # Collect exit code of the writer - $DPRINT checked writer $pid_writer - wait $pid_writer - if test $? -ne 0; then - echo writer had error - nerrors=`expr $nerrors + 1` - fi + # Wait for the readers and the writer to finish. + wait - # Collect exit code of the readers - for xpid in $pid_readers; do - $DPRINT checked reader $xpid - wait $xpid - if test $? -ne 0; then + # Collect exit codes of the readers + n=0 + while [ $n -lt $Nrdrs_spa ]; do + if [ $(cat vfd_swmr_reader.$n.rc) -ne 0 ]; then echo reader had error - nerrors=`expr $nerrors + 1` + nerrors=$((nerrors + 1)) fi + n=$((n + 1)) done + # Collect exit code of the writer + $DPRINT checked writer $pid_writer + if [ $(cat vfd_swmr_writer.rc) -ne 0 ]; then + echo writer had error + nerrors=$((nerrors + 1)) + fi + # Check for error and exit if one occured $DPRINT nerrors=$nerrors if test $nerrors -ne 0 ; then @@ -475,8 +492,8 @@ do fi # Clean up output files - rm -f vfd_swmr_writer.out - rm -f vfd_swmr_reader.out.* + rm -f vfd_swmr_writer.{out,rc} + rm -f vfd_swmr_reader.*.{out,rc} done done |