]>
diplodocus.org Git - nmh/blob - test/mhstore/test-mhstore
2 ######################################################
6 ######################################################
10 if test -z "${MH_OBJ_DIR}"; then
11 srcdir
=`dirname $0`/..
/..
12 MH_OBJ_DIR
=`cd $srcdir && pwd`; export MH_OBJ_DIR
15 .
"$MH_OBJ_DIR/test/common.sh"
19 expected
="$MH_TEST_DIR/test-mhstore$$.expected"
20 expected2
="$MH_TEST_DIR/test-mhstore$$.expected2"
21 expected_err
="$MH_TEST_DIR/test-mhmail$$.expected_err"
22 actual
="$MH_TEST_DIR/test-mhstore$$.actual"
23 actual_err
="$MH_TEST_DIR/test-mhmail$$.actual_err"
27 # check with no options and no current message
28 start_test
'with no options and no current message'
29 run_test
'mhstore' 'mhstore: no cur message'
31 # check with no options and current message
32 start_test
'with no options and current message'
33 folder
+inbox
5 >/dev
/null
34 cat >"$expected" <<'EOF'
35 This is message number 5
37 run_test
'mhstore' 'storing message 5 as file 5.txt'
38 check
"$expected" 5.txt
'keep first'
40 # check with folder and current message
41 start_test
'with folder and current message'
42 run_test
'mhstore +inbox' 'storing message 5 as file 5.txt'
43 check
"$expected" 5.txt
'keep first'
45 # check with specified message
46 start_test
'with specified message'
47 run_test
'mhstore 5' 'storing message 5 as file 5.txt'
48 check
"$expected" 5.txt
'keep first'
52 run_test
"mhstore -file $MH_TEST_DIR/Mail/inbox/5" \
53 "storing message $MH_TEST_DIR/Mail/inbox/5 as file 5.txt"
54 check
"$expected" 5.txt
'keep first'
58 stored_contents
=`run_prog mhstore -file - < $MH_TEST_DIR/Mail/inbox/5 2>&1 | \
60 check
"$expected" "$stored_contents" 'keep first'
62 # check -outfile and -noverbose
63 start_test
'-outfile and -noverbose'
64 run_prog mhstore
5 -noverbose -outfile "$actual" >"$actual_err" 2>&1
65 printf '' >"$expected_err"
66 check
"$expected" "$actual" 'keep first'
67 check
"$expected_err" "$actual_err"
70 start_test
'-outfile -'
71 printf '%s\n' 'storing message 5 to stdout' >>"$expected"
72 run_prog mhstore
5 -outfile - >"$actual" 2>&1
73 check
"$expected" "$actual"
75 # check message number greater than highest
76 start_test
'message number greater than highest'
77 run_test
'mhstore 11' "mhstore: message 11 doesn't exist"
79 # check multiple messages
80 start_test
'multiple messages'
81 run_test
'mhstore 4 6' 'storing message 4 as file 4.txt
82 storing message 6 as file 6.txt'
83 cat >"$expected" <<'EOF'
84 This is message number 4
86 check
"$expected" 4.txt
87 cat >"$expected" <<'EOF'
88 This is message number 6
90 check
"$expected" 6.txt
92 # Write message with a text/plain subpart.
94 cat >"$msgfile" <<'EOF'
95 To: recipient@example.com
96 From: sender@example.com
99 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
101 ------- =_aaaaaaaaaa0
102 Content-Type: multipart/related;
103 type="multipart/alternative";
104 boundary="subpart__1.1"
107 Content-Type: text/plain; charset="iso-8859-1"
108 Content-Disposition: attachment; filename="test1.txt"
110 This is the first text/plain part, in a subpart.
114 ------- =_aaaaaaaaaa0
115 Content-Type: text/plain; charset="iso-8859-1"
116 Content-Disposition: attachment; filename="test2.txt"
117 Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
118 Content-Transfer-Encoding: quoted-printable
120 This is the second text/plain part.
122 ------- =_aaaaaaaaaa0
123 Content-Type: text/plain; charset="iso-8859-1"
124 Content-Disposition: attachment; filename="test3.txt"
126 This is the third text/plain part.
128 ------- =_aaaaaaaaaa0
129 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
130 Content-Disposition: attachment; filename="test4.txt"
131 Content-MD5: cMI1lB/LZ4jgVl3EbhdyWA==
132 Content-Transfer-Encoding: base64
134 VGhpcyBpcyB0aGUgZm91cnRoIHRleHQvcGxhaW4gcGFydC4NClRoaXMgdGVzdCBoYXMgbXVsdGlw
137 ------- =_aaaaaaaaaa0--
142 cat >"$expected" <<'EOF'
143 This is the third text/plain part.
145 run_test
'mhstore last -part 3' 'storing message 11 part 3 as file 11.3.txt'
146 check
"$expected" 11.3.txt
148 # check -part of a subpart
149 start_test
'-part of a subpart'
150 cat >"$expected" <<'EOF'
151 This is the first text/plain part, in a subpart.
153 run_test
'mhstore last -part 1.1' \
154 'storing message 11 part 1.1 as file 11.1.1.txt'
155 check
"$expected" 11.1.1.txt
'keep first'
159 run_test
'mhstore last -type text/plain' \
160 'storing message 11 part 1.1 as file 11.1.1.txt
161 storing message 11 part 2 as file 11.2.txt
162 storing message 11 part 3 as file 11.3.txt
163 storing message 11 part 4 as file 11.4.txt'
164 check
"$expected" 11.1.1.txt
165 cat >"$expected" <<'EOF'
166 This is the second text/plain part.
168 check
"$expected" 11.2.txt
169 cat >"$expected" <<'EOF'
170 This is the third text/plain part.
172 check
"$expected" 11.3.txt
173 cat >"$expected" <<'EOF'
174 This is the fourth text/plain part.
175 This test has multiple lines.
177 check
"$expected" 11.4.txt
181 cat >"$expected" <<'EOF'
182 This is the fourth text/plain part.
183 This test has multiple lines.
185 run_test
'mhstore last -part 4 -auto' \
186 'storing message 11 part 4 as file test4.txt'
187 check
"$expected" test4.txt
'keep first'
189 # check -noauto, the default
190 start_test
'-noauto, the default'
191 run_test
'mhstore last -part 4 -auto -noauto' \
192 'storing message 11 part 4 as file 11.4.txt'
193 check
"$expected" 11.4.txt
'keep first'
195 # check -verbose, the default
196 start_test
'-verbose, the default'
197 run_test
'mhstore last -part 4 -noverbose -verbose' \
198 'storing message 11 part 4 as file 11.4.txt'
199 check
"$expected" 11.4.txt
'keep first'
202 start_test
'-noverbose'
203 run_test
'mhstore last -part 4 -noverbose' ''
204 check
"$expected" 11.4.txt
206 # check that -auto obeys Content-Disposition header
207 start_test
'that -auto obeys Content-Disposition header'
208 cat >"$expected" <<'EOF'
209 This is the first text/plain part, in a subpart.
211 run_test
'mhstore last -part 1.1 -auto' \
212 'storing message 11 part 1.1 as file test1.txt'
213 check
"$expected" test1.txt
217 cat >"$expected" <<'EOF'
218 This is the second text/plain part.
220 run_test
'mhstore last -part 2 -check' \
221 'storing message 11 part 2 as file 11.2.txt'
222 check
"$expected" 11.2.txt
'keep first'
224 # check with -check on base64 encoded part
225 start_test
'with -check on base64 encoded part'
226 cat >"$expected2" <<'EOF'
227 This is the fourth text/plain part.
228 This test has multiple lines.
230 run_test
'mhstore last -part 4 -check' \
231 'storing message 11 part 4 as file 11.4.txt'
232 check
"$expected2" 11.4.txt
234 # check -check with bad MD5 checksum
235 start_test
'-check with bad MD5 checksum'
236 sed 's/\(Content-MD5: \)kq+Hnc/\1BADBAD/' "$msgfile" >"$MH_TEST_DIR/$$.tmp"
237 mv -f "$MH_TEST_DIR/$$.tmp" "$msgfile"
238 run_test
'mhstore last -part 2 -check' \
239 'storing message 11 part 2 as file 11.2.txt
240 mhstore: content integrity suspect (digest mismatch) -- continuing
241 (content text/plain in message 11, part 2)'
242 check
"$expected" 11.2.txt
'keep first'
244 # check -nocheck, the default
245 start_test
'-nocheck, the default'
246 run_test
'mhstore last -part 2 -check -nocheck' \
247 'storing message 11 part 2 as file 11.2.txt'
248 check
"$expected" 11.2.txt
'keep first'
250 # check -outfile - with -file
251 start_test
'-outfile - with -file'
252 run_prog mhstore
-noverbose -file `mhpath 11` -part 2 -outfile - >"$actual" 2>&1
253 check
"$expected" "$actual"
255 # check reassembly of message/partial messages (RFC 1521, 7.3.2)
256 start_test
'reassembly of message/partial messages (RFC 1521, 7.3.2)'
258 cat >"$msgfile" <<'EOF'
259 To: recipient@example.com
260 From: sender@example.com
263 Content-Type: message/partial; id="test-mhstore message/partial test"; number=1
265 Content-Type: text/plain; charset="iso-8859-1"
267 This is part one of three.
271 cat >"$msgfile" <<'EOF'
272 To: recipient@example.com
273 From: sender@example.com
276 Content-Type: message/partial; id="test-mhstore message/partial test"; number=2
278 This is part two of three.
282 cat >"$msgfile" <<'EOF'
283 To: recipient@example.com
284 From: sender@example.com
287 Content-Type: message/partial; id="test-mhstore message/partial test"; number=3;
290 This is part three of three.
293 run_test
'mhstore last:3' \
294 'reassembling partials 12,13,14 to folder inbox as message 15'
296 cat >"$expected" <<'EOF'
297 This is part one of three.
298 This is part two of three.
299 This is part three of three.
301 run_test
'mhstore last' 'storing message 15 as file 15.txt'
302 check
"$expected" 15.txt
304 # cd into Mail directory because it gets cleaned up by the exit trap.
307 # check -clobber always
308 start_test
'-clobber always'
309 folder
+inbox
7 >/dev
/null
311 cat >"$expected" <<'EOF'
312 This is message number 7
314 run_test
'mhstore' 'storing message 7 as file 7.txt'
315 check
"$expected" 7.txt
'keep first'
316 run_test
'mhstore -clobber ask -clobber always' \
317 'storing message 7 as file 7.txt'
318 check
"$expected" 7.txt
'keep first'
320 # check -clobber auto
321 start_test
'-clobber auto'
323 run_test
'mhstore -clobber auto' 'storing message 7 as file 7-1.txt'
324 check
"$expected" 7-1.txt
'keep first'
326 run_test
'mhstore -clobber auto' 'storing message 7 as file 7-2.txt'
327 check
"$expected" 7-2.txt
'keep first'
329 # check -clobber suffix
330 start_test
'-clobber suffix'
331 run_test
'mhstore -clobber suffix' 'storing message 7 as file 7.txt.1'
332 check
"$expected" 7.txt
.1 'keep first'
334 run_test
'mhstore -clobber suffix' 'storing message 7 as file 7.txt.2'
335 check
"$expected" 7.txt
.2 'keep first'
337 # Don't check -clobber ask because it requires connection to a
338 # terminal, and this test won't always be run with one.
340 # check -clobber never. Its exit status is the number of files not overwritten.
341 start_test
'-clobber never. Its exit status is the number of files not overwritten.'
342 run_test
'mhstore -clobber never' \
343 "mhstore: will not overwrite $MH_TEST_DIR/Mail/7.txt with -clobber never"
345 mhstore
-clobber never
>/dev
/null
2>&1
351 # check with relative nmh-storage profile component
352 start_test
'with relative nmh-storage profile component'
353 storagedir
=storagedir
354 dir
="$MH_TEST_DIR/Mail/inbox/$storagedir"
356 printf '%s\n' "nmh-storage: $storagedir" >>"$MH"
357 cat >"$expected" <<'EOF'
358 This is the fourth text/plain part.
359 This test has multiple lines.
361 run_test
'mhstore 11 -part 4' \
362 "storing message 11 part 4 as file $storagedir/11.4.txt"
363 check
"$expected" "$dir/11.4.txt" 'keep first'
365 # check with relative nmh-storage profile component and -auto
366 start_test
'with relative nmh-storage profile component and -auto'
367 run_test
'mhstore 11 -part 4 -auto' \
368 "storing message 11 part 4 as file $storagedir/test4.txt"
369 check
"$expected" "$dir/test4.txt" 'keep first'
371 # check with absolute nmh-storage profile component
372 start_test
'with absolute nmh-storage profile component'
373 absstoragedir
="$MH_TEST_DIR/$storagedir"
374 mkdir "$absstoragedir"
375 sed "s%\(nmh-storage: \)storagedir%\1$absstoragedir%" "$MH" >"$MH.new"
376 mv -f "$MH.new" "$MH"
377 run_test
'mhstore 11 -part 4' \
378 "storing message 11 part 4 as file $storagedir/11.4.txt"
379 check
"$expected" "$absstoragedir/11.4.txt" 'keep first'
381 # check with absolute nmh-storage profile component and -auto
382 start_test
'with absolute nmh-storage profile component and -auto'
383 run_test
'mhstore 11 -part 4 -auto' \
384 "storing message 11 part 4 as file $storagedir/test4.txt"
385 check
"$expected" "$absstoragedir/test4.txt"
386 rmdir "$absstoragedir"