X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/86e9b55e2984ce54ed9bc99ebfc603e05ab8c2e8..7cb0987a56bd9b3dd24690f8999ec549487bcb62:/test/mhstore/test-mhstore diff --git a/test/mhstore/test-mhstore b/test/mhstore/test-mhstore index cbb1859a..0c94dc0b 100755 --- a/test/mhstore/test-mhstore +++ b/test/mhstore/test-mhstore @@ -16,39 +16,59 @@ fi setup_test -expected=$MH_TEST_DIR/$$.expected -actual=$MH_TEST_DIR/$$.actual - -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" +# ???? debug +echo MH_TEST_DIR=$MH_TEST_DIR +echo 'PWD ='$PWD +echo 'pwd ='`pwd` +echo 'pwd -L='`pwd -L` +echo 'pwd -P='`pwd -P` # check 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 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 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 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 | \ +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 +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 - +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 run_test 'mhstore 11' "mhstore: message 11 doesn't exist" @@ -56,18 +76,18 @@ run_test 'mhstore 11' "mhstore: message 11 doesn't exist" # check 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,27 +124,29 @@ 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 run_test 'mhstore last -type text/plain' \ @@ -132,68 +154,90 @@ run_test 'mhstore last -type text/plain' \ 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 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 +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 +run_test 'mhstore last -part 4 -noverbose' '' +check "$expected" 11.4.txt + +# check 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 +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 +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 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 +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) -msgfile=$(mhpath new) -cat > $msgfile <"$msgfile" <<'EOF' To: recipient@example.com From: sender@example.com Subject: mhlist test @@ -205,8 +249,8 @@ Content-Type: text/plain; charset="iso-8859-1" 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 @@ -216,8 +260,8 @@ Content-Type: message/partial; id="test-mhstore message/partial test"; number=2 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,44 +275,88 @@ 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 +touch 7.txt +cat >"$expected" <<'EOF' +This is message number 7 +EOF +run_test 'mhstore' 'storing message 7 as file 7.txt' +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 -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' +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 -clobber suffix +run_test 'mhstore -clobber suffix' 'storing message 7 as file 7.txt.1' +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' + +# 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. +run_test 'mhstore -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 +set -e + +cd .. # check with relative nmh-storage profile component storagedir=storagedir 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' # check 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 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 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"