X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2Fmultipart;h=dced23ec99c0f7740da1e0badd7859a2174735f0;hp=7757b3774b8ecb2785b31dd2549c10455804bbf6;hb=ea3a26f590b1d1957907ab83b17a0fe95beb0e3d;hpb=33cf04c6a5f76cba2bf56a27504eaf9ac022f5a2 diff --git a/test/multipart b/test/multipart index 7757b377..dced23ec 100755 --- a/test/multipart +++ b/test/multipart @@ -29,7 +29,7 @@ Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org> MIME-Version: 1.0 Content-Type: text/html -

This is an imbeded message, with a single html part.

+

This is an embedded message, with a single html part.

--=-=-= Content-Disposition: attachment; filename=attachment @@ -56,14 +56,46 @@ W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE -----END PGP SIGNATURE----- --==-=-=-- EOF + +cat < ${MAIL_DIR}/base64-part-with-crlf +From: Carl Worth +To: cworth@cworth.org +Subject: Test message with a BASE64 encoded binary containing CRLF pair +Date: Tue, 05 Jan 2001 15:43:57 -0000 +User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu) +Message-ID: +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="==-=-="; + +--==-=-= + +The attached BASE64-encoded part expands to a binary containing a CRLF +pair (that is one bye of 0x0D followed by one byte of 0x0A). This is +designed to ensure that notmuch is not corrupting the output of this +part by converting the CRLF pair to an LF only (as would be appropriate +for display of a text part on a Linux system, for example). + +The part should be a 3-byte file with the following sequence of 3 +hexadecimal bytes: + + EF 0D 0A + +--==-=-= +Content-Type: application/octet-stream +Content-Disposition: attachment; filename=crlf.bin +Content-Transfer-Encoding: base64 + +7w0K +--==-=-=-- +EOF notmuch new > /dev/null test_begin_subtest "--format=text --part=0, full message" -output=$(notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" message{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart +notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + message{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart header{ -Carl Worth (2001-01-05) (attachment inbox unread) +Carl Worth (2001-01-05) (attachment inbox signed unread) Subject: Multipart message From: Carl Worth To: cworth@cworth.org @@ -77,8 +109,7 @@ Date: Tue, 05 Jan 2001 15:43:57 -0000 Non-text part: text/html part} part} - attachment{ ID: 5, Content-type: text/plain -Attachment: attachment (text/plain) + attachment{ ID: 5, Filename: attachment, Content-type: text/plain This is a text attachment. attachment} part{ ID: 6, Content-type: text/plain @@ -92,20 +123,21 @@ Non-text part: application/pgp-signature part} part} body} - message}" + message} +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=text --part=1, message body" -output=$(notmuch show --format=text --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" part{ ID: 1, Content-type: multipart/signed +notmuch show --format=text --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + part{ ID: 1, Content-type: multipart/signed part{ ID: 2, Content-type: multipart/mixed part{ ID: 3, Content-type: message/rfc822 part{ ID: 4, Content-type: text/html Non-text part: text/html part} part} - attachment{ ID: 5, Content-type: text/plain -Attachment: attachment (text/plain) + attachment{ ID: 5, Filename: attachment, Content-type: text/plain This is a text attachment. attachment} part{ ID: 6, Content-type: text/plain @@ -117,19 +149,20 @@ And this message is signed. part{ ID: 7, Content-type: application/pgp-signature Non-text part: application/pgp-signature part} - part}" + part} +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=text --part=2, multipart/mixed" -output=$(notmuch show --format=text --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" part{ ID: 2, Content-type: multipart/mixed +notmuch show --format=text --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + part{ ID: 2, Content-type: multipart/mixed part{ ID: 3, Content-type: message/rfc822 part{ ID: 4, Content-type: text/html Non-text part: text/html part} part} - attachment{ ID: 5, Content-type: text/plain -Attachment: attachment (text/plain) + attachment{ ID: 5, Filename: attachment, Content-type: text/plain This is a text attachment. attachment} part{ ID: 6, Content-type: text/plain @@ -137,47 +170,58 @@ And this message is signed. -Carl part} - part}" + part} +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=text --part=3, rfc822 multipart" -output=$(notmuch show --format=text --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" part{ ID: 3, Content-type: message/rfc822 +notmuch show --format=text --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + part{ ID: 3, Content-type: message/rfc822 part{ ID: 4, Content-type: text/html Non-text part: text/html part} - part}" + part} +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=text --part=4, html part" -output=$(notmuch show --format=text --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" part{ ID: 4, Content-type: text/html +notmuch show --format=text --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + part{ ID: 4, Content-type: text/html Non-text part: text/html - part}" + part} +EOF +test_expect_equal_file OUTPUT EXPECTED -test_begin_subtest "--format=text --part=5, inline attachement" -output=$(notmuch show --format=text --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" attachment{ ID: 5, Content-type: text/plain -Attachment: attachment (text/plain) +test_begin_subtest "--format=text --part=5, inline attachment" +notmuch show --format=text --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + attachment{ ID: 5, Filename: attachment, Content-type: text/plain This is a text attachment. - attachment}" + attachment} +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=text --part=6, plain text part" -output=$(notmuch show --format=text --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" part{ ID: 6, Content-type: text/plain +notmuch show --format=text --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + part{ ID: 6, Content-type: text/plain And this message is signed. -Carl - part}" + part} +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=text --part=7, pgp signature (unverified)" -output=$(notmuch show --format=text --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -" part{ ID: 7, Content-type: application/pgp-signature +notmuch show --format=text --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED + part{ ID: 7, Content-type: application/pgp-signature Non-text part: application/pgp-signature - part}" + part} +EOF +test_expect_equal_file OUTPUT EXPECTED test_expect_success \ "--format=text --part=8, no part, expect error" \ @@ -186,7 +230,7 @@ test_expect_success \ test_begin_subtest "--format=json --part=0, full message" output=$(notmuch show --format=json --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org') test_expect_equal "$output" \ -'{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "'"${MAIL_DIR}/multipart"'", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth ", "To": "cworth@cworth.org", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "multipart/signed", "content": [{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 7, "content-type": "application/pgp-signature"}]}]}' +'{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "'"${MAIL_DIR}/multipart"'", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","signed","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth ", "To": "cworth@cworth.org", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "multipart/signed", "content": [{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 7, "content-type": "application/pgp-signature"}]}]}' test_begin_subtest "--format=json --part=1, message body" output=$(notmuch show --format=json --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org') @@ -228,17 +272,19 @@ test_expect_success \ "notmuch show --format=json --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'" test_begin_subtest "--format=raw" -output=$(notmuch show --format=raw 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)" +notmuch show --format=raw 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart test_begin_subtest "--format=raw --part=0, full message" -output=$(notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)" +notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart test_begin_subtest "--format=raw --part=1, message body" -output=$(notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'

This is an imbeded message, with a single html part.

+notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +# output should *not* include newline +echo >>OUTPUT +cat <EXPECTED +

This is an embedded message, with a single html part.

This is a text attachment. And this message is signed. @@ -249,65 +295,86 @@ Version: GnuPG v1.4.11 (GNU/Linux) iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE =zkga ------END PGP SIGNATURE-----' +-----END PGP SIGNATURE----- +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=raw --part=2, multipart/mixed" -output=$(notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'

This is an imbeded message, with a single html part.

+notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED +

This is an embedded message, with a single html part.

This is a text attachment. And this message is signed. --Carl' +-Carl +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=raw --part=3, rfc822 multipart" -output=$(notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'

This is an imbeded message, with a single html part.

' +notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED +

This is an embedded message, with a single html part.

+EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=raw --part=4, html part" -output=$(notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'

This is an imbeded message, with a single html part.

' +notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED +

This is an embedded message, with a single html part.

+EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=raw --part=5, inline attachment" -output=$(notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'This is a text attachment.' +notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED +This is a text attachment. +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=raw --part=6, plain text part" -output=$(notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'And this message is signed. +notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED +And this message is signed. --Carl' +-Carl +EOF +test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "--format=raw --part=7, pgp signature (unverified)" -output=$(notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" \ -'-----BEGIN PGP SIGNATURE----- +notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +# output should *not* include newline +echo >>OUTPUT +cat <EXPECTED +-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE =zkga ------END PGP SIGNATURE-----' +-----END PGP SIGNATURE----- +EOF +test_expect_equal_file OUTPUT EXPECTED test_expect_success \ "--format=raw --part=8, no part, expect error" \ "notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'" test_begin_subtest "--format=mbox" -output=$(notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" "$(printf "From cworth@cworth.org Fri Jan 5 15:43:57 2001\n"; cat "${MAIL_DIR}"/multipart)" +notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +printf "From cworth@cworth.org Fri Jan 5 15:43:57 2001\n" >EXPECTED +cat "${MAIL_DIR}"/multipart >>EXPECTED +# mbox output is expected to include a blank line +echo >>EXPECTED +test_expect_equal_file OUTPUT EXPECTED test_expect_success \ "--format=mbox --part=1, incompatible, expect error" \ "! notmuch show --format=mbox --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org'" test_begin_subtest "'notmuch reply' to a multipart message" -output=$(notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org') -test_expect_equal "$output" "From: Notmuch Test Suite +notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT +cat <EXPECTED +From: Notmuch Test Suite Subject: Re: Multipart message To: Carl Worth , cworth@cworth.org In-Reply-To: <87liy5ap00.fsf@yoom.home.cworth.org> @@ -322,7 +389,13 @@ Non-text part: text/html > And this message is signed. > > -Carl -Non-text part: application/pgp-signature" +Non-text part: application/pgp-signature +EOF +test_expect_equal_file OUTPUT EXPECTED +test_begin_subtest "'notmuch show --part' does not corrupt a part with CRLF pair" +notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out +echo -n -e "\xEF\x0D\x0A" > crlf.expected +test_expect_equal_file crlf.out crlf.expected test_done