Files
libdwarf-code/scripts/run-all-tests.sh
David Anderson e16794254d For the 20000 or so regressiontests do larger diff using
cmp as on many systems multiple differences affecting
many tests will be painfully slow.  Affects
tests generating text over 30MB (some individual
tests generate 3GB to 5GB of text)..
	modified:   scripts/run-all-tests.sh
2024-08-06 10:37:43 -07:00

288 lines
6.5 KiB
Bash

#!/bin/sh
# Copyright (C) 2021 David Anderson
# This test script is in the public domain for use
# by anyone for any purpose.
start=`date`
echo "start run-all-tests.sh at $start"
echo "This removes and recreates /tmp/dw-regression"
echo "Use --enable-nonstandardprintf to use Windows long long"
echo " printf formats."
echo 'Starting run-all-tests.sh' \
`date "+%Y-%m-%d %H:%M:%S"`
stsecs=`date '+%s'`
# Removes and recreates /tmp/dwtestalldd directory
# for the regression tests.
chkisdir() {
if [ ! -d $1 ]
then
echo "The directory $1 is not found"
echo "we are in the wrong directory to run-all-tests.sh"
exit 1
fi
}
here=`pwd`
ddsrc=$here/src/bin/dwarfdump
rosrc=$here/../readelfobj/code
rtestsrc=$here/../regressiontests
# Sanity checks ensuring we are in the right place.
chkisdir scripts
chkisdir $ddsrc
chkisdir $rtestsrc
chkisdir $here/src/lib/libdwarf
chkisdir $here/src/bin/dwarfexample
chkisdir $here/src/bin/dwarfgen
chkisdir $here/test
chkisdir $here/doc
# We run the regression tests here.
ddtestdir=/tmp/dw-regression
rm -rf $ddtestdir
mkdir $ddtestdir
ddbld=/tmp/vaddbld
robld=/tmp/varobld
argval=''
nonstdprintf=
goodcount=0
failcount=0
stsecs=`date '+%s'`
chkres () {
if [ $1 = 0 ]
then
goodcount=`expr $goodcount + 1`
else
echo FAIL $2
failcount=`expr $failcount + 1`
fi
}
while [ $# -ne 0 ]
do
case $1 in
--enable-nonstandardprintf ) nonstdprintf=$1 ; shift ;;
* ) echo "Only --enable-nonstandardprintf allowed."
echo "No action taken. Exit"
exit 1 ;;
esac
done
if [ x$nonstdprintf != "x" ]
then
echo "Use nonstandardprintf. $nonstdprintf"
fi
echo "Starting run-all-tests.sh now"
echo run from $here
if [ ! -d $here/src/bin/dwarfdump ]
then
chkres 1 "A FAIL: This is not the libdwarf 'code' directory "
echo "A FAIL: $here/src/bin/dwarfdump missing. Run from 'code'"
exit 1
fi
if [ ! -d $here/src/lib/libdwarf ]
then
chkres 1 "B FAIL: This is not the libdwarf 'code' directory "
echo "B FAIL: $here/src/lib/libdwarf missing"
fi
if [ ! -d $here/src/bin/dwarfexample ]
then
chkres 1 "C FAIL: This is not the libdwarf 'code' directory"
echo "C FAIL: $here/src/bin/dwarfexample missing"
exit 1
fi
# ========
builddwarfdump() {
echo "Build dwarfdump source: $here builddir: $ddbld nonstdprintf $nonstdprintf"
oac=$ddbld
rm -rf $oac
mkdir $oac
chkres $? "D FAIL: unable to create $oac, giving up."
cd $oac
chkres $? "E FAIL: unable to cd to $oac, giving up."
if [ x$1 = "x" ]
then
$here/configure --enable-wall $nonstdprintf --enable-dwarfgen --enable-dwarfexample
else
$here/configure --enable-wall $1 $nonstdprintf --enable-dwarfexample
fi
chkres $? "F FAIL: configure failed in $oac giving up."
make check
chkres $? "G FAIL: make check failed in $oac, giving up."
if [ $failcount -eq 0 ]
then
echo "PASS Build dwarfdump"
else
echo "FAIL FAIL Build dwarfdump give up"
exit 1
fi
}
rundistcheck()
{
echo "Now rundistcheck"
cd $here
chkres $? "Q FAIL: scripts/buildandreleasetest.sh FAIL"
sh scripts/buildandreleasetest.sh $1 $nonstdprintf
r=$?
chkres $r "R FAIL: scripts/buildandreleasetest.sh FAIL"
if [ $failcount -eq 0 ]
then
echo "PASS run-all-tests.sh rundistcheck"
else
echo "Exit rundistcheck"
exit 1
fi
}
#======= readelfobj, readobjpe, readobjmacho etc tests
# with make check
buildreadelfobj() {
echo "Now buildreadelfobj"
rm -rf $robld
mkdir $robld
rodir=$rosrc
echo "Build readelfobj source: $rosrc builddir: $robld"
if [ ! -d $rodir ]
then
echo "K FAIL: cd $rodir not a directory, giving up."
exit 1
fi
echo "Now run readelfobj in $robld from readelfobj source $rodir"
chkres $? "L FAIL: $robld mkdir failed, giving up."
cd $robld
chkres $? "M FAIL: cd $robld failed, giving up."
# Just safety, we do not care if distclean fails
make distclean
#
$rodir/configure --enable-wall $nonstdprintf
chkres $? "N FAIL: configure $rodir/configure failed, giving up."
make
chkres $? "Oa FAIL: make in $rodir failed, giving up."
make check
chkres $? "Ob FAIL: make check in $rodir failed, giving up."
if [ $failcount -eq 0 ]
then
echo "PASS run-all-tests.sh buildreadelfobj"
else
echo "Exit buildreadelfobj"
exit 1
fi
}
#=================now run tests, meaning regressiontests
runfullddtest() {
echo "Run full dd test: run regressiontests in $ddtestdir"
cd $ddtestdir
chkres $? "H FAIL: cd $ddtestdir failed , giving up."
# so big diff files just do cmp
export SUPPRESSBIGDIFFS=y
$rtestsrc/INITIALSETUP.sh $rtestsrc
chkres $? "J FAIL INITIALSETUP failed $ddtestdir. giving up."
unset SUPPRESSBIGDIFFS
$rtestsrc/RUNALL.sh
chkres $? "J FAIL RUNALL failed $ddtestdir."
# Just show the fails, if any.
grep FAIL <$ddtestdir/ALLdd
# Now actually check result against the 'PASS' result.
grep "FAIL count: 0" $ddtestdir/ALLdd
chkres $? "Q FAIL: something failed in $ddtestdir."
tail -40 $ddtestdir/ALLdd
if [ $failcount -eq 0 ]
then
head -n 15 ALLdd
echo "..."
head -n 30 ALLdd
echo "PASS full run-all-tests.sh regressiontests"
else
echo "FAIL count $failcount full run-all-tests.sh regressiontests"
if [ $r -ne 0 ]
then
echo "Stopping after RUNALL.sh"
exit 1
fi
fi
}
#========actually run tests
if [ -d $ddsrc ]
then
builddwarfdump $argval $nonstdprintf
rundistcheck $argval $nonstdprintf
r=$?
chkres $r "FAIL rundistcheck"
if [ $r -ne 0 ]
then
echo "Stopping after distcheck"
exit 1
fi
else
echo "dwarfdump make check etc not run"
fi
if [ -d $rosrc ]
then
buildreadelfobj
r=$?
chkres $r "FAIL buildreadelfobj"
if [ $r -ne 0 ]
then
echo "Stopping after buildreadelfobj"
exit 1
fi
else
echo "readelfobj make check etc not run"
fi
if [ -d $rtestsrc ]
then
runfullddtest $argval $nonstdprintf
r=$?
chkres $r "FAIL runddtest"
if [ $r -ne 0 ]
then
echo "Stopping after buildreadelfobj"
exit 1
fi
else
echo "dwarfdump regressiontests not run"
fi
echo "Done with all tests"
echo "FAIL $failcount in run-all-tests.sh"
if [ $failcount -ne 0 ]
then
echo "FAIL $failcount as known to run-all-tests.sh"
else
echo "PASS run-all-tests.sh"
fi
echo "run-all-tests.sh started at $start"
don=`date`
echo "run-all-tests.sh done at $don"
ndsecs=`date '+%s'`
showminutes() {
t=`expr \( $2 \- $1 \+ 29 \) \/ 60`
echo "Run time in minutes: $t"
}
showminutes $stsecs $ndsecs
if [ $failcount -ne 0 ]
then
echo "run-all-tests.sh FAIL count $failcount"
exit 1
else
echo "run-all-tests.sh all PASS"
fi
exit 0