]>
diplodocus.org Git - nmh/blob - test/inc/test-eom-align
2 # Test all combinations of alignment of the end-of-message delimiter
3 # with the end of a stdio buffer
7 if test -z "${MH_OBJ_DIR}"; then
8 srcdir
=`dirname "$0"`/..
/..
9 MH_OBJ_DIR
=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
12 .
"$MH_OBJ_DIR/test/common.sh"
16 THISDIR
="$srcdir/test/inc"
18 if [ ! -z "$VALGRIND_ME" ]; then
20 # Lack of quotes here is important
21 VALGRIND
="valgrind --quiet --error-exitcode=1"
22 echo "Running tests under valgrind: takes ages!"
27 # First check that all our various pieces of text are
28 # intact. (Since we're dealing in exact byte alignment
29 # minor corruptions such as line ending changes could
30 # render the tests useless.)
31 (cd "$THISDIR" && output_md5
*.txt
> "$MH_TEST_DIR/inctest.md5sums")
32 check
"$THISDIR/md5sums" "$MH_TEST_DIR/inctest.md5sums" 'keep first'
34 FILLER
="$THISDIR/filler.txt"
35 FROMLINE
="$THISDIR/fromline.txt"
36 HDR
="$THISDIR/msgheader.txt"
38 if grep -q From
"$FILLER"; then
39 echo "Somebody's messed with $FILLER -- it must not contain"
40 echo "anything that might look like a message delimiter!"
44 # a sort of worst-case guess for the buffer size;
45 # obviously a buffer boundary for this will be a boundary
46 # for any smaller power of two size.
47 # If you need to increase this you'll need to make filler.txt
51 FROMLINESZ
="$(wc -c "$FROMLINE" | cut -d ' ' -f 1)"
52 HDRSZ
="$(wc -c "$HDR" | cut -d ' ' -f 1)"
54 # makembox_A mboxname sz
55 # Assemble a mailbox into file mboxname, with two messages, such
56 # that the first is exactly sz bytes long (including its header
57 # and its initial 'From' line and the newline which terminates it
58 # but not the newline which mbox format demands after each message)
59 # We also leave the body of message one in mboxname.body
60 # (the body of message two is always $FILLER in its entirety)
65 WANTSZ
="$(($SZ - $HDRSZ - $FROMLINESZ - 1))"
66 dd if="$FILLER" of
="$MBOX.body" bs
="$WANTSZ" count
=1 2>/dev
/null
68 cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
70 cat "$FROMLINE" "$HDR" "$FILLER" >> "$MBOX"
74 # make_mbox_B mboxname sz
75 # Test B makes a mailbox with one message of sz bytes long,
76 # which ends in a partial mbox delimiter (ie part of the string
77 # \n\nFrom '). To both do this and be a valid mbox this means
78 # it has to end with two newlines (one of which is in the message
79 # body and one of which is the mbox format mandated one)
84 WANTSZ
="$(($SZ - $HDRSZ - $FROMLINESZ - 1))"
85 dd if="$FILLER" of
="$MBOX.body" bs
="$WANTSZ" count
=1 2>/dev
/null
87 cat "$FROMLINE" "$HDR" "$MBOX.body" > "$MBOX"
92 # Do a single test with message one's body of size sz.
95 makembox_A
"$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
96 $VALGRIND inc
-silent -file "$MH_TEST_DIR/eom-align.mbox"
97 # We know the messages should be 11 and 12 in inbox
98 # Now get the bodies back out.
99 body1
="$MH_TEST_DIR/eom-align.inbox.body1"
100 body2
="$MH_TEST_DIR/eom-align.inbox.body2"
101 sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > "$body1"
102 sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/12" > "$body2"
103 check
"$MH_TEST_DIR/eom-align.mbox.body" "$body1" 'keep first'
104 check
"$FILLER" "$body2" 'keep first'
112 makembox_B
"$MH_TEST_DIR/eom-align.mbox" $STDIO_BUFSZ
113 $VALGRIND inc
-silent -file "$MH_TEST_DIR/eom-align.mbox"
114 # We know the message should be 11 in the inbox
115 body1
="$MH_TEST_DIR/eom-align.inbox.body1"
116 sed -e '1,/^$/d' "$MH_TEST_DIR/Mail/inbox/11" > "$body1"
117 check
"$MH_TEST_DIR/eom-align.mbox.body" "$body1" 'keep first'
121 # Cover a decent range around the stdio buffer size to make sure we catch
122 # any corner cases whether they relate to total message size equal to
123 # buffer size or to body size equal to buffer size.
124 START
=$(($STDIO_BUFSZ - 16))
125 FINISH
=$(($STDIO_BUFSZ + $HDRSZ + $FROMLINESZ + 32))
126 echo "Testing inc of files with various alignments of eom marker with buffer size..."
128 while test $i -le $FINISH; do
129 progress_update
$i $START $FINISH
136 test ${failed:-0} -eq 0 && \
137 rm "$MH_TEST_DIR/eom-align.mbox" "$MH_TEST_DIR/eom-align.mbox.body"