* [PATCH v2 0/3] indicate length of omitted body content @ 2012-08-08 12:27 Peter Wang 2012-08-08 12:27 ` [PATCH v2 1/3] test: normalize only message filenames in show json Peter Wang ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Peter Wang @ 2012-08-08 12:27 UTC (permalink / raw) To: notmuch The first commit is tangentally related. An expected test case output in test/crypto previously had a filename left unnormalised by notmuch_json_show_sanitize because it was not followed by comma. The next commit causes the comma to be present, breaking the expected output. In the 2nd commit, a content-transfer-encoding field was added and comments clarified. In the 3rd commit, the content-length of an encrypted attachment had to be normalised because it varies between runs. Peter Wang (3): test: normalize only message filenames in show json show: indicate length, encoding of omitted body content test: conform to content length, encoding fields devel/schemata | 9 ++++++++- notmuch-show.c | 14 ++++++++++++++ test/crypto | 30 +++++++++++++++++++++--------- test/json | 2 +- test/multipart | 11 ++++++----- test/test-lib.sh | 2 +- 6 files changed, 51 insertions(+), 17 deletions(-) -- 1.7.4.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/3] test: normalize only message filenames in show json 2012-08-08 12:27 [PATCH v2 0/3] indicate length of omitted body content Peter Wang @ 2012-08-08 12:27 ` Peter Wang 2012-08-08 12:27 ` [PATCH v2 2/3] show: indicate length, encoding of omitted body content Peter Wang 2012-08-08 12:27 ` [PATCH v2 3/3] test: conform to content length, encoding fields Peter Wang 2 siblings, 0 replies; 8+ messages in thread From: Peter Wang @ 2012-08-08 12:27 UTC (permalink / raw) To: notmuch notmuch_json_show_sanitize replaced "filename" field values even in part structures, where the value is predictable. Make it only normalize the filename value if it is an absolute path (begins with slash), which is true of the Maildir filenames that were intended to be normalized away. --- test/multipart | 2 +- test/test-lib.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/multipart b/test/multipart index 0527f84..344ed81 100755 --- a/test/multipart +++ b/test/multipart @@ -630,7 +630,7 @@ cat <<EOF >EXPECTED "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, {"id": 7, "content-type": "text/plain", - "filename": "YYYYY", + "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 8, "content-type": "text/plain", diff --git a/test/test-lib.sh b/test/test-lib.sh index 791d2dc..983694e 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -577,7 +577,7 @@ notmuch_json_show_sanitize () { sed \ -e 's|"id": "[^"]*",|"id": "XXXXX",|g' \ - -e 's|"filename": "[^"]*",|"filename": "YYYYY",|g' + -e 's|"filename": "/[^"]*",|"filename": "YYYYY",|g' } # End of notmuch helper functions -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/3] show: indicate length, encoding of omitted body content 2012-08-08 12:27 [PATCH v2 0/3] indicate length of omitted body content Peter Wang 2012-08-08 12:27 ` [PATCH v2 1/3] test: normalize only message filenames in show json Peter Wang @ 2012-08-08 12:27 ` Peter Wang 2012-08-08 12:27 ` [PATCH v2 3/3] test: conform to content length, encoding fields Peter Wang 2 siblings, 0 replies; 8+ messages in thread From: Peter Wang @ 2012-08-08 12:27 UTC (permalink / raw) To: notmuch If a leaf part's body content is omitted, return the encoded length and transfer encoding in --format=json output. This information may be used by the consumer, e.g. to decide whether to download a large attachment over a slow link. Returning the _encoded_ content length is more efficient than returning the _decoded_ content length. Returning the transfer encoding allows the consumer to estimate the decoded content length. --- devel/schemata | 9 ++++++++- notmuch-show.c | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 1 deletions(-) diff --git a/devel/schemata b/devel/schemata index 9cb25f5..094b9a5 100644 --- a/devel/schemata +++ b/devel/schemata @@ -69,7 +69,14 @@ part = { # A leaf part's body content is optional, but may be included if # it can be correctly encoded as a string. Consumers should use # this in preference to fetching the part content separately. - content?: string + content?: string, + # If a leaf part's body content is not included, the length of + # the encoded content (in bytes) may be given instead. + content-length?: int, + # If a leaf part's body content is not included, its transfer encoding + # may be given. Using this and the encoded content length, it is + # possible for the consumer to estimate the decoded content length. + content-transfer-encoding?: string } # The headers of a message or part (format_headers_json with reply = FALSE) diff --git a/notmuch-show.c b/notmuch-show.c index 3556293..83535c7 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -664,6 +664,20 @@ format_part_json (const void *ctx, sprinter_t *sp, mime_node_t *node, sp->map_key (sp, "content"); sp->string_len (sp, (char *) part_content->data, part_content->len); g_object_unref (stream_memory); + } else { + GMimeDataWrapper *wrapper = g_mime_part_get_content_object (GMIME_PART (node->part)); + GMimeStream *stream = g_mime_data_wrapper_get_stream (wrapper); + ssize_t length = g_mime_stream_length (stream); + const char *cte = g_mime_object_get_header (meta, "content-transfer-encoding"); + + if (length >= 0) { + sp->map_key (sp, "content-length"); + sp->integer (sp, length); + } + if (cte) { + sp->map_key (sp, "content-transfer-encoding"); + sp->string (sp, cte); + } } } else if (GMIME_IS_MULTIPART (node->part)) { sp->map_key (sp, "content"); -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 3/3] test: conform to content length, encoding fields 2012-08-08 12:27 [PATCH v2 0/3] indicate length of omitted body content Peter Wang 2012-08-08 12:27 ` [PATCH v2 1/3] test: normalize only message filenames in show json Peter Wang 2012-08-08 12:27 ` [PATCH v2 2/3] show: indicate length, encoding of omitted body content Peter Wang @ 2012-08-08 12:27 ` Peter Wang 2012-10-20 2:21 ` Ethan Glasser-Camp 2012-10-21 3:04 ` [PATCH v3] " Peter Wang 2 siblings, 2 replies; 8+ messages in thread From: Peter Wang @ 2012-08-08 12:27 UTC (permalink / raw) To: notmuch Update tests to expect content-length and content-transfer-encoding fields in show --format=json output, for leaf parts with omitted body content. --- test/crypto | 30 +++++++++++++++++++++--------- test/json | 2 +- test/multipart | 9 +++++---- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/test/crypto b/test/crypto index 5dd14c4..aa96ec2 100755 --- a/test/crypto +++ b/test/crypto @@ -61,7 +61,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -95,7 +96,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -127,7 +129,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -196,7 +199,8 @@ expected='[[[{"id": "XXXXX", "sigstatus": [], "content-type": "multipart/encrypted", "content": [{"id": 2, - "content-type": "application/pgp-encrypted"}, + "content-type": "application/pgp-encrypted", + "content-length": 11}, {"id": 3, "content-type": "multipart/mixed", "content": [{"id": 4, @@ -204,6 +208,8 @@ expected='[[[{"id": "XXXXX", "content": "This is a test encrypted message.\n"}, {"id": 5, "content-type": "application/octet-stream", + "content-length": 28, + "content-transfer-encoding": "base64", "filename": "TESTATTACHMENT"}]}]}]}, []]]]' test_expect_equal_json \ @@ -231,9 +237,11 @@ test_expect_equal_file OUTPUT TESTATTACHMENT test_begin_subtest "decryption failure with missing key" mv "${GNUPGHOME}"{,.bak} +# The length of the encrypted attachment varies so must be normalized. output=$(notmuch show --format=json --decrypt subject:"test encrypted message 001" \ | notmuch_json_show_sanitize \ - | sed -e 's|"created": [1234567890]*|"created": 946728000|') + | sed -e 's|"created": [1234567890]*|"created": 946728000|' \ + | sed -e 's|"content-length": 6[1234567890]*|"content-length": 652|') expected='[[[{"id": "XXXXX", "match": true, "excluded": false, @@ -249,9 +257,11 @@ expected='[[[{"id": "XXXXX", "encstatus": [{"status": "bad"}], "content-type": "multipart/encrypted", "content": [{"id": 2, - "content-type": "application/pgp-encrypted"}, + "content-type": "application/pgp-encrypted", + "content-length": 11}, {"id": 3, - "content-type": "application/octet-stream"}]}]}, + "content-type": "application/octet-stream", + "content-length": 652}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -287,7 +297,8 @@ expected='[[[{"id": "XXXXX", "userid": " Notmuch Test Suite <test_suite@notmuchmail.org> (INSECURE!)"}], "content-type": "multipart/encrypted", "content": [{"id": 2, - "content-type": "application/pgp-encrypted"}, + "content-type": "application/pgp-encrypted", + "content-length": 11}, {"id": 3, "content-type": "text/plain", "content": "This is another test encrypted message.\n"}]}]}, @@ -342,7 +353,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ diff --git a/test/json b/test/json index ac8fa8e..8ce2e8a 100755 --- a/test/json +++ b/test/json @@ -45,7 +45,7 @@ emacs_deliver_message \ (insert \"Message-ID: <$id>\n\")" output=$(notmuch show --format=json "id:$id") filename=$(notmuch search --output=files "id:$id") -test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"filename\": \"README\"}]}]}, []]]]" +test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"content-length\": 12392, \"content-transfer-encoding\": \"base64\", \"filename\": \"README\"}]}]}, []]]]" test_begin_subtest "Search message: json, utf-8" add_message "[subject]=\"json-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\"" diff --git a/test/multipart b/test/multipart index 344ed81..497f3ec 100755 --- a/test/multipart +++ b/test/multipart @@ -330,7 +330,7 @@ cat <<EOF >EXPECTED {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, -{"id": 9, "content-type": "application/pgp-signature"}]}]} +{"id": 9, "content-type": "application/pgp-signature", "content-length": 197}]}]} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" @@ -345,7 +345,7 @@ cat <<EOF >EXPECTED {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, -{"id": 9, "content-type": "application/pgp-signature"}]} +{"id": 9, "content-type": "application/pgp-signature", "content-length": 197}]} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" @@ -412,7 +412,7 @@ test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" test_begin_subtest "--format=json --part=9, pgp signature (unverified)" notmuch show --format=json --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT cat <<EOF >EXPECTED -{"id": 9, "content-type": "application/pgp-signature"} +{"id": 9, "content-type": "application/pgp-signature", "content-length": 197} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" @@ -636,7 +636,8 @@ cat <<EOF >EXPECTED "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 9, - "content-type": "application/pgp-signature"}]}]}} + "content-type": "application/pgp-signature", + "content-length": 197}]}]}} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/3] test: conform to content length, encoding fields 2012-08-08 12:27 ` [PATCH v2 3/3] test: conform to content length, encoding fields Peter Wang @ 2012-10-20 2:21 ` Ethan Glasser-Camp 2012-10-21 3:03 ` Peter Wang 2012-10-21 3:04 ` [PATCH v3] " Peter Wang 1 sibling, 1 reply; 8+ messages in thread From: Ethan Glasser-Camp @ 2012-10-20 2:21 UTC (permalink / raw) To: Peter Wang, notmuch Peter Wang <novalazy@gmail.com> writes: > Update tests to expect content-length and content-transfer-encoding > fields in show --format=json output, for leaf parts with omitted body > content. These three patches all look fine to me, except for the following problem. > diff --git a/test/json b/test/json > index ac8fa8e..8ce2e8a 100755 > --- a/test/json > +++ b/test/json > @@ -45,7 +45,7 @@ emacs_deliver_message \ > (insert \"Message-ID: <$id>\n\")" > output=$(notmuch show --format=json "id:$id") > filename=$(notmuch search --output=files "id:$id") > -test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"filename\": \"README\"}]}]}, []]]]" > +test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"content-length\": 12392, \"content-transfer-encoding\": \"base64\", \"filename\": \"README\"}]}]}, []]]]" This test fails for me. You're encoding the content-length of test/README. test/README certainly hasn't changed in the last six months so that seems like a reasonable thing to do... except then why is it 12392 on your machine, and 12380 on mine? I don't object to using test/README as a simple file to test with, but then you certainly shouldn't hard-code its length. You could pipe test/README through base64 and then through wc -c to get an accurate length, but for my machine a newline gets appended by base64 I think, and it gives me 12381. I'm tagging this patch moreinfo but you would have my +1 if you fix this. Ethan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/3] test: conform to content length, encoding fields 2012-10-20 2:21 ` Ethan Glasser-Camp @ 2012-10-21 3:03 ` Peter Wang 0 siblings, 0 replies; 8+ messages in thread From: Peter Wang @ 2012-10-21 3:03 UTC (permalink / raw) To: notmuch On Fri, 19 Oct 2012 22:21:46 -0400, Ethan Glasser-Camp <ethan.glasser.camp@gmail.com> wrote: > > diff --git a/test/json b/test/json > > index ac8fa8e..8ce2e8a 100755 > > --- a/test/json > > +++ b/test/json > > @@ -45,7 +45,7 @@ emacs_deliver_message \ > > (insert \"Message-ID: <$id>\n\")" > > output=$(notmuch show --format=json "id:$id") > > filename=$(notmuch search --output=files "id:$id") > > -test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"filename\": \"README\"}]}]}, []]]]" > > +test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"content-length\": 12392, \"content-transfer-encoding\": \"base64\", \"filename\": \"README\"}]}]}, []]]]" > > This test fails for me. You're encoding the content-length of > test/README. test/README certainly hasn't changed in the last six months > so that seems like a reasonable thing to do... except then why is it > 12392 on your machine, and 12380 on mine? README was changed in 1ffb38. Hardcoding the length was clearly a bad idea, so I will send a replacement patch. Peter ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3] test: conform to content length, encoding fields 2012-08-08 12:27 ` [PATCH v2 3/3] test: conform to content length, encoding fields Peter Wang 2012-10-20 2:21 ` Ethan Glasser-Camp @ 2012-10-21 3:04 ` Peter Wang 2012-10-21 12:53 ` Ethan Glasser-Camp 1 sibling, 1 reply; 8+ messages in thread From: Peter Wang @ 2012-10-21 3:04 UTC (permalink / raw) To: notmuch Update tests to expect content-length and content-transfer-encoding fields in show --format=json output, for leaf parts with omitted body content. --- test/crypto | 30 +++++++++++++++++++++--------- test/json | 4 +++- test/multipart | 9 +++++---- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/test/crypto b/test/crypto index 5dd14c4..aa96ec2 100755 --- a/test/crypto +++ b/test/crypto @@ -61,7 +61,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -95,7 +96,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -127,7 +129,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -196,7 +199,8 @@ expected='[[[{"id": "XXXXX", "sigstatus": [], "content-type": "multipart/encrypted", "content": [{"id": 2, - "content-type": "application/pgp-encrypted"}, + "content-type": "application/pgp-encrypted", + "content-length": 11}, {"id": 3, "content-type": "multipart/mixed", "content": [{"id": 4, @@ -204,6 +208,8 @@ expected='[[[{"id": "XXXXX", "content": "This is a test encrypted message.\n"}, {"id": 5, "content-type": "application/octet-stream", + "content-length": 28, + "content-transfer-encoding": "base64", "filename": "TESTATTACHMENT"}]}]}]}, []]]]' test_expect_equal_json \ @@ -231,9 +237,11 @@ test_expect_equal_file OUTPUT TESTATTACHMENT test_begin_subtest "decryption failure with missing key" mv "${GNUPGHOME}"{,.bak} +# The length of the encrypted attachment varies so must be normalized. output=$(notmuch show --format=json --decrypt subject:"test encrypted message 001" \ | notmuch_json_show_sanitize \ - | sed -e 's|"created": [1234567890]*|"created": 946728000|') + | sed -e 's|"created": [1234567890]*|"created": 946728000|' \ + | sed -e 's|"content-length": 6[1234567890]*|"content-length": 652|') expected='[[[{"id": "XXXXX", "match": true, "excluded": false, @@ -249,9 +257,11 @@ expected='[[[{"id": "XXXXX", "encstatus": [{"status": "bad"}], "content-type": "multipart/encrypted", "content": [{"id": 2, - "content-type": "application/pgp-encrypted"}, + "content-type": "application/pgp-encrypted", + "content-length": 11}, {"id": 3, - "content-type": "application/octet-stream"}]}]}, + "content-type": "application/octet-stream", + "content-length": 652}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -287,7 +297,8 @@ expected='[[[{"id": "XXXXX", "userid": " Notmuch Test Suite <test_suite@notmuchmail.org> (INSECURE!)"}], "content-type": "multipart/encrypted", "content": [{"id": 2, - "content-type": "application/pgp-encrypted"}, + "content-type": "application/pgp-encrypted", + "content-length": 11}, {"id": 3, "content-type": "text/plain", "content": "This is another test encrypted message.\n"}]}]}, @@ -342,7 +353,8 @@ expected='[[[{"id": "XXXXX", "content-type": "text/plain", "content": "This is a test signed message.\n"}, {"id": 3, - "content-type": "application/pgp-signature"}]}]}, + "content-type": "application/pgp-signature", + "content-length": 315}]}]}, []]]]' test_expect_equal_json \ "$output" \ diff --git a/test/json b/test/json index ac8fa8e..9911eeb 100755 --- a/test/json +++ b/test/json @@ -45,7 +45,9 @@ emacs_deliver_message \ (insert \"Message-ID: <$id>\n\")" output=$(notmuch show --format=json "id:$id") filename=$(notmuch search --output=files "id:$id") -test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"filename\": \"README\"}]}]}, []]]]" +# Get length of README after base64-encoding, minus additional newline. +attachment_length=$(( $(base64 $TEST_DIRECTORY/README | wc -c) - 1 )) +test_expect_equal_json "$output" "[[[{\"id\": \"$id\", \"match\": true, \"excluded\": false, \"filename\": \"$filename\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"content-length\": $attachment_length, \"content-transfer-encoding\": \"base64\", \"filename\": \"README\"}]}]}, []]]]" test_begin_subtest "Search message: json, utf-8" add_message "[subject]=\"json-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\"" diff --git a/test/multipart b/test/multipart index 344ed81..497f3ec 100755 --- a/test/multipart +++ b/test/multipart @@ -330,7 +330,7 @@ cat <<EOF >EXPECTED {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, -{"id": 9, "content-type": "application/pgp-signature"}]}]} +{"id": 9, "content-type": "application/pgp-signature", "content-length": 197}]}]} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" @@ -345,7 +345,7 @@ cat <<EOF >EXPECTED {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, -{"id": 9, "content-type": "application/pgp-signature"}]} +{"id": 9, "content-type": "application/pgp-signature", "content-length": 197}]} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" @@ -412,7 +412,7 @@ test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" test_begin_subtest "--format=json --part=9, pgp signature (unverified)" notmuch show --format=json --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT cat <<EOF >EXPECTED -{"id": 9, "content-type": "application/pgp-signature"} +{"id": 9, "content-type": "application/pgp-signature", "content-length": 197} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" @@ -636,7 +636,8 @@ cat <<EOF >EXPECTED "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 9, - "content-type": "application/pgp-signature"}]}]}} + "content-type": "application/pgp-signature", + "content-length": 197}]}]}} EOF test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)" -- 1.7.12.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3] test: conform to content length, encoding fields 2012-10-21 3:04 ` [PATCH v3] " Peter Wang @ 2012-10-21 12:53 ` Ethan Glasser-Camp 0 siblings, 0 replies; 8+ messages in thread From: Ethan Glasser-Camp @ 2012-10-21 12:53 UTC (permalink / raw) To: Peter Wang, notmuch Peter Wang <novalazy@gmail.com> writes: > Update tests to expect content-length and content-transfer-encoding > fields in show --format=json output, for leaf parts with omitted body > content. OK, this whole series looks good to me. Ethan ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-10-21 12:53 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-08-08 12:27 [PATCH v2 0/3] indicate length of omitted body content Peter Wang 2012-08-08 12:27 ` [PATCH v2 1/3] test: normalize only message filenames in show json Peter Wang 2012-08-08 12:27 ` [PATCH v2 2/3] show: indicate length, encoding of omitted body content Peter Wang 2012-08-08 12:27 ` [PATCH v2 3/3] test: conform to content length, encoding fields Peter Wang 2012-10-20 2:21 ` Ethan Glasser-Camp 2012-10-21 3:03 ` Peter Wang 2012-10-21 3:04 ` [PATCH v3] " Peter Wang 2012-10-21 12:53 ` Ethan Glasser-Camp
Code repositories for project(s) associated with this public inbox https://yhetil.org/notmuch.git/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).