set -e
-. ${MH_TEST_COMMON}
+if test -z "${MH_OBJ_DIR}"; then
+ srcdir=`dirname "$0"`/../..
+ MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
setup_test
-THISDIR="${srcdir}/test/inc"
+THISDIR="$srcdir/test/inc"
-if [ ! -z "$VALGRIND_ME" ]; then
+if [ -z "$VALGRIND_ME" ]; then
+ VALGRIND=
+else
require_prog valgrind
# Lack of quotes here is important
VALGRIND="valgrind --quiet --error-exitcode=1"
echo "Running tests under valgrind: takes ages!"
-else
- VALGRIND=
fi
# First check that all our various pieces of text are
# intact. (Since we're dealing in exact byte alignment
# minor corruptions such as line ending changes could
# render the tests useless.)
-(cd "$THISDIR" && output_md5 *.txt > "$MH_TEST_DIR/inctest.md5sums")
-diff -u "$THISDIR/md5sums" "$MH_TEST_DIR/inctest.md5sums"
+(cd "$THISDIR" && \
+ for i in *.txt; do
+ echo `output_md5 $i`' '"$i" >> "$MH_TEST_DIR/inctest.md5sums"
+ done)
+check "$THISDIR/md5sums" "$MH_TEST_DIR/inctest.md5sums" 'keep first'
FILLER="$THISDIR/filler.txt"
FROMLINE="$THISDIR/fromline.txt"
HDR="$THISDIR/msgheader.txt"
-if grep -q From "$FILLER"; then
+if grep From "$FILLER" >/dev/null; then
echo "Somebody's messed with $FILLER -- it must not contain"
echo "anything that might look like a message delimiter!"
exit 1
# bigger as well.
STDIO_BUFSZ=16384
-FROMLINESZ="$(wc -c "$FROMLINE" | cut -d ' ' -f 1)"
-HDRSZ="$(wc -c "$HDR" | cut -d ' ' -f 1)"
+FROMLINESZ=`wc -c < "$FROMLINE"`
+HDRSZ=`wc -c < "$HDR"`
# makembox_A mboxname sz
# Assemble a mailbox into file mboxname, with two messages, such
MBOX="$1"
SZ=$2
- WANTSZ="$(($SZ - $HDRSZ - $FROMLINESZ - 1))"
+ arith_eval $SZ - $HDRSZ - $FROMLINESZ - 1; WANTSZ=$arith_val
dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
echo >> "$MBOX.body"
cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
MBOX="$1"
SZ=$2
- WANTSZ="$(($SZ - $HDRSZ - $FROMLINESZ - 1))"
+ arith_eval $SZ - $HDRSZ - $FROMLINESZ - 1; WANTSZ=$arith_val
dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
echo >> "$MBOX.body"
cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
# Do a single test with message one's body of size sz.
do_one_test_A () {
SZ=$1
- makembox_A "$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
+ printf '%5s A\r' $SZ
+ makembox_A "$MH_TEST_DIR/eom-align.mbox" $SZ
$VALGRIND inc -silent -file "$MH_TEST_DIR/eom-align.mbox"
# We know the messages should be 11 and 12 in inbox
# Now get the bodies back out.
- sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > "$MH_TEST_DIR/eom-align.inbox.body1"
- sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/12" > "$MH_TEST_DIR/eom-align.inbox.body2"
- diff -u "$MH_TEST_DIR/eom-align.mbox.body" "$MH_TEST_DIR/eom-align.inbox.body1"
- diff -u "$FILLER" "$MH_TEST_DIR/eom-align.inbox.body2"
+ body1="$MH_TEST_DIR/eom-align.inbox.body1"
+ body2="$MH_TEST_DIR/eom-align.inbox.body2"
+ sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > "$body1"
+ sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/12" > "$body2"
+ check "$MH_TEST_DIR/eom-align.mbox.body" "$body1" 'keep first'
+ check "$FILLER" "$body2" 'keep first'
rmm 11 12
}
# Do a test type B
do_one_test_B () {
SZ=$1
- makembox_B "$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
+ printf '%5s B\r' $SZ
+ makembox_B "$MH_TEST_DIR/eom-align.mbox" $SZ
$VALGRIND inc -silent -file "$MH_TEST_DIR/eom-align.mbox"
# We know the message should be 11 in the inbox
- sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > "$MH_TEST_DIR/eom-align.inbox.body1"
- diff -u "$MH_TEST_DIR/eom-align.mbox.body" "$MH_TEST_DIR/eom-align.inbox.body1"
+ body1="$MH_TEST_DIR/eom-align.inbox.body1"
+ sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > "$body1"
+ check "$MH_TEST_DIR/eom-align.mbox.body" "$body1" 'keep first'
rmm 11
}
-
# Cover a decent range around the stdio buffer size to make sure we catch
# any corner cases whether they relate to total message size equal to
# buffer size or to body size equal to buffer size.
-START=$(($STDIO_BUFSZ - 16))
-FINISH=$(($STDIO_BUFSZ + $HDRSZ + $FROMLINESZ + 32))
-echo "Testing inc of files with various alignments of eom marker with buffer size..."
-i="$START"
-while test $i -le $FINISH; do
- progress_update $sz $START $FINISH
+arith_eval $STDIO_BUFSZ - 16; START=$arith_val
+arith_eval $STDIO_BUFSZ + $HDRSZ + $FROMLINESZ + 32; FINISH=$arith_val
+[ -t 1 ] && echo \
+"Testing inc of files with various alignments of eom marker with buffer size..."
+
+#### Trouble spots for the particular input, with BUFSZ of 8192:
+for sz in 3146 3147 7241 7242 7243 11338 11339 15433 15434 15435; do
do_one_test_A $sz
+done
+
+# Also 155, 174, 175, but they're too small for makembox_B to handle.
+for sz in 684 4074 4097 4148 4610 4611 5121 5122 6654 6655 8170 \
+ 8193 8244 8364 12266 12289 12340 16362 16385 16436; do
do_one_test_B $sz
- i=$(expr $i + 1)
done
-progress_done
+
+i="$START"
+while test $i -le $FINISH; do
+ do_one_test_A $i
+ do_one_test_B $i
+ i=`expr $i + 1`
+done
+printf '\n'
+
+test ${failed:-0} -eq 0 && \
+rm "$MH_TEST_DIR/eom-align.mbox" "$MH_TEST_DIR/eom-align.mbox.body"
+
+exit $failed