This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 4b3d611e7c71af3ddc0ce790e5cfa070dc06ba33 Author: Tran Tien Duc <dt...@linagora.com> AuthorDate: Fri Apr 26 18:54:47 2019 +0700 JAMES-2743 Need HeaderCollection to use encoded(raw) value when parsing --- .../james/mailbox/elasticsearch/json/HeaderCollection.java | 13 +++++++------ .../mailbox/elasticsearch/json/HeaderCollectionTest.java | 2 -- .../jmap/methods/integration/GetMessageListMethodTest.java | 10 +++++----- .../james/jmap/memory/MemoryGetMessageListMethodTest.java | 7 +++++++ 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java index 4782f74..f007e69 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java @@ -71,12 +71,13 @@ public class HeaderCollection { public Builder add(Field field) { Preconditions.checkNotNull(field); String headerName = field.getName().toLowerCase(Locale.US); - String sanitizedValue = MimeUtil.unscrambleHeaderValue(field.getBody()); + String rawHeaderValue = field.getBody(); + String sanitizedValue = MimeUtil.unscrambleHeaderValue(rawHeaderValue); if (!headerName.contains(".")) { headers.put(headerName, sanitizedValue); } - handleSpecificHeader(headerName, sanitizedValue); + handleSpecificHeader(headerName, sanitizedValue, rawHeaderValue); return this; } @@ -92,14 +93,14 @@ public class HeaderCollection { sentDate, messageID); } - private void handleSpecificHeader(String headerName, String headerValue) { + private void handleSpecificHeader(String headerName, String headerValue, String rawHeaderValue) { switch (headerName) { case TO: case FROM: case CC: case BCC: case REPLY_TO: - manageAddressField(headerName, headerValue); + manageAddressField(headerName, rawHeaderValue); break; case SUBJECT: subjectSet.add(headerValue); @@ -113,9 +114,9 @@ public class HeaderCollection { } } - private void manageAddressField(String headerName, String headerValue) { + private void manageAddressField(String headerName, String rawHeaderValue) { LenientAddressParser.DEFAULT - .parseAddressList(headerValue) + .parseAddressList(rawHeaderValue) .stream() .flatMap(this::convertAddressToMailboxStream) .map((mailbox) -> new EMailer(SearchUtil.getDisplayAddress(mailbox), mailbox.getAddress())) diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java index db73f08..647bdf8 100644 --- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java @@ -25,7 +25,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.time.format.DateTimeFormatter; import java.util.stream.Stream; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; @@ -94,7 +93,6 @@ class HeaderCollectionTest { .containsOnly(new EMailer("Christophe Hamerling", "chri.hamerl...@linagora.com")); } - @Disabled("JAMES-2743 HeaderCollection doesn't support Q encoding") @ParameterizedTest @ArgumentsSource(UTF8FromHeaderTestSource.class) void displayNamesShouldBeRetrievedWhenEncodedWord(String encodedFromHeader, String nameOfFromAddress) { diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java index ce45654..1ac3d65 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java @@ -213,7 +213,7 @@ public abstract class GetMessageListMethodTest { @Category(BasicFeature.class) @Test - public void searchByFromFieldDoesntSupportUTF8FromName() throws Exception { + public void searchByFromFieldShouldSupportUTF8FromName() throws Exception { String toUsername = "username1@" + DOMAIN; String password = "password"; dataProbe.addUser(toUsername, password); @@ -247,11 +247,11 @@ public abstract class GetMessageListMethodTest { .body() .path(ARGUMENTS + ".created." + messageCreationId + ".id"); - calmlyAwait.atMost(Duration.TEN_SECONDS) - .until(() -> searchFirstMessageByFromField(fromAddress), Matchers.notNullValue()); + String searchedMessageId = calmlyAwait.atMost(Duration.TEN_SECONDS) + .until(() -> searchFirstMessageByFromField(fromName), Matchers.notNullValue()); - assertThat(searchFirstMessageByFromField(fromName)) - .isNull(); + assertThat(searchedMessageId) + .isEqualTo(messageId); } private String searchFirstMessageByFromField(String from) { diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java index 5871e88..589b007 100644 --- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java +++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java @@ -49,4 +49,11 @@ public class MemoryGetMessageListMethodTest extends GetMessageListMethodTest { @Test public void getMessageListShouldIncludeMessagesWhenTextFilterMatchesBodyWithStemming() { } + + @Override + @Ignore("JAMES-2756 Memory James Server uses the SimpleMessageSearchIndex, " + + "it doesn't support to search on the encoded header value's names") + @Test + public void searchByFromFieldShouldSupportUTF8FromName() { + } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org