#! /bin/sh # Test scripts for h5toh4. # See the USAGE function for command usage. # Definitions of commands and variables CMD='../h5toh4' RM='rm -f' SED='sed ' H4DUMP='hdp' DIFF=diff CMP='cmp -s' nerrors=0 # number of errors (0) quitonerr=0 # quit on error (not) noclean=0 # no cleaning temp. files (yes) only="" # dumper sub-command to test only except="" # dumper sub-command to test not # Definitions of functions/shorthands # # Print Usage of the command USAGE() { echo "Usage: $0 [-help] [-noclean] [-quit] [-except ] [-only ]" echo " -help: display help information" echo " -noclean: do not clean away temporary files" echo " -quit: quit immediately if any test fails" echo " -except: skip one specific command" echo " -only: test one specific command" echo " can be one of {list, dumpsds, dumprig, dumpvd, dumpvg, dumpgr}" } # Print message with formats according to message level ($1) MESG() { level=$1 shift case $level in 0) echo '=============================' echo $* echo '=============================' ;; 3) echo '-----------------------------' echo $* echo '-----------------------------' ;; 6) echo "*** Arguments are $* ***" ;; *) echo "MESG(): Unknown level ($level)" exit 1 ;; esac } # Run the test to produce an output file which is then # compared with the expected ($1) output. # Note that this can be used to produce the expected # output files by replace "$output" with "$expected" # in the run-the-test commands. TEST() { # shift # print a id banner MESG 6 $@ # run the test ( echo "#############################" echo "'$CMD $@'" echo "#############################" cd testfiles $CMD "$@" cd .. ) case "$1" in "-m") shift for i in $@ do h4file=testfiles/`echo $i | $SED -e s/\.h5/.hdf/g` output=`echo $h4file | $SED -e s/\.hdf/.tmp/` expected=`echo $h4file | $SED -e s/\.hdf/.dmp/` $H4DUMP dumpvg $h4file > $output $H4DUMP dumpvd $h4file >> $output $H4DUMP dumpsds $h4file >> $output $CMP $expected $output if [ $? -ne 0 ] then echo $DIFF $expected $output $DIFF $expected $output echo " <<< FAILED >>>" nerrors=`expr $nerrors + 1` if [ $quitonerr -gt 0 ]; then FINISH fi fi done ;; * ) if [ $# -eq 1 ] then h4file=testfiles/`echo $1 | $SED -e s/\.h5/.hdf/` else h4file=testfiles/$2 fi output=`echo $h4file | $SED -e s/\.hdf/.tmp/` expected=`echo $h4file | $SED -e s/\.hdf/.dmp/` $H4DUMP dumpvg $h4file > $output $H4DUMP dumpvd $h4file >> $output $H4DUMP dumpsds $h4file >> $output $CMP $expected $output if [ $? -ne 0 ] then echo $DIFF $expected $output $DIFF $expected $output echo " <<< FAILED >>>" nerrors=`expr $nerrors + 1` if [ $quitonerr -gt 0 ]; then FINISH fi fi ;; esac } # Report the result and exit FINISH() { if [ $nerrors -eq 0 ] then MESG 0 "All h5toh4 tests passed" else MESG 0 "h5toh4 tests failed: $nerrors" fi exit $nerrors } #=============== # Main Body #=============== # parse arguments while [ $# -gt 0 ] do case "$1" in "-quit") quitonerr=1 ;; "-noclean") noclean=1 ;; "-help") USAGE exit 0 ;; "-only") shift case "$1" in "h5toh4") only="$1" ;; *) echo "Unknown command: $1" USAGE exit 1 ;; esac ;; "-except") shift case "$1" in "h5toh4") except="$1" ;; *) echo "Unknown command: $1" USAGE exit 1 ;; esac ;; * ) echo "Unknow option: $1" USAGE exit 1 ;; esac shift done # Print a beginning banner MESG 0 "Running h5toh4 tests" # Test command list TestCmd=h5toh4 TestName="Test command $TestCmd" if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] then MESG 3 "$TestName" $RM ./testfiles/*.hdf ./testfiles/*.tmp TEST tgroup.h5 TEST tdset.h5 TEST tattr.h5 TEST tslink.h5 TEST thlink.h5 TEST tall.h5 TEST tdset2.h5 TEST tcompound2.h5 TEST tmany.h5 $RM ./testfiles/*.tmp TEST tgroup.h5 tgroup.hdf TEST tdset.h5 tdset.hdf TEST tattr.h5 tattr.hdf TEST tslink.h5 tslink.hdf TEST thlink.h5 thlink.hdf TEST tcompound.h5 tcompound.hdf TEST tall.h5 tall.hdf TEST tdset2.h5 tdset2.hdf TEST tcompound2.h5 tcompound2.hdf TEST tmany.h5 tmany.hdf $RM ./testfiles/*.hdf ./testfiles/*.tmp TEST -m tgroup.h5 tdset.h5 tattr.h5 tslink.h5 thlink.h5 tcompound.h5 tall.h5 TEST -m tdset2.h5 tcompound2.h5 tmany.h5 $RM ./testfiles/*.hdf ./testfiles/*.tmp else MESG 3 "$TestName <<>>" fi # End of test FINISH