mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-27 11:51:42 +01:00
47afbdfb79
With the fix for the mtime race, this workaround is no longer necessary.
414 lines
15 KiB
Bash
Executable file
414 lines
15 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
test_description="output of multipart message"
|
||
. ./test-lib.sh
|
||
|
||
cat <<EOF > ${MAIL_DIR}/multipart
|
||
From: Carl Worth <cworth@cworth.org>
|
||
To: cworth@cworth.org
|
||
Subject: Multipart message
|
||
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: <87liy5ap00.fsf@yoom.home.cworth.org>
|
||
MIME-Version: 1.0
|
||
Content-Type: multipart/signed; boundary="==-=-=";
|
||
micalg=pgp-sha1; protocol="application/pgp-signature"
|
||
|
||
--==-=-=
|
||
Content-Type: multipart/mixed; boundary="=-=-="
|
||
|
||
--=-=-=
|
||
Content-Type: message/rfc822
|
||
Content-Disposition: inline
|
||
|
||
From: Carl Worth <cworth@cworth.org>
|
||
To: cworth@cworth.org
|
||
Subject: html message
|
||
Date: Tue, 05 Jan 2001 15:42:57 -0000
|
||
User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
|
||
Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
|
||
MIME-Version: 1.0
|
||
Content-Type: text/html
|
||
|
||
<p>This is an embedded message, with a single html part.</p>
|
||
|
||
--=-=-=
|
||
Content-Disposition: attachment; filename=attachment
|
||
|
||
This is a text attachment.
|
||
|
||
--=-=-=
|
||
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
|
||
--=-=-=--
|
||
|
||
--==-=-=
|
||
Content-Type: application/pgp-signature
|
||
|
||
-----BEGIN PGP SIGNATURE-----
|
||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||
|
||
iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
|
||
W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
|
||
=zkga
|
||
-----END PGP SIGNATURE-----
|
||
--==-=-=--
|
||
EOF
|
||
|
||
cat <<EOF > ${MAIL_DIR}/base64-part-with-crlf
|
||
From: Carl Worth <cworth@cworth.org>
|
||
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: <base64-part-with-crlf>
|
||
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"
|
||
notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
message{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart
|
||
header{
|
||
Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox signed unread)
|
||
Subject: Multipart message
|
||
From: Carl Worth <cworth@cworth.org>
|
||
To: cworth@cworth.org
|
||
Date: Tue, 05 Jan 2001 15:43:57 -0000
|
||
header}
|
||
body{
|
||
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, Filename: attachment, Content-type: text/plain
|
||
This is a text attachment.
|
||
attachment}
|
||
part{ ID: 6, Content-type: text/plain
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
part}
|
||
part}
|
||
part{ ID: 7, Content-type: application/pgp-signature
|
||
Non-text part: application/pgp-signature
|
||
part}
|
||
part}
|
||
body}
|
||
message}
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=text --part=0, full message"
|
||
notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
message{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart
|
||
header{
|
||
Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox signed unread)
|
||
Subject: Multipart message
|
||
From: Carl Worth <cworth@cworth.org>
|
||
To: cworth@cworth.org
|
||
Date: Tue, 05 Jan 2001 15:43:57 -0000
|
||
header}
|
||
body{
|
||
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, Filename: attachment, Content-type: text/plain
|
||
This is a text attachment.
|
||
attachment}
|
||
part{ ID: 6, Content-type: text/plain
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
part}
|
||
part}
|
||
part{ ID: 7, Content-type: application/pgp-signature
|
||
Non-text part: application/pgp-signature
|
||
part}
|
||
part}
|
||
body}
|
||
message}
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=text --part=2, multipart/mixed"
|
||
notmuch show --format=text --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >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, Filename: attachment, Content-type: text/plain
|
||
This is a text attachment.
|
||
attachment}
|
||
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=3, rfc822 multipart"
|
||
notmuch show --format=text --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
part{ ID: 3, Content-type: message/rfc822
|
||
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=4, html part"
|
||
notmuch show --format=text --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
part{ ID: 4, Content-type: text/html
|
||
Non-text part: text/html
|
||
part}
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=text --part=5, inline attachment"
|
||
notmuch show --format=text --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
attachment{ ID: 5, Filename: attachment, Content-type: text/plain
|
||
This is a text attachment.
|
||
attachment}
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=text --part=6, plain text part"
|
||
notmuch show --format=text --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
part{ ID: 6, Content-type: text/plain
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
part}
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=text --part=7, pgp signature (unverified)"
|
||
notmuch show --format=text --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
part{ ID: 7, Content-type: application/pgp-signature
|
||
Non-text part: application/pgp-signature
|
||
part}
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_expect_success \
|
||
"--format=text --part=8, no part, expect error" \
|
||
"notmuch show --format=text --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
|
||
|
||
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","signed","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth <cworth@cworth.org>", "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')
|
||
test_expect_equal "$output" \
|
||
'{"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=2, multipart/mixed"
|
||
output=$(notmuch show --format=json --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
|
||
test_expect_equal "$output" \
|
||
'{"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"}]}'
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=json --part=3, rfc822 multipart"
|
||
output=$(notmuch show --format=json --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
|
||
test_expect_equal "$output" \
|
||
'{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}'
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=json --part=4, html part"
|
||
output=$(notmuch show --format=json --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
|
||
test_expect_equal "$output" \
|
||
'{"id": 4, "content-type": "text/html"}'
|
||
|
||
test_begin_subtest "--format=json --part=5, inline attachment"
|
||
output=$(notmuch show --format=json --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
|
||
test_expect_equal "$output" \
|
||
'{"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}'
|
||
|
||
test_begin_subtest "--format=json --part=6, plain text part"
|
||
output=$(notmuch show --format=json --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
|
||
test_expect_equal "$output" \
|
||
'{"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}'
|
||
|
||
test_begin_subtest "--format=json --part=7, pgp signature (unverified)"
|
||
output=$(notmuch show --format=json --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
|
||
test_expect_equal "$output" \
|
||
'{"id": 7, "content-type": "application/pgp-signature"}'
|
||
|
||
test_expect_success \
|
||
"--format=json --part=8, no part, expect error" \
|
||
"notmuch show --format=json --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
|
||
|
||
test_begin_subtest "--format=raw"
|
||
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"
|
||
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"
|
||
notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
# output should *not* include newline
|
||
echo >>OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
<p>This is an embedded message, with a single html part.</p>
|
||
This is a text attachment.
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
-----BEGIN PGP SIGNATURE-----
|
||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||
|
||
iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
|
||
W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
|
||
=zkga
|
||
-----END PGP SIGNATURE-----
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=raw --part=2, multipart/mixed"
|
||
notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
<p>This is an embedded message, with a single html part.</p>
|
||
This is a text attachment.
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=raw --part=3, rfc822 multipart"
|
||
notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
<p>This is an embedded message, with a single html part.</p>
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=raw --part=4, html part"
|
||
notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
<p>This is an embedded message, with a single html part.</p>
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=raw --part=5, inline attachment"
|
||
notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
This is a text attachment.
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=raw --part=6, plain text part"
|
||
notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
And this message is signed.
|
||
|
||
-Carl
|
||
EOF
|
||
test_expect_equal_file OUTPUT EXPECTED
|
||
|
||
test_begin_subtest "--format=raw --part=7, pgp signature (unverified)"
|
||
notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
# output should *not* include newline
|
||
echo >>OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
-----BEGIN PGP SIGNATURE-----
|
||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||
|
||
iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
|
||
W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
|
||
=zkga
|
||
-----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"
|
||
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"
|
||
notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
|
||
cat <<EOF >EXPECTED
|
||
From: Notmuch Test Suite <test_suite@notmuchmail.org>
|
||
Subject: Re: Multipart message
|
||
To: Carl Worth <cworth@cworth.org>, cworth@cworth.org
|
||
In-Reply-To: <87liy5ap00.fsf@yoom.home.cworth.org>
|
||
References: <87liy5ap00.fsf@yoom.home.cworth.org>
|
||
|
||
On Tue, 05 Jan 2001 15:43:57 -0000, Carl Worth <cworth@cworth.org> wrote:
|
||
Non-text part: multipart/signed
|
||
Non-text part: multipart/mixed
|
||
Non-text part: message/rfc822
|
||
Non-text part: text/html
|
||
> This is a text attachment.
|
||
> And this message is signed.
|
||
>
|
||
> -Carl
|
||
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
|