This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new bb01c8a9f2 [FIX] OpenSearch should normalize base subject (#1910)
bb01c8a9f2 is described below
commit bb01c8a9f28933965cbbcafaeb5302fe7bcd393e
Author: Benoit TELLIER <[email protected]>
AuthorDate: Tue Jan 16 10:03:39 2024 +0100
[FIX] OpenSearch should normalize base subject (#1910)
---
.../mailbox/opensearch/json/HeaderCollection.java | 3 +-
.../opensearch/OpenSearchIntegrationTest.java | 44 ++++++++++++++++++++++
.../opensearch/json/HeaderCollectionTest.java | 10 +++++
.../src/test/resources/eml/pgpSignedMail.json | 2 +-
mailbox/store/src/test/resources/eml/spamMail.json | 2 +-
.../src/test/resources/eml/spamMailNoHeaders.json | 2 +-
6 files changed, 59 insertions(+), 4 deletions(-)
diff --git
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
index d89603397d..ce3d0dfb7e 100644
---
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
+++
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
@@ -26,6 +26,7 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import org.apache.james.mailbox.store.search.SearchUtil;
import org.apache.james.mailbox.store.search.comparator.SentDateComparator;
import org.apache.james.mime4j.field.address.LenientAddressParser;
import org.apache.james.mime4j.stream.Field;
@@ -133,7 +134,7 @@ public class HeaderCollection {
manageAddressField(headerName, rawHeaderValue);
break;
case SUBJECT:
- subjectSet.add(headerValue);
+ subjectSet.add(SearchUtil.getBaseSubject(headerValue));
break;
case DATE:
sentDate = SentDateComparator.toISODate(headerValue);
diff --git
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
index 30cd8315d3..8b9170fa17 100644
---
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
+++
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
@@ -26,6 +26,7 @@ import static
org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.ZoneId;
+import java.util.Iterator;
import java.util.List;
import java.util.UUID;
@@ -42,10 +43,14 @@ import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.model.ComposedMessageId;
+import org.apache.james.mailbox.model.FetchGroup;
+import org.apache.james.mailbox.model.Header;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MessageRange;
+import org.apache.james.mailbox.model.MessageResult;
+import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.apache.james.mailbox.model.SearchQuery;
import
org.apache.james.mailbox.opensearch.events.OpenSearchListeningMessageSearchIndex;
import org.apache.james.mailbox.opensearch.json.MessageToOpenSearchJson;
@@ -78,6 +83,7 @@ import org.opensearch.client.opensearch.core.GetResponse;
import org.opensearch.client.opensearch.core.SearchRequest;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.github.fge.lambdas.Throwing;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -568,6 +574,44 @@ class OpenSearchIntegrationTest extends
AbstractMessageSearchIndexTest {
assertThat(Flux.from(messageManager.search(SearchQuery.of(SearchQuery.address(SearchQuery.AddressType.To,
"domain-test.tld")), session)).toStream())
.containsOnly(messageId1.getUid());
}
+
+ @Test
+ void shouldSortOnBaseSubject() throws Exception {
+ MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "def");
+ MailboxSession session = MailboxSessionUtil.create(USERNAME);
+ storeMailboxManager.createMailbox(mailboxPath, session);
+ MessageManager messageManager =
storeMailboxManager.getMailbox(mailboxPath, session);
+
+ ComposedMessageId messageId1 =
messageManager.appendMessage(messageWithSubject("abc"), session).getId();
+ ComposedMessageId messageId2 =
messageManager.appendMessage(messageWithSubject("Re: abd"), session).getId();
+ ComposedMessageId messageId3 =
messageManager.appendMessage(messageWithSubject("Fwd: abe"), session).getId();
+ ComposedMessageId messageId4 =
messageManager.appendMessage(messageWithSubject("bbc"), session).getId();
+ ComposedMessageId messageId5 =
messageManager.appendMessage(messageWithSubject("bBc"), session).getId();
+ ComposedMessageId messageId6 =
messageManager.appendMessage(messageWithSubject("def"), session).getId();
+ ComposedMessageId messageId7 =
messageManager.appendMessage(messageWithSubject("ABC"), session).getId();
+
+ openSearch.awaitForOpenSearch();
+
+ awaitForOpenSearch(QueryBuilders.matchAll().build()._toQuery(), 20);
+
+ assertThat(Flux.from(
+ messageManager.search(SearchQuery.allSortedWith(new
SearchQuery.Sort(SearchQuery.Sort.SortClause.BaseSubject)),
session)).toStream())
+ .containsExactly(messageId1.getUid(),
+ messageId7.getUid(),
+ messageId2.getUid(),
+ messageId3.getUid(),
+ messageId4.getUid(),
+ messageId5.getUid(),
+ messageId6.getUid());
+ }
+
+ private static MessageManager.AppendCommand messageWithSubject(String
subject) throws IOException {
+ return MessageManager.AppendCommand.builder().build(
+ Message.Builder
+ .of()
+ .setBody("testmail", StandardCharsets.UTF_8)
+ .addField(new RawField("Subject", subject)));
+ }
private void awaitForOpenSearch(Query query, long totalHits) {
CALMLY_AWAIT.atMost(Durations.TEN_SECONDS)
diff --git
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
index f275579a69..6d235d155d 100644
---
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
+++
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
@@ -84,6 +84,16 @@ class HeaderCollectionTest {
new EMailer(Optional.empty(), "[email protected]",
"minet.net"));
}
+ @Test
+ void shouldNormalizeSubject() {
+ HeaderCollection headerCollection = HeaderCollection.builder()
+ .add(new FieldImpl("Subject", "Re: test"))
+ .build();
+
+ assertThat(headerCollection.getSubjectSet())
+ .containsOnly("test");
+ }
+
@Test
void displayNamesShouldBeRetreived() {
HeaderCollection headerCollection = HeaderCollection.builder()
diff --git a/mailbox/store/src/test/resources/eml/pgpSignedMail.json
b/mailbox/store/src/test/resources/eml/pgpSignedMail.json
index c26fd83b98..139bd3638c 100644
--- a/mailbox/store/src/test/resources/eml/pgpSignedMail.json
+++ b/mailbox/store/src/test/resources/eml/pgpSignedMail.json
@@ -161,7 +161,7 @@
"cc": [],
"bcc": [],
"subject": [
- "[SECURITY] [DSA 3278-1] libapache-mod-jk security update"
+ "libapache-mod-jk security update"
],
"sentDate": "2015-06-03T19:14:32+0000",
"attachments": [],
diff --git a/mailbox/store/src/test/resources/eml/spamMail.json
b/mailbox/store/src/test/resources/eml/spamMail.json
index 93fcb811aa..468665807e 100644
--- a/mailbox/store/src/test/resources/eml/spamMail.json
+++ b/mailbox/store/src/test/resources/eml/spamMail.json
@@ -116,7 +116,7 @@
"cc": [],
"bcc": [],
"subject": [
- "[root] UNCHECKED contents in mail FROM <[email protected]>"
+ "UNCHECKED contents in mail FROM <[email protected]>"
],
"sentDate": "2015-06-03T09:05:46+0000",
"attachments": [
diff --git a/mailbox/store/src/test/resources/eml/spamMailNoHeaders.json
b/mailbox/store/src/test/resources/eml/spamMailNoHeaders.json
index 6a9ca3f2f3..e0717172b3 100644
--- a/mailbox/store/src/test/resources/eml/spamMailNoHeaders.json
+++ b/mailbox/store/src/test/resources/eml/spamMailNoHeaders.json
@@ -29,7 +29,7 @@
"cc": [],
"bcc": [],
"subject": [
- "[root] UNCHECKED contents in mail FROM <[email protected]>"
+ "UNCHECKED contents in mail FROM <[email protected]>"
],
"sentDate": "2015-06-03T09:05:46+0000",
"attachments": [],
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]