]> diplodocus.org Git - nmh/blobdiff - test/inc/test-eom-align
msgchk.c: Remove UUCP tests; unused since `#ifdef MF'.
[nmh] / test / inc / test-eom-align
index 48c3c0175ac7ffa9ec3cb1f07b476290d5db3d22..cea2f3771f40e29e246fa77cebb250f4c3d47440 100755 (executable)
@@ -15,27 +15,44 @@ 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!"
     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.)
 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")
+(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'
 
 check "$THISDIR/md5sums" "$MH_TEST_DIR/inctest.md5sums" 'keep first'
 
+f="$MH_TEST_DIR/mmdf-magic"
+printf '\1\1\1\1\n' >$f
+got="`output_md5 $f`"
+want=2636d725e650779eca70d6564c4f5982
+if test "$got" != "$want"; then
+    printf '%s: MMDF magic: %s: got %s, want %s\n' \
+        "$0" "$f" "$got" "$want" >&2
+    exit 1
+fi
+mmdf_magic="$f"
+
+empty_line="$MH_TEST_DIR/empty-line"
+printf '\n' >"$empty_line"
+
 FILLER="$THISDIR/filler.txt"
 FROMLINE="$THISDIR/fromline.txt"
 HDR="$THISDIR/msgheader.txt"
 
 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
    echo "Somebody's messed with $FILLER -- it must not contain"
    echo "anything that might look like a message delimiter!"
    exit 1
@@ -48,8 +65,9 @@ fi
 # bigger as well.
 STDIO_BUFSZ=16384
 
 # 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"`
+MMDFDELIMLINESZ=`wc -c <"$mmdf_magic"`
+HDRSZ=`wc -c < "$HDR"`
 
 # makembox_A mboxname sz
 # Assemble a mailbox into file mboxname, with two messages, such
 
 # makembox_A mboxname sz
 # Assemble a mailbox into file mboxname, with two messages, such
@@ -62,13 +80,25 @@ makembox_A () {
   MBOX="$1"
   SZ=$2
 
   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" "$empty_line" \
+      "$FROMLINE" "$HDR" "$FILLER" "$empty_line" >"$MBOX"
+}
+
+# makemmdf_A mmdfboxname sz
+# The first email in $MBOX will be sz bytes long, including its MMDF
+# magic strings that top and tail it.
+makemmdf_A () {
+  MBOX="$1"
+  SZ=$2
+
+  arith_eval $SZ - $MMDFDELIMLINESZ - $HDRSZ - 1 - $MMDFDELIMLINESZ; WANTSZ=$arith_val
   dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
   echo >> "$MBOX.body"
   dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
   echo >> "$MBOX.body"
-  cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
-  echo >> "$MBOX"
-  cat "$FROMLINE" "$HDR" "$FILLER" >> "$MBOX"
-  echo >> "$MBOX"
+  cat "$mmdf_magic" "$HDR" "$MBOX.body" "$mmdf_magic" \
+    "$mmdf_magic" "$HDR" "$FILLER" "$mmdf_magic" >"$MBOX"
 }
 
 # make_mbox_B mboxname sz
 }
 
 # make_mbox_B mboxname sz
@@ -81,18 +111,33 @@ makembox_B () {
   MBOX="$1"
   SZ=$2
 
   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"
   dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
   echo >> "$MBOX.body"
-  cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
-  echo >> "$MBOX"
+  cat "$FROMLINE" "$HDR" "$MBOX.body" "$empty_line" >"$MBOX"
+}
+
+# makemmdf_B mmdfboxname sz
+# The mbox file will be sz bytes and contain a single email, topped and
+# tailed with MMDF's magic strings.  The end of the email's body looks
+# the same as the magic string for three bytes.
+makemmdf_B () {
+  MBOX="$1"
+  SZ=$2
+
+  arith_eval $SZ - $MMDFDELIMLINESZ - $HDRSZ - 1 - 4 - $MMDFDELIMLINESZ; WANTSZ=$arith_val
+  dd if="$FILLER" of="$MBOX.body" bs="$WANTSZ" count=1 2>/dev/null
+  printf '\n\1\1\1\n' >>"$MBOX.body"
+  cat "$mmdf_magic" "$HDR" "$MBOX.body" "$mmdf_magic" >"$MBOX"
 }
 
 }
 
-# do_one_test_A sz
+# do_one_test_A sz mbox_type
 # Do a single test with message one's body of size sz.
 do_one_test_A () {
   SZ=$1
 # 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
+  MBOX_TYPE=$2
+  printf '%5s %s A\r' $SZ $MBOX_TYPE
+  make${MBOX_TYPE}_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.
   $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.
@@ -102,38 +147,57 @@ do_one_test_A () {
   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'
   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
+  rm "$MH_TEST_DIR/Mail/inbox/11" "$MH_TEST_DIR/Mail/inbox/12"
 }
 
 }
 
-# do_one_test_B sz
+# do_one_test_B sz mbox_type
 # Do a test type B
 do_one_test_B () {
   SZ=$1
 # Do a test type B
 do_one_test_B () {
   SZ=$1
-  makembox_B "$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
+  MBOX_TYPE=$2
+  printf '%5s %s B\r' $SZ $MBOX_TYPE
+  make${MBOX_TYPE}_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
   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'
   $VALGRIND inc -silent -file "$MH_TEST_DIR/eom-align.mbox"
   # We know the message should be 11 in the inbox
   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
+  rm "$MH_TEST_DIR/Mail/inbox/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.
 }
 
 # 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..."
+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 mbox
+  do_one_test_A $sz mmdf
+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 mbox
+  do_one_test_B $sz mmdf
+done
+
 i="$START"
 while test $i -le $FINISH; do
 i="$START"
 while test $i -le $FINISH; do
-  progress_update $i $START $FINISH
-  do_one_test_A $i
-  do_one_test_B $i
-  i=$(expr $i + 1)
+  do_one_test_A $i mbox
+  do_one_test_B $i mbox
+  do_one_test_A $i mmdf
+  do_one_test_B $i mmdf
+  i=`expr $i + 1`
 done
 done
-progress_done
+printf '\n'
 
 test ${failed:-0} -eq 0  &&  \
 
 test ${failed:-0} -eq 0  &&  \
-rm "$MH_TEST_DIR/eom-align.mbox" "$MH_TEST_DIR/eom-align.mbox.body"
+rm "$MH_TEST_DIR/eom-align.mbox" "$MH_TEST_DIR/eom-align.mbox.body" \
+   "$mmdf_magic" "$empty_line"
 
 exit $failed
 
 exit $failed