X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/0ecdc197e9a9a4d2bb6dce395dea152fbc728b6b..1d5e6d0340ba258b34b85ccdac4c402ccf4fd51e:/test/mhstore/test-mhstore diff --git a/test/mhstore/test-mhstore b/test/mhstore/test-mhstore index 3dde1ca4..7235d6f4 100755 --- a/test/mhstore/test-mhstore +++ b/test/mhstore/test-mhstore @@ -16,58 +16,84 @@ fi setup_test -expected=$MH_TEST_DIR/$$.expected -actual=$MH_TEST_DIR/$$.actual +check_exit '-eq 1' mhstore - -cd $MH_TEST_DIR +expected="$MH_TEST_DIR/test-mhstore$$.expected" +expected2="$MH_TEST_DIR/test-mhstore$$.expected2" +expected_err="$MH_TEST_DIR/test-mhmail$$.expected_err" +actual="$MH_TEST_DIR/test-mhstore$$.actual" +actual_err="$MH_TEST_DIR/test-mhmail$$.actual_err" + +cd "$MH_TEST_DIR" # check with no options and no current message +start_test 'with no options and no current message' run_test 'mhstore' 'mhstore: no cur message' # check with no options and current message -folder +inbox 5 > /dev/null -cat > $expected </dev/null +cat >"$expected" <<'EOF' This is message number 5 EOF run_test 'mhstore' 'storing message 5 as file 5.txt' -check $expected 5.txt 'keep first' +check "$expected" 5.txt 'keep first' # check with folder and current message +start_test 'with folder and current message' run_test 'mhstore +inbox' 'storing message 5 as file 5.txt' -check $expected 5.txt 'keep first' +check "$expected" 5.txt 'keep first' # check with specified message +start_test 'with specified message' run_test 'mhstore 5' 'storing message 5 as file 5.txt' -check $expected 5.txt 'keep first' +check "$expected" 5.txt 'keep first' # check -file +start_test '-file' run_test "mhstore -file $MH_TEST_DIR/Mail/inbox/5" \ "storing message $MH_TEST_DIR/Mail/inbox/5 as file 5.txt" -check $expected 5.txt 'keep first' +check "$expected" 5.txt 'keep first' # check -file - -stored_contents=`mhstore -file - < $MH_TEST_DIR/Mail/inbox/5 2>&1 | \ +start_test '-file -' +stored_contents=`run_prog mhstore -file - < $MH_TEST_DIR/Mail/inbox/5 2>&1 | \ sed 's/.*as file //'` -check $expected $stored_contents +check "$expected" "$stored_contents" 'keep first' + +# check -outfile and -noverbose +start_test '-outfile and -noverbose' +run_prog mhstore 5 -noverbose -outfile "$actual" >"$actual_err" 2>&1 +printf '' >"$expected_err" +check "$expected" "$actual" 'keep first' +check "$expected_err" "$actual_err" + +# check -outfile - +start_test '-outfile -' +printf '%s\n' 'storing message 5 to stdout' >>"$expected" +run_prog mhstore 5 -outfile - >"$actual" 2>&1 +check "$expected" "$actual" # check message number greater than highest +start_test 'message number greater than highest' run_test 'mhstore 11' "mhstore: message 11 doesn't exist" # check multiple messages +start_test 'multiple messages' run_test 'mhstore 4 6' 'storing message 4 as file 4.txt storing message 6 as file 6.txt' -cat > $expected <"$expected" <<'EOF' This is message number 4 EOF -check $expected 4.txt -cat > $expected <"$expected" <<'EOF' This is message number 6 EOF -check $expected 6.txt +check "$expected" 6.txt # Write message with a text/plain subpart. msgfile=`mhpath new` -cat > $msgfile <"$msgfile" <<'EOF' To: recipient@example.com From: sender@example.com Subject: mhlist test @@ -104,96 +130,134 @@ This is the third text/plain part. ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt" Content-Disposition: attachment; filename="test4.txt" +Content-MD5: cMI1lB/LZ4jgVl3EbhdyWA== Content-Transfer-Encoding: base64 -VGhpcyBpcyB0aGUgZm91cnRoIHRleHQvcGxhaW4gcGFydC4K +VGhpcyBpcyB0aGUgZm91cnRoIHRleHQvcGxhaW4gcGFydC4NClRoaXMgdGVzdCBoYXMgbXVsdGlw +bGUgbGluZXMuDQo= ------- =_aaaaaaaaaa0-- EOF # check -part -cat > $expected <"$expected" <<'EOF' This is the third text/plain part. EOF run_test 'mhstore last -part 3' 'storing message 11 part 3 as file 11.3.txt' -check $expected 11.3.txt +check "$expected" 11.3.txt # check -part of a subpart -cat > $expected <"$expected" <<'EOF' This is the first text/plain part, in a subpart. EOF run_test 'mhstore last -part 1.1' \ 'storing message 11 part 1.1 as file 11.1.1.txt' -check $expected 11.1.1.txt 'keep first' +check "$expected" 11.1.1.txt 'keep first' # check -type +start_test '-type' run_test 'mhstore last -type text/plain' \ 'storing message 11 part 1.1 as file 11.1.1.txt storing message 11 part 2 as file 11.2.txt storing message 11 part 3 as file 11.3.txt storing message 11 part 4 as file 11.4.txt' -check $expected 11.1.1.txt -cat > $expected <"$expected" <<'EOF' This is the second text/plain part. EOF -check $expected 11.2.txt -cat > $expected <"$expected" <<'EOF' This is the third text/plain part. EOF -check $expected 11.3.txt -cat > $expected <"$expected" <<'EOF' This is the fourth text/plain part. +This test has multiple lines. EOF -check $expected 11.4.txt +check "$expected" 11.4.txt # check -auto -cat > $expected <"$expected" <<'EOF' This is the fourth text/plain part. +This test has multiple lines. EOF run_test 'mhstore last -part 4 -auto' \ 'storing message 11 part 4 as file test4.txt' -check $expected test4.txt 'keep first' +check "$expected" test4.txt 'keep first' # check -noauto, the default +start_test '-noauto, the default' run_test 'mhstore last -part 4 -auto -noauto' \ 'storing message 11 part 4 as file 11.4.txt' -check $expected 11.4.txt 'keep first' +check "$expected" 11.4.txt 'keep first' -# check -verbose, which doesn't do anything -run_test 'mhstore last -part 4 -verbose' \ +# check -verbose, the default +start_test '-verbose, the default' +run_test 'mhstore last -part 4 -noverbose -verbose' \ 'storing message 11 part 4 as file 11.4.txt' -check $expected 11.4.txt 'keep first' +check "$expected" 11.4.txt 'keep first' -# check -noverbose, the default -run_test 'mhstore last -part 4 -verbose -noverbose' \ - 'storing message 11 part 4 as file 11.4.txt' -check $expected 11.4.txt +# check -noverbose +start_test '-noverbose' +run_test 'mhstore last -part 4 -noverbose' '' +check "$expected" 11.4.txt + +# check that -auto obeys Content-Disposition header +start_test 'that -auto obeys Content-Disposition header' +cat >"$expected" <<'EOF' +This is the first text/plain part, in a subpart. +EOF +run_test 'mhstore last -part 1.1 -auto' \ + 'storing message 11 part 1.1 as file test1.txt' +check "$expected" test1.txt # check -check -cat > $expected <"$expected" <<'EOF' This is the second text/plain part. EOF run_test 'mhstore last -part 2 -check' \ 'storing message 11 part 2 as file 11.2.txt' -check $expected 11.2.txt 'keep first' +check "$expected" 11.2.txt 'keep first' + +# check with -check on base64 encoded part +start_test 'with -check on base64 encoded part' +cat >"$expected2" <<'EOF' +This is the fourth text/plain part. +This test has multiple lines. +EOF +run_test 'mhstore last -part 4 -check' \ + 'storing message 11 part 4 as file 11.4.txt' +check "$expected2" 11.4.txt # check -check with bad MD5 checksum -sed 's/\(Content-MD5: \)kq+Hnc/\1BADBAD/' $msgfile > $MH_TEST_DIR/$$.tmp -mv -f $MH_TEST_DIR/$$.tmp $msgfile +start_test '-check with bad MD5 checksum' +sed 's/\(Content-MD5: \)kq+Hnc/\1BADBAD/' "$msgfile" >"$MH_TEST_DIR/$$.tmp" +mv -f "$MH_TEST_DIR/$$.tmp" "$msgfile" run_test 'mhstore last -part 2 -check' \ 'storing message 11 part 2 as file 11.2.txt mhstore: content integrity suspect (digest mismatch) -- continuing (content text/plain in message 11, part 2)' -check $expected 11.2.txt 'keep first' +check "$expected" 11.2.txt 'keep first' # check -nocheck, the default +start_test '-nocheck, the default' run_test 'mhstore last -part 2 -check -nocheck' \ 'storing message 11 part 2 as file 11.2.txt' -check $expected 11.2.txt +check "$expected" 11.2.txt 'keep first' + +# check -outfile - with -file +start_test '-outfile - with -file' +run_prog mhstore -noverbose -file `mhpath 11` -part 2 -outfile - >"$actual" 2>&1 +check "$expected" "$actual" # check reassembly of message/partial messages (RFC 1521, 7.3.2) +start_test 'reassembly of message/partial messages (RFC 1521, 7.3.2)' msgfile=`mhpath new` -cat > $msgfile <"$msgfile" <<'EOF' To: recipient@example.com From: sender@example.com Subject: mhlist test @@ -206,7 +270,7 @@ This is part one of three. EOF msgfile=`mhpath new` -cat > $msgfile <"$msgfile" <<'EOF' To: recipient@example.com From: sender@example.com Subject: mhlist test @@ -217,7 +281,7 @@ This is part two of three. EOF msgfile=`mhpath new` -cat > $msgfile <"$msgfile" <<'EOF' To: recipient@example.com From: sender@example.com Subject: mhlist test @@ -231,50 +295,54 @@ EOF run_test 'mhstore last:3' \ 'reassembling partials 12,13,14 to folder inbox as message 15' -cat > $expected <"$expected" <<'EOF' This is part one of three. This is part two of three. This is part three of three. EOF run_test 'mhstore last' 'storing message 15 as file 15.txt' -check $expected 15.txt +check "$expected" 15.txt # cd into Mail directory because it gets cleaned up by the exit trap. cd Mail # check -clobber always -folder +inbox 7 > /dev/null +start_test '-clobber always' +folder +inbox 7 >/dev/null touch 7.txt -cat > $expected <"$expected" <<'EOF' This is message number 7 EOF run_test 'mhstore' 'storing message 7 as file 7.txt' -check $expected 7.txt 'keep first' +check "$expected" 7.txt 'keep first' run_test 'mhstore -clobber ask -clobber always' \ 'storing message 7 as file 7.txt' -check $expected 7.txt 'keep first' +check "$expected" 7.txt 'keep first' # check -clobber auto +start_test '-clobber auto' touch 7.txt run_test 'mhstore -clobber auto' 'storing message 7 as file 7-1.txt' -check $expected 7-1.txt 'keep first' +check "$expected" 7-1.txt 'keep first' touch 7-1.txt run_test 'mhstore -clobber auto' 'storing message 7 as file 7-2.txt' -check $expected 7-2.txt 'keep first' +check "$expected" 7-2.txt 'keep first' # check -clobber suffix +start_test '-clobber suffix' run_test 'mhstore -clobber suffix' 'storing message 7 as file 7.txt.1' -check $expected 7.txt.1 'keep first' +check "$expected" 7.txt.1 'keep first' touch 7.txt.1 run_test 'mhstore -clobber suffix' 'storing message 7 as file 7.txt.2' -check $expected 7.txt.2 'keep first' +check "$expected" 7.txt.2 'keep first' # Don't check -clobber ask because it requires connection to a # terminal, and this test won't always be run with one. # check -clobber never. Its exit status is the number of files not overwritten. +start_test '-clobber never. Its exit status is the number of files not overwritten.' run_test 'mhstore -clobber never' \ - "mhstore: will not overwrite `pwd`/7.txt with -clobber never" + "mhstore: will not overwrite $MH_TEST_DIR/Mail/7.txt with -clobber never" set +e mhstore -clobber never >/dev/null 2>&1 run_test "echo $?" 1 @@ -282,37 +350,56 @@ set -e cd .. -# check with relative nmh-storage profile component -storagedir=storagedir +# check with short relative nmh-storage profile component +start_test 'with short relative nmh-storage profile component' +storagedir=s dir="$MH_TEST_DIR/Mail/inbox/$storagedir" mkdir "$dir" -echo "nmh-storage: $storagedir" >> $MH -cat > $expected <>"$MH" +cat >"$expected" <<'EOF' This is the fourth text/plain part. +This test has multiple lines. EOF run_test 'mhstore 11 -part 4' \ "storing message 11 part 4 as file $storagedir/11.4.txt" -check $expected "$dir/11.4.txt" 'keep first' +check "$expected" "$dir/11.4.txt" 'keep first' +rmdir "$dir" +sed '$d' "$MH" >"$MH.new" +mv "$MH.new" "$MH" + +# check with relative nmh-storage profile component +start_test 'with relative nmh-storage profile component' +storagedir=storagedir +dir="$MH_TEST_DIR/Mail/inbox/$storagedir" +mkdir "$dir" +printf '%s\n' "nmh-storage: $storagedir" >>"$MH" +run_test 'mhstore 11 -part 4' \ +"storing message 11 part 4 as file $storagedir/11.4.txt" +check "$expected" "$dir/11.4.txt" 'keep first' # check with relative nmh-storage profile component and -auto +start_test 'with relative nmh-storage profile component and -auto' run_test 'mhstore 11 -part 4 -auto' \ "storing message 11 part 4 as file $storagedir/test4.txt" -check $expected "$dir/test4.txt" 'keep first' +check "$expected" "$dir/test4.txt" 'keep first' # check with absolute nmh-storage profile component +start_test 'with absolute nmh-storage profile component' absstoragedir="$MH_TEST_DIR/$storagedir" mkdir "$absstoragedir" -sed "s%\(nmh-storage: \)storagedir%\1$absstoragedir%" $MH > $MH.new -mv -f $MH.new $MH +sed "s%\(nmh-storage: \)storagedir%\1$absstoragedir%" "$MH" >"$MH.new" +mv -f "$MH.new" "$MH" run_test 'mhstore 11 -part 4' \ "storing message 11 part 4 as file $storagedir/11.4.txt" -check $expected "$absstoragedir/11.4.txt" 'keep first' +check "$expected" "$absstoragedir/11.4.txt" 'keep first' # check with absolute nmh-storage profile component and -auto +start_test 'with absolute nmh-storage profile component and -auto' run_test 'mhstore 11 -part 4 -auto' \ "storing message 11 part 4 as file $storagedir/test4.txt" -check $expected "$absstoragedir/test4.txt" +check "$expected" "$absstoragedir/test4.txt" rmdir "$absstoragedir" +finish_test exit $failed