📄 t.frame
字号:
#!/bin/sh# testing framework for /bin/sh# if run from "make check", use pid and time to name TMPDIR, # which will automatically be deleted.# if run from command line, use testname and date for TMPDIR,# and suppress directory deletion.set -eexec </dev/null: ${srcdir=.}: ${relpath=..}: ${BF_TESTDIR=.}# suck in EXE_EXT and DB_TYPE, export the latter.. ./t.configexport DB_TYPEDB_EXT=${DB_EXT#.}export DB_EXTBOGOFILTER="$VAL ${relpath}/bogofilter$EXE_EXT"BOGOLEXER="$VAL ${relpath}/bogolexer$EXE_EXT"BOGOTUNE="$VAL ${relpath}/bogotune$EXE_EXT"BOGOUTIL="$VAL ${relpath}/bogoutil$EXE_EXT"export BOGOFILTERexport BOGOLEXERexport BOGOUTIL# Cater for GNU coreutils "compatibility"_POSIX2_VERSION=199209export _POSIX2_VERSION# Obtain data base file suffixDB_NAME=`$BOGOFILTER -C -V 2>&1 | sed -n '2p;'`case $DB_NAME in *BerkeleyDB*|*"Berkeley DB"*) case $DB_NAME in *" TRANSACTIONAL"*|*" AUTO-XA"*) DB_TXN=true ;; *) DB_TXN=false ;; esac ;; *QDBM*) DB_TXN=false ;; *SQLite*) DB_TXN=true ;; *TrivialDB*) DB_TXN=false ;; *) echo >&2 "Unknown data base type in bogofilter -V: $DB_NAME" exit 1 ;;esacexport DB_EXT DB_TXNif [ "x$BF_TESTVERBOSE" != x ] ; then echo "detected database type \"$DB_TYPE\", extension: \"$DB_EXT\", transactions: $DB_TXN"fi# Cater for Solaris "compatibility"case $PATH in*/usr/xpg4/bin:*) ;;*) if test -d /usr/xpg4/bin ; then PATH=/usr/xpg4/bin:$PATH export PATH fi ;;esac# However, Solaris' /usr/xpg4/bin/grep doesn't support long lines, so we# need to use /usr/bin/grep insteadGREP=/bin/greptest -x $GREP || GREP=/usr/bin/greptest -x $GREP || { echo >&2 'Cannot find grep!' ; exit 1 ; }export GREP: ${AWK=awk}export AWKLANG=LC_COLLATE=LC_ALL=unset LANG || :unset LC_COLLATE || :unset LC_ALL || :i=0INSERT=.while [ $i -lt 3 ] ; do PRINTCORE=${srcdir}/$INSERT/printcore if [ -f $PRINTCORE ] ; then break ; fi i=`expr $i + 1` INSERT=$INSERT/..doneSYSTEST="${srcdir}"OUTPUTS=${SYSTEST}/outputsif [ -z "$RUN_FROM_MAKE" ] || [ "$SUPPRESS_DELETE" = YES ] ; then# standalone, from shell directly# THIS IS PRONE TO RACES NAME=`basename $0 | sed -e 's/^t\.//'` DATE=`date +"%Y%m%d"` TMPDIR="${BF_TESTDIR}/$NAME.$DATE" SUPPRESS_DELETE="NO"else# automated, from make while : ; do TMPDIR=${BF_TESTDIR}/checks.$$.`date +"%Y%m%dT%H%M%S"` if test x$SUPPRESS_DELETE = xNO ; then TMPDIR=${BF_TESTDIR}/outputs.`date +"%m%d"` ; fi mkdir $TMPDIR && break || : sleep 1 donefirm -rf $TMPDIRmkdir $TMPDIRBOGOFILTER_DIR=$TMPDIRexport BOGOFILTER_DIRWORDLIST="${TMPDIR}/wordlist.${DB_EXT}"verbose=0if [ "$1" = "-v" ]; then verbose=1 $BOGOFILTER -V 2> ${TMPDIR}/version.outfiif [ "$1" = "-vv" ]; then v="-x l -vv -D" verbose=2fiif test "x$BF_TESTVERBOSE" != "x" ; then verbose=$BF_TESTVERBOSEfiif test "x$SUPPRESS_DELETE" = "x" ; then trap '$SHELL $PRINTCORE ; rm -r -f core ${TMPDIR}' 0else echo "Results are in ${TMPDIR}. Remove it after testing."ficreate_empty_wordlist(){ rm -f $BOGOFILTER_DIR/*.${DB_EXT} rm -f $BOGOFILTER_DIR/__db.* $BOGOFILTER_DIR/log.* $BOGOUTIL -l $BOGOFILTER_DIR/wordlist.${DB_EXT} < /dev/null}if [ -z "$NODB" ]; then create_empty_wordlistfi# check valgrind versioncase `(valgrind --version) 2>/dev/null` in valgrind-2.[123].*) VALGRIND="valgrind --tool=memcheck" ;; valgrind-*) VALGRIND="valgrind" ;; *) VALGRIND= ;;esacif [ "x$VALGRIND" != x ] ; then VALGRIND="$VALGRIND -q --num-callers=20"fiexport VALGRIND# parse BF_CHECKTOOLBF_CHECKTOOL=${BF_CHECKTOOL-glibc}case ${BF_CHECKTOOL} inglibc) # make GNU libc nasty and abort on memory allocation issues: MALLOC_CHECK_=2 export MALLOC_CHECK_ ;;boehm-gc) # use the Boehm-Demers-Weiser Garbage Collector in find-leak mode, # only supported on Linux: for p in /usr/local/lib /usr/lib /lib ; do if test -f $p/libgc.so ; then VAL="env LD_PRELOAD=$p/libgc.so GC_FIND_LEAK=1" export VAL break fi done ;;valgrind) # use valgrind if test "x$VALGRIND" != x ; then VAL="$VALGRIND --leak-check=yes" export VAL else echo >&2 "WARNING: valgrind not found or unsupported version, ignored." fi ;;efence) # use Electric Fence VAL="env LD_PRELOAD=libefence.so.0.0" EF_PROTECT_FREE=1 EF_FILL=85 EF_ALLOW_MALLOC_0=1 EF_PROTECT_BELOW=0 EF_ALIGNMENT=0 export LD_PRELOAD EF_PROTECT_FREE EF_FILL EF_ALLOW_MALLOC_0 EF_PROTECT_BELOW export EF_ALIGNMENT VAL ;;"") ;;*) echo >&2 "WARNING: unsupported BF_CHECKTOOL=\"${BF_CHECKTOOL}\" ignored." echo >&2 " supported BF_CHECKTOOL values: glibc, boehm-gc, valgrind, efence" ;;esac# check diff optionscase `uname -s` in Linux) case $verbose in 1) DIFF_BRIEF="--brief -s" ;; 2) DIFF_BRIEF="-u" ;; esac ;;esac# ## HELPER FUNCTIONS ---------------------------------------------# split file on stdin into files 1, 2, 3, 4... at "From " lines.splitmbox() { $AWK 'BEGIN { f=0; } /^From / { close(f); f++; } { print $0 > f }'}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -