# override the installation root _dbc_root="`dirname \"$0\"`/.." # print out a tab-indented line informing of what's happening in a test log_tc(){ tc_case_no=`expr $tc_case_no + 1` printf "\\tcase $tc_case_no: $1\\n" } # takes a single argument and escapes it literally in a fashion that # allows it to be used without further quoting escape(){ #echo "$1" | sed -e 's/\([$`\!]\)/\\\1/g' echo "$1" | sed -e "s/'/'\\\''/g" -e "s/^/'/" -e "s/\$/'/" } dq_escape(){ echo "$1" | sed -e 's/\([$`\!]\)/\\\1/g' } # replaces any occurrence of a tmpfile made from a mktemp-like template # to the "template" form, i.e. foo.A5jfN4 -> foo.XXXXXX # also will call normalize_tmpdir on the logfile # # helpful for comparing testcase output that includes these testfiles subst_tmpfile(){ local template match logfile template="$1" logfile="$2" match="`echo \"$template\" | sed -e 's/XXXXXX/....../'`" sed -i -e "s,$match,$template,g" "$logfile" } assertFileExists(){ local f msg if [ $# -eq 2 ]; then msg="$1" shift fi f="$1" msg="${msg:-File $f does not exist}" assertTrue "$msg" '[ -f "$f" ]' } assertFileEmpty(){ local f msg if [ $# -eq 2 ]; then msg="$1" shift fi f="$1" msg="${msg:-File $f does not exist or is nonempty}" [ -f "$f" ] && [ ! -s "$f" ] ret=$? assertTrue "$msg" $ret [ $ret -eq 0 ] || head "$f" >&2 } assertDirectoryEmpty(){ local d msg if [ $# -eq 2 ]; then msg="$1" shift fi d="$1" msg="${msg:-Directory $d is not empty}" [ -d "$d" ] && [ -z "`ls \"$d\"`" ] ret=$? assertTrue "$msg" $ret [ $ret -eq 0 ] || ls "$d" >&2 } assertFilesEqual(){ local msg outfile errfile oldargs f1 f2 outfile=./tmp/assertFilesEqual.stdout errfile=./tmp/assertFilesEqual.stderr if [ $# -eq 3 ]; then msg="$1" shift else msg="Files not equal" fi f1=$1 f2=$2 eval set ${DIFF:-diff -Nu} "$@" "$f1" "$f2" > $outfile 2>$errfile assertTrue "$msg" "[ $? -eq 0 ]" if [ -s "$errfile" ]; then cat $errfile fi if [ -s "$outfile" ]; then cat $outfile fi } oneTimeSetUp(){ local curdir basedir curdir="`pwd`" basedir=$(readlink -f $(dirname "$0")) # make sure we're called from the test dir, even if we weren't if [ "$curdir" != "$basedir" ]; then cd "$basedir" exec "./`basename $0`" fi . ${curdir}/mockup-functions # set a really strange TMPDIR to see if it causes problems export TMPDIR="${curdir}/tmp/\`\`it's a '\$funny\\' path!\"" # override the dbc logfile location _dbc_logfile="${curdir}/tmp/dbc.log" # specify where the mockup logs should go MOCKUP_WORKDIR="${curdir}/tmp/mockup" } purge_tmp(){ rm -rf ./tmp mkdir -p "$TMPDIR" "$MOCKUP_WORKDIR" # for convenience, since we make a really ugly TMPDIR for tests ln -s "$TMPDIR" ./tmp/tmpdir touch $_dbc_logfile } setUp(){ purge_tmp tc_case_no=0 } tearDown(){ if ls "$MOCKUP_WORKDIR" | grep -qE '^(done)?[0-9]*\.errors\.'; then for f in `ls $MOCKUP_WORKDIR/*.errors.*`; do test -s "$f" ret=$? assertFalse "mockup errors found" $ret [ $ret -ne 0 ] || ( echo "$f:"; cat "$f" ) done fi assertDirectoryEmpty "cruft files left behind" "$TMPDIR" }