MAILBOX-272 Add users in ES indexer
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c981e8a3 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c981e8a3 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c981e8a3 Branch: refs/heads/master Commit: c981e8a399efe6b01e558a67669caee6fd646165 Parents: e456c07 Author: Antoine Duprat <adup...@linagora.com> Authored: Fri Jul 22 13:22:46 2016 +0200 Committer: Matthieu Baechler <matthieu.baech...@linagora.com> Committed: Mon Jul 25 15:38:55 2016 +0200 ---------------------------------------------------------------------- mailbox/elasticsearch/pom.xml | 6 + .../elasticsearch/NodeMappingFactory.java | 4 + ...lasticSearchListeningMessageSearchIndex.java | 11 +- .../elasticsearch/json/IndexableMessage.java | 12 +- .../json/JsonMessageConstants.java | 1 + .../json/MessageToElasticSearchJson.java | 6 +- .../elasticsearch/query/QueryConverter.java | 12 +- .../search/ElasticSearchSearcher.java | 10 +- ...hListeningMailboxMessageSearchIndexTest.java | 13 +- .../MailboxMessageToElasticSearchJsonTest.java | 39 +- .../lucene/search/LuceneMessageSearchIndex.java | 3 + .../LuceneMailboxMessageSearchIndexTest.java | 113 ++--- .../store/search/LazyMessageSearchIndex.java | 3 + .../mailbox/store/search/MessageSearches.java | 80 ++-- .../store/search/SimpleMessageSearchIndex.java | 21 +- .../store/SearchUtilsMultipartMixedTest.java | 65 ++- .../mailbox/store/SearchUtilsRFC822Test.java | 31 +- .../james/mailbox/store/SearchUtilsTest.java | 441 +++++++++---------- .../search/AbstractMessageSearchIndexTest.java | 23 +- .../store/src/test/resources/eml/htmlMail.json | 5 +- mailbox/store/src/test/resources/eml/mail.json | 5 +- .../src/test/resources/eml/nonTextual.json | 5 +- .../src/test/resources/eml/pgpSignedMail.json | 5 +- .../src/test/resources/eml/recursiveMail.json | 5 +- .../store/src/test/resources/eml/spamMail.json | 5 +- 25 files changed, 514 insertions(+), 410 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/pom.xml b/mailbox/elasticsearch/pom.xml index 864a95f..59df4ee 100644 --- a/mailbox/elasticsearch/pom.xml +++ b/mailbox/elasticsearch/pom.xml @@ -163,6 +163,12 @@ <artifactId>apache-james-mailbox-api</artifactId> </dependency> <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>apache-james-mailbox-api</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.apache.james</groupId> <artifactId>apache-james-mailbox-store</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java index f74da92..91bf2e6 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java @@ -192,6 +192,10 @@ public class NodeMappingFactory { .field(TYPE, STRING) .field(INDEX, NOT_ANALYZED) .endObject() + .startObject(JsonMessageConstants.USERS) + .field(TYPE, STRING) + .field(INDEX, NOT_ANALYZED) + .endObject() .startObject(JsonMessageConstants.PROPERTIES) .field(TYPE, NESTED) .startObject(PROPERTIES) http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java index dc7e301..957826d 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java @@ -29,8 +29,8 @@ import java.util.stream.Collectors; import javax.inject.Inject; -import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxManager.SearchCapabilities; +import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer; import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants; import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson; @@ -48,6 +48,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSearchIndex { @@ -80,9 +81,10 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe @Override public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException { + Preconditions.checkArgument(session != null, "'session' is mandatory"); MailboxId mailboxId = mailbox.getMailboxId(); return searcher - .search(ImmutableList.of(mailboxId), searchQuery) + .search(ImmutableList.of(session.getUser()), ImmutableList.of(mailboxId), searchQuery) .get(mailboxId) .iterator(); } @@ -90,13 +92,14 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe @Override public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery) throws MailboxException { - return searcher.search(searchQuery.getMailboxIds(), searchQuery.getSearchQuery()).asMap(); + Preconditions.checkArgument(session != null, "'session' is mandatory"); + return searcher.search(ImmutableList.of(session.getUser()), searchQuery.getMailboxIds(), searchQuery.getSearchQuery()).asMap(); } @Override public void add(MailboxSession session, Mailbox mailbox, MailboxMessage message) throws MailboxException { try { - indexer.indexMessage(indexIdFor(mailbox, message.getUid()), messageToElasticSearchJson.convertToJson(message)); + indexer.indexMessage(indexIdFor(mailbox, message.getUid()), messageToElasticSearchJson.convertToJson(message, ImmutableList.of(session.getUser()))); } catch (Exception e) { LOGGER.error("Error when indexing message " + message.getUid(), e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java index 9174dcd..5b1cec1 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java @@ -28,6 +28,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import org.apache.james.mailbox.MailboxSession.User; import org.apache.james.mailbox.elasticsearch.query.DateResolutionFormater; import org.apache.james.mailbox.store.extractor.TextExtractor; import org.apache.james.mailbox.store.mail.model.MailboxMessage; @@ -35,17 +36,20 @@ import org.apache.james.mailbox.store.mail.model.Property; import org.apache.james.mime4j.MimeException; import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.steveash.guavate.Guavate; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.google.common.collect.Multimap; public class IndexableMessage { - public static IndexableMessage from(MailboxMessage message, TextExtractor textExtractor, ZoneId zoneId) { + public static IndexableMessage from(MailboxMessage message, List<User> users, TextExtractor textExtractor, ZoneId zoneId) { Preconditions.checkNotNull(message.getMailboxId()); + Preconditions.checkArgument(!users.isEmpty()); IndexableMessage indexableMessage = new IndexableMessage(); try { MimePart parsingResult = new MimePartParser(message, textExtractor).parse(); + indexableMessage.users = users.stream().map(User::getUserName).collect(Guavate.toImmutableList()); indexableMessage.bodyText = parsingResult.locateFirstTextualBody(); indexableMessage.setFlattenedAttachments(parsingResult); indexableMessage.copyHeaderFields(parsingResult.getHeaderCollection(), getSanitizedInternalDate(message, zoneId)); @@ -101,6 +105,7 @@ public class IndexableMessage { private Long id; private String mailboxId; + private List<String> users; private long modSeq; private long size; private String date; @@ -135,6 +140,11 @@ public class IndexableMessage { return mailboxId; } + @JsonProperty(JsonMessageConstants.USERS) + public List<String> getUsers() { + return users; + } + @JsonProperty(JsonMessageConstants.MODSEQ) public long getModSeq() { return modSeq; http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java index 23937ca..56361e8 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/JsonMessageConstants.java @@ -26,6 +26,7 @@ public interface JsonMessageConstants { */ String ID = "id"; String MAILBOX_ID = "mailboxId"; + String USERS = "users"; String IS_UNREAD = "isUnread"; String IS_FLAGGED = "isFlagged"; String IS_ANSWERED = "isAnswered"; http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java index 01f8a00..a35825e 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java @@ -20,10 +20,12 @@ package org.apache.james.mailbox.elasticsearch.json; import java.time.ZoneId; +import java.util.List; import javax.inject.Inject; import javax.mail.Flags; +import org.apache.james.mailbox.MailboxSession.User; import org.apache.james.mailbox.store.extractor.TextExtractor; import org.apache.james.mailbox.store.mail.model.MailboxMessage; @@ -52,9 +54,9 @@ public class MessageToElasticSearchJson { this(textExtractor, ZoneId.systemDefault()); } - public String convertToJson(MailboxMessage message) throws JsonProcessingException { + public String convertToJson(MailboxMessage message, List<User> users) throws JsonProcessingException { Preconditions.checkNotNull(message); - return mapper.writeValueAsString(IndexableMessage.from(message, textExtractor, zoneId)); + return mapper.writeValueAsString(IndexableMessage.from(message, users, textExtractor, zoneId)); } public String getUpdatedJsonMessagePart(Flags flags, long modSeq) throws JsonProcessingException { http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java index 762522f..0757b34 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/QueryConverter.java @@ -27,6 +27,7 @@ import java.util.List; import javax.inject.Inject; +import org.apache.james.mailbox.MailboxSession.User; import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.SearchQuery; @@ -45,8 +46,9 @@ public class QueryConverter { this.criterionConverter = criterionConverter; } - public QueryBuilder from(SearchQuery searchQuery, Collection<MailboxId> mailboxIds) { + public QueryBuilder from(SearchQuery searchQuery, List<User> users, Collection<MailboxId> mailboxIds) { QueryBuilder queryBuilder = generateQueryBuilder(searchQuery); + queryBuilder = addUsersFilter(queryBuilder, users); return addMailboxFilters(queryBuilder, mailboxIds); } @@ -61,6 +63,14 @@ public class QueryConverter { } } + private QueryBuilder addUsersFilter(QueryBuilder queryBuilder, List<User> users) { + ImmutableList<String> usernames = users.stream() + .map(User::getUserName) + .collect(Guavate.toImmutableList()); + return boolQuery().must(queryBuilder) + .filter(termsQuery(JsonMessageConstants.USERS, usernames)); + } + private QueryBuilder addMailboxFilters(QueryBuilder queryBuilder, Collection<MailboxId> mailboxIds) { if (mailboxIds.isEmpty()) { return queryBuilder; http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java index 8a9a1d8..9edaa41 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java @@ -20,6 +20,7 @@ package org.apache.james.mailbox.elasticsearch.search; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -27,6 +28,7 @@ import java.util.stream.StreamSupport; import javax.inject.Inject; import org.apache.commons.lang3.tuple.Pair; +import org.apache.james.mailbox.MailboxSession.User; import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer; import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants; import org.apache.james.mailbox.elasticsearch.query.QueryConverter; @@ -70,13 +72,13 @@ public class ElasticSearchSearcher { this.mailboxIdFactory = mailboxIdFactory; } - public Multimap<MailboxId, Long> search(Collection<MailboxId> mailboxIds, SearchQuery searchQuery) throws MailboxException { - return new ScrollIterable(client, getSearchRequestBuilder(client, mailboxIds, searchQuery)).stream() + public Multimap<MailboxId, Long> search(List<User> users, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) throws MailboxException { + return new ScrollIterable(client, getSearchRequestBuilder(client, users, mailboxIds, searchQuery)).stream() .flatMap(this::transformResponseToUidStream) .collect(Guavate.toImmutableListMultimap(Pair::getLeft, Pair::getRight)); } - private SearchRequestBuilder getSearchRequestBuilder(Client client, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) { + private SearchRequestBuilder getSearchRequestBuilder(Client client, List<User> users, Collection<MailboxId> mailboxIds, SearchQuery searchQuery) { return searchQuery.getSorts() .stream() .reduce( @@ -84,7 +86,7 @@ public class ElasticSearchSearcher { .setTypes(ElasticSearchIndexer.MESSAGE_TYPE) .setScroll(TIMEOUT) .addFields(JsonMessageConstants.ID, JsonMessageConstants.MAILBOX_ID) - .setQuery(queryConverter.from(searchQuery, mailboxIds)) + .setQuery(queryConverter.from(searchQuery, users, mailboxIds)) .setSize(size), (searchBuilder, sort) -> searchBuilder.addSort(SortConverter.convertSort(sort)), (partialResult1, partialResult2) -> partialResult1); http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java index 0039eb9..639eeb5 100644 --- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java @@ -32,6 +32,7 @@ import java.util.List; import javax.mail.Flags; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MailboxSession.User; import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer; import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson; import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher; @@ -70,7 +71,8 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest { indexer = control.createMock(ElasticSearchIndexer.class); - expect(messageToElasticSearchJson.convertToJson(anyObject(MailboxMessage.class))).andReturn("json content").anyTimes(); + List<User> users = anyObject(); + expect(messageToElasticSearchJson.convertToJson(anyObject(MailboxMessage.class), users)).andReturn("json content").anyTimes(); expect(messageToElasticSearchJson.getUpdatedJsonMessagePart(anyObject(Flags.class), anyLong())).andReturn("json updated content").anyTimes(); testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, indexer, elasticSearchSearcher, messageToElasticSearchJson); @@ -78,9 +80,12 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest { @Test public void addShouldIndex() throws Exception { + MailboxSession.User user = control.createMock(MailboxSession.User.class); MailboxSession session = control.createMock(MailboxSession.class); + expect(session.getUser()) + .andReturn(user); + Mailbox mailbox = control.createMock(Mailbox.class); - long messageId = 1; TestId mailboxId = TestId.of(12); expect(mailbox.getMailboxId()).andReturn(mailboxId); @@ -103,7 +108,11 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest { @Test public void addShouldNotPropagateExceptionWhenExceptionOccurs() throws Exception { + MailboxSession.User user = control.createMock(MailboxSession.User.class); MailboxSession session = control.createMock(MailboxSession.class); + expect(session.getUser()) + .andReturn(user); + Mailbox mailbox = control.createMock(Mailbox.class); long messageId = 1; http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java index da899ea..ce43184 100644 --- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.elasticsearch.json; import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER; import static net.javacrumbs.jsonunit.core.Option.IGNORING_VALUES; import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.io.IOException; import java.nio.charset.Charset; @@ -33,6 +34,8 @@ import javax.mail.util.SharedByteArrayInputStream; import org.apache.commons.io.IOUtils; import org.apache.james.mailbox.FlagsBuilder; +import org.apache.james.mailbox.MailboxSession.User; +import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.mailbox.store.TestId; import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; import org.apache.james.mailbox.store.mail.model.MailboxMessage; @@ -44,6 +47,7 @@ import org.junit.Test; import com.google.common.base.Charsets; import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableList; public class MailboxMessageToElasticSearchJsonTest { @@ -69,6 +73,24 @@ public class MailboxMessageToElasticSearchJsonTest { } @Test + public void convertToJsonShouldThrowWhenNoUser() throws Exception { + MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson( + new DefaultTextExtractor(), + ZoneId.of("Europe/Paris")); + MailboxMessage spamMail = new SimpleMailboxMessage(date, + SIZE, + BODY_START_OCTET, + new SharedByteArrayInputStream("message".getBytes(Charsets.UTF_8)), + new Flags(), + propertyBuilder, + MAILBOX_ID); + ImmutableList<User> users = ImmutableList.of(); + + assertThatThrownBy(() -> messageToElasticSearchJson.convertToJson(spamMail, users)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test public void spamEmailShouldBeWellConvertedToJson() throws IOException { MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson( new DefaultTextExtractor(), @@ -81,7 +103,7 @@ public class MailboxMessageToElasticSearchJsonTest { propertyBuilder, MAILBOX_ID); spamMail.setModSeq(MOD_SEQ); - assertThatJson(messageToElasticSearchJson.convertToJson(spamMail)) + assertThatJson(messageToElasticSearchJson.convertToJson(spamMail, ImmutableList.of(new MockMailboxSession("username").getUser()))) .when(IGNORING_ARRAY_ORDER) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/spamMail.json"), CHARSET)); } @@ -100,7 +122,7 @@ public class MailboxMessageToElasticSearchJsonTest { MAILBOX_ID); htmlMail.setModSeq(MOD_SEQ); htmlMail.setUid(UID); - assertThatJson(messageToElasticSearchJson.convertToJson(htmlMail)) + assertThatJson(messageToElasticSearchJson.convertToJson(htmlMail, ImmutableList.of(new MockMailboxSession("username").getUser()))) .when(IGNORING_ARRAY_ORDER) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/htmlMail.json"))); } @@ -119,7 +141,7 @@ public class MailboxMessageToElasticSearchJsonTest { MAILBOX_ID); pgpSignedMail.setModSeq(MOD_SEQ); pgpSignedMail.setUid(UID); - assertThatJson(messageToElasticSearchJson.convertToJson(pgpSignedMail)) + assertThatJson(messageToElasticSearchJson.convertToJson(pgpSignedMail, ImmutableList.of(new MockMailboxSession("username").getUser()))) .when(IGNORING_ARRAY_ORDER) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/pgpSignedMail.json"))); } @@ -138,7 +160,8 @@ public class MailboxMessageToElasticSearchJsonTest { MAILBOX_ID); mail.setModSeq(MOD_SEQ); mail.setUid(UID); - assertThatJson(messageToElasticSearchJson.convertToJson(mail)) + assertThatJson(messageToElasticSearchJson.convertToJson(mail, + ImmutableList.of(new MockMailboxSession("user1").getUser(), new MockMailboxSession("user2").getUser()))) .when(IGNORING_ARRAY_ORDER).when(IGNORING_VALUES) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/mail.json"))); } @@ -157,7 +180,7 @@ public class MailboxMessageToElasticSearchJsonTest { MAILBOX_ID); recursiveMail.setModSeq(MOD_SEQ); recursiveMail.setUid(UID); - assertThatJson(messageToElasticSearchJson.convertToJson(recursiveMail)) + assertThatJson(messageToElasticSearchJson.convertToJson(recursiveMail, ImmutableList.of(new MockMailboxSession("username").getUser()))) .when(IGNORING_ARRAY_ORDER).when(IGNORING_VALUES) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/recursiveMail.json"))); } @@ -176,7 +199,7 @@ public class MailboxMessageToElasticSearchJsonTest { MAILBOX_ID); mailWithNoInternalDate.setModSeq(MOD_SEQ); mailWithNoInternalDate.setUid(UID); - assertThatJson(messageToElasticSearchJson.convertToJson(mailWithNoInternalDate)) + assertThatJson(messageToElasticSearchJson.convertToJson(mailWithNoInternalDate, ImmutableList.of(new MockMailboxSession("username").getUser()))) .when(IGNORING_ARRAY_ORDER) .when(IGNORING_VALUES) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/recursiveMail.json"))); @@ -201,7 +224,7 @@ public class MailboxMessageToElasticSearchJsonTest { } catch(Exception exception) { throw Throwables.propagate(exception); } - messageToElasticSearchJson.convertToJson(mailWithNoMailboxId); + messageToElasticSearchJson.convertToJson(mailWithNoMailboxId, ImmutableList.of(new MockMailboxSession("username").getUser())); } @Test @@ -243,7 +266,7 @@ public class MailboxMessageToElasticSearchJsonTest { propertyBuilder, MAILBOX_ID); spamMail.setModSeq(MOD_SEQ); - assertThatJson(messageToElasticSearchJson.convertToJson(spamMail)) + assertThatJson(messageToElasticSearchJson.convertToJson(spamMail, ImmutableList.of(new MockMailboxSession("username").getUser()))) .when(IGNORING_ARRAY_ORDER) .isEqualTo(IOUtils.toString(ClassLoader.getSystemResource("eml/nonTextual.json"), CHARSET)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java index 9eb0388..b998dfa 100644 --- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java +++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java @@ -115,6 +115,7 @@ import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.util.IOUtils; import org.apache.lucene.util.Version; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; @@ -428,6 +429,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { * @see org.apache.james.mailbox.store.search.MessageSearchIndex#search(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.model.SearchQuery) */ public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException { + Preconditions.checkArgument(session != null, "'session' is mandatory"); MailboxId mailboxId = mailbox.getMailboxId(); Multimap<MailboxId, Long> results = searchMultimap( @@ -441,6 +443,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex { @Override public Map<MailboxId, Collection<Long>> search(MailboxSession session, MultimailboxesSearchQuery searchQuery) throws MailboxException { + Preconditions.checkArgument(session != null, "'session' is mandatory"); return searchMultimap(session, searchQuery).asMap(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java ---------------------------------------------------------------------- diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java index 9b1417a..09cf3c3 100644 --- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java +++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java @@ -33,6 +33,8 @@ import java.util.Map; import javax.mail.Flags; import javax.mail.Flags.Flag; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MultimailboxesSearchQuery; @@ -56,7 +58,7 @@ public class LuceneMailboxMessageSearchIndexTest { private SimpleMailbox mailbox = new SimpleMailbox(0); private SimpleMailbox mailbox2 = new SimpleMailbox(1); private SimpleMailbox mailbox3 = new SimpleMailbox(2); - + private MailboxSession session; private static final String FROM_ADDRESS = "Harry <ha...@example.org>"; @@ -121,7 +123,8 @@ public class LuceneMailboxMessageSearchIndexTest { builder.mailboxId = mailbox3.getMailboxId(); index.add(null, mailbox3, builder.build()); - + + session = new MockMailboxSession("username"); } @@ -130,7 +133,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void bodySearchShouldMatchPhraseInBody() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains(CUSTARD)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -138,7 +141,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void bodySearchShouldNotMatchAbsentPhraseInBody() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains(CUSTARD + CUSTARD)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).isEmpty(); } @@ -146,7 +149,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void bodySearchShouldBeCaseInsensitive() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains(RHUBARD)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -154,7 +157,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void bodySearchNotMatchPhraseOnlyInFrom() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains(FROM_ADDRESS)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).isEmpty(); } @@ -162,7 +165,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void bodySearchShouldNotMatchPhraseOnlyInSubject() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains(SUBJECT_PART)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).isEmpty(); } @@ -170,7 +173,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void textSearchShouldMatchPhraseInBody() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.mailContains(CUSTARD)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -178,7 +181,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void textSearchShouldNotAbsentMatchPhraseInBody() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.mailContains(CUSTARD + CUSTARD)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).isEmpty(); } @@ -186,7 +189,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void textSearchMatchShouldBeCaseInsensitive() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.mailContains(RHUBARD.toLowerCase(Locale.US))); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -194,7 +197,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void addressSearchShouldMatchToFullAddress() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.address(AddressType.To,FROM_ADDRESS)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -202,7 +205,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void addressSearchShouldMatchToDisplayName() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.address(AddressType.To,"Harry")); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -210,7 +213,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void addressSearchShouldMatchToEmail() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.address(AddressType.To,"ha...@example.org")); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -218,7 +221,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void addressSearchShouldMatchFrom() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.address(AddressType.From,"ser-f...@domain.or")); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -226,7 +229,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void textSearchShouldMatchPhraseOnlyInToHeader() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.mailContains(FROM_ADDRESS)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -234,7 +237,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void textSearchShouldMatchPhraseOnlyInSubjectHeader() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.mailContains(SUBJECT_PART)); - Iterator<Long> result = index.search(null, mailbox3, query); + Iterator<Long> result = index.search(session, mailbox3, query); assertThat(result).containsExactly(10L); } @@ -242,7 +245,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void searchAllShouldMatchAllMailboxEmails() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); - Iterator<Long> result = index.search(null, mailbox2, query); + Iterator<Long> result = index.search(session, mailbox2, query); assertThat(result).containsExactly(1L); } @@ -250,7 +253,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void searchBodyInAllMailboxesShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains("My Body")); - Map<MailboxId, Collection<Long>> result = index.search(null, MultimailboxesSearchQuery.from(query).build()); + Map<MailboxId, Collection<Long>> result = index.search(session, MultimailboxesSearchQuery.from(query).build()); assertThat(result).hasSize(2); assertThat(result.get(mailbox.id)).containsExactly(1L); assertThat(result.get(mailbox2.id)).containsExactly(1L); @@ -260,7 +263,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void searchBodyInSpecificMailboxesShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains("My Body")); - Map<MailboxId, Collection<Long>> result = index.search(null, + Map<MailboxId, Collection<Long>> result = index.search(session, MultimailboxesSearchQuery.from(query).inMailboxes(mailbox.id, mailbox3.id).build()); assertThat(result).hasSize(1); assertThat(result.get(mailbox.id)).containsExactly(1L); @@ -271,7 +274,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void searchAllShouldMatchAllUserEmails() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); - Map<MailboxId, Collection<Long>> result = index.search(null, MultimailboxesSearchQuery.from(query).build()); + Map<MailboxId, Collection<Long>> result = index.search(session, MultimailboxesSearchQuery.from(query).build()); assertThat(result).hasSize(3); } @@ -279,7 +282,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void flagSearchShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.flagIsSet(Flag.DELETED)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L); } @@ -287,7 +290,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void bodySearchShouldMatchSeveralEmails() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.bodyContains("body")); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -295,7 +298,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void textSearchShouldMatchSeveralEmails() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.mailContains("body")); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -303,7 +306,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void headerSearchShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.headerContains("Subject", "test")); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 3L); } @@ -311,7 +314,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void headerExistsShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.headerExists("Subject")); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 3L); } @@ -319,7 +322,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void flagUnsetShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.flagIsUnSet(Flag.DRAFT)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -330,7 +333,7 @@ public class LuceneMailboxMessageSearchIndexTest { cal.setTime(new Date()); query.andCriteria(SearchQuery.internalDateBefore(cal.getTime(), DateResolution.Day)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L); } @@ -341,7 +344,7 @@ public class LuceneMailboxMessageSearchIndexTest { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); query.andCriteria(SearchQuery.internalDateAfter(cal.getTime(), DateResolution.Day)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(3L); } @@ -353,7 +356,7 @@ public class LuceneMailboxMessageSearchIndexTest { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); query.andCriteria(SearchQuery.internalDateOn(cal.getTime(), DateResolution.Day)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L); } @@ -363,7 +366,7 @@ public class LuceneMailboxMessageSearchIndexTest { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); query.andCriteria(SearchQuery.uid(new SearchQuery.NumericRange[] {new SearchQuery.NumericRange(1)})); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L); } @@ -373,7 +376,7 @@ public class LuceneMailboxMessageSearchIndexTest { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); query.andCriteria(SearchQuery.uid(new SearchQuery.NumericRange[] {new SearchQuery.NumericRange(1), new SearchQuery.NumericRange(2,3)})); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -381,7 +384,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void sizeEqualsShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.sizeEquals(200)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L); } @@ -389,7 +392,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void sizeLessThanShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.sizeLessThan(200)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L); } @@ -397,7 +400,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void sizeGreaterThanShouldMatch() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.sizeGreaterThan(6)); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -405,7 +408,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void uidShouldBeSorted() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -414,7 +417,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Uid, true))); query.andCriteria(SearchQuery.all()); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(3L, 2L, 1L); } @@ -423,7 +426,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.SentDate, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L, 1L); } @@ -432,7 +435,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.SentDate, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 3L, 2L); } @@ -441,7 +444,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.BaseSubject, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 1L, 3L); } @@ -450,7 +453,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.BaseSubject, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(3L, 1L, 2L); } @@ -459,7 +462,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxFrom, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L, 1L); } @@ -468,7 +471,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxFrom, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 3L, 2L); } @@ -477,7 +480,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxCc, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -486,7 +489,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxCc, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L, 1L); } @@ -495,7 +498,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxTo, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(3L, 1L, 2L); } @@ -504,7 +507,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.MailboxTo, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 1L, 3L); } @@ -513,7 +516,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayTo, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(3L, 1L, 2L); } @@ -522,7 +525,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayTo, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 1L, 3L); } @@ -531,7 +534,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayFrom, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L, 1L); } @@ -540,7 +543,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.DisplayFrom, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 3L, 2L); } @@ -549,7 +552,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Arrival, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 1L, 3L); } @@ -558,7 +561,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Arrival, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(3L, 1L, 2L); } @@ -567,7 +570,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Size, false))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L, 1L); } @@ -576,7 +579,7 @@ public class LuceneMailboxMessageSearchIndexTest { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.all()); query.setSorts(Arrays.asList(new SearchQuery.Sort(SortClause.Size, true))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(1L, 2L, 3L); } @@ -584,7 +587,7 @@ public class LuceneMailboxMessageSearchIndexTest { public void notOperatorShouldReverseMatching() throws Exception { SearchQuery query = new SearchQuery(); query.andCriteria(SearchQuery.not(SearchQuery.uid(new SearchQuery.NumericRange[] { new SearchQuery.NumericRange(1)}))); - Iterator<Long> result = index.search(null, mailbox, query); + Iterator<Long> result = index.search(session, mailbox, query); assertThat(result).containsExactly(2L, 3L); } http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java index 4096c8e..72b905b 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java @@ -38,6 +38,8 @@ import org.apache.james.mailbox.store.mail.MessageMapper.FetchType; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.MailboxMessage; +import com.google.common.base.Preconditions; + /** * {@link ListeningMessageSearchIndex} implementation which wraps another {@link ListeningMessageSearchIndex} and will forward all calls to it. * @@ -91,6 +93,7 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex { */ @Override public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException { + Preconditions.checkArgument(session != null, "'session' is mandatory"); MailboxId id = mailbox.getMailboxId(); Object done = indexed.get(id); http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java index 13863e0..75aa957 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java @@ -36,6 +36,7 @@ import java.util.TreeSet; import javax.mail.Flags; +import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.UnsupportedSearchException; import org.apache.james.mailbox.model.MessageResult.Header; @@ -58,7 +59,6 @@ import org.apache.james.mime4j.field.address.LenientAddressParser; import org.apache.james.mime4j.field.datetime.parser.DateTimeParser; import org.apache.james.mime4j.field.datetime.parser.ParseException; import org.apache.james.mime4j.utils.search.MessageMatcher; -import org.slf4j.Logger; import com.google.common.collect.Lists; @@ -69,16 +69,12 @@ public class MessageSearches implements Iterable<Long> { private Iterator<MailboxMessage> messages; private SearchQuery query; - private Logger log; + private MailboxSession session; - public MessageSearches(Iterator<MailboxMessage> messages, SearchQuery query) { - this(messages, query, null); - } - - public MessageSearches(Iterator<MailboxMessage> messages, SearchQuery query, Logger log) { + public MessageSearches(Iterator<MailboxMessage> messages, SearchQuery query, MailboxSession session) { this.messages = messages; this.query = query; - this.log = log; + this.session = session; } /** @@ -92,11 +88,13 @@ public class MessageSearches implements Iterable<Long> { while (messages.hasNext()) { MailboxMessage m = messages.next(); try { - if (isMatch(query, m, log)) { + if (isMatch(query, m)) { matched.add(m); } } catch (MailboxException e) { - log.debug("Unable to search message " + m.getUid(), e); + if (session != null && session.getLog() != null) { + session.getLog().debug("Unable to search message " + m.getUid(), e); + } } } Set<Long> uids = new HashSet<Long>(); @@ -114,19 +112,17 @@ public class MessageSearches implements Iterable<Long> { * <code>SearchQuery</code>, not null * @param message * <code>MailboxMessage</code>, not null - * @param log - * the logger to use * @return <code>true</code> if the row matches the given criteria, * <code>false</code> otherwise * @throws MailboxException */ - protected boolean isMatch(SearchQuery query, MailboxMessage message, Logger log) throws MailboxException { + protected boolean isMatch(SearchQuery query, MailboxMessage message) throws MailboxException { final List<SearchQuery.Criterion> criteria = query.getCriterias(); final Collection<Long> recentMessageUids = query.getRecentMessageUids(); boolean result = true; if (criteria != null) { for (SearchQuery.Criterion criterion : criteria) { - if (!isMatch(criterion, message, recentMessageUids, log)) { + if (!isMatch(criterion, message, recentMessageUids)) { result = false; break; } @@ -144,14 +140,12 @@ public class MessageSearches implements Iterable<Long> { * <code>MailboxMessage</code>, not null * @param recentMessageUids * collection of recent message uids - * @param log - * the logger to use * @return <code>true</code> if the row matches the given criterion, * <code>false</code> otherwise * @throws MailboxException */ public boolean isMatch(SearchQuery.Criterion criterion, MailboxMessage message, - final Collection<Long> recentMessageUids, Logger log) throws MailboxException { + final Collection<Long> recentMessageUids) throws MailboxException { final boolean result; if (criterion instanceof SearchQuery.InternalDateCriterion) { result = matches((SearchQuery.InternalDateCriterion) criterion, message); @@ -159,7 +153,7 @@ public class MessageSearches implements Iterable<Long> { result = matches((SearchQuery.SizeCriterion) criterion, message); } else if (criterion instanceof SearchQuery.HeaderCriterion) { try { - result = matches((SearchQuery.HeaderCriterion) criterion, message, log); + result = matches((SearchQuery.HeaderCriterion) criterion, message); } catch (IOException e) { throw new MailboxException("Unable to search header", e); } @@ -170,11 +164,11 @@ public class MessageSearches implements Iterable<Long> { } else if (criterion instanceof SearchQuery.CustomFlagCriterion) { result = matches((SearchQuery.CustomFlagCriterion) criterion, message, recentMessageUids); } else if (criterion instanceof SearchQuery.TextCriterion) { - result = matches((SearchQuery.TextCriterion) criterion, message, log); + result = matches((SearchQuery.TextCriterion) criterion, message); } else if (criterion instanceof SearchQuery.AllCriterion) { result = true; } else if (criterion instanceof SearchQuery.ConjunctionCriterion) { - result = matches((SearchQuery.ConjunctionCriterion) criterion, message, recentMessageUids, log); + result = matches((SearchQuery.ConjunctionCriterion) criterion, message, recentMessageUids); } else if (criterion instanceof SearchQuery.ModSeqCriterion) { result = matches((SearchQuery.ModSeqCriterion) criterion, message); } else { @@ -183,16 +177,16 @@ public class MessageSearches implements Iterable<Long> { return result; } - protected boolean matches(SearchQuery.TextCriterion criterion, MailboxMessage message, Logger log) + protected boolean matches(SearchQuery.TextCriterion criterion, MailboxMessage message) throws MailboxException { try { final SearchQuery.ContainsOperator operator = criterion.getOperator(); final String value = operator.getValue(); switch (criterion.getType()) { case BODY: - return bodyContains(value, message, log); + return bodyContains(value, message); case FULL: - return messageContains(value, message, log); + return messageContains(value, message); default: throw new UnsupportedSearchException(); } @@ -203,47 +197,47 @@ public class MessageSearches implements Iterable<Long> { } } - protected boolean bodyContains(String value, MailboxMessage message, Logger log) throws IOException, MimeException { + protected boolean bodyContains(String value, MailboxMessage message) throws IOException, MimeException { final InputStream input = message.getFullContent(); - return isInMessage(value, input, false, log); + return isInMessage(value, input, false); } - protected boolean isInMessage(String value, InputStream input, boolean header, Logger log) throws IOException, MimeException { + protected boolean isInMessage(String value, InputStream input, boolean header) throws IOException, MimeException { MessageMatcher.MessageMatcherBuilder builder = MessageMatcher.builder() .searchContents(Lists.<CharSequence>newArrayList(value)) .caseInsensitive(true) .includeHeaders(header); - if (log != null) { - builder.logger(log); + if (session != null && session.getLog() != null) { + builder.logger(session.getLog()); } return builder.build().messageMatches(input); } - protected boolean messageContains(String value, MailboxMessage message, Logger log) throws IOException, MimeException { + protected boolean messageContains(String value, MailboxMessage message) throws IOException, MimeException { final InputStream input = message.getFullContent(); - return isInMessage(value, input, true, log); + return isInMessage(value, input, true); } private boolean matches(SearchQuery.ConjunctionCriterion criterion, MailboxMessage message, - final Collection<Long> recentMessageUids, Logger log) throws MailboxException { + final Collection<Long> recentMessageUids) throws MailboxException { final List<SearchQuery.Criterion> criteria = criterion.getCriteria(); switch (criterion.getType()) { case NOR: - return nor(criteria, message, recentMessageUids, log); + return nor(criteria, message, recentMessageUids); case OR: - return or(criteria, message, recentMessageUids, log); + return or(criteria, message, recentMessageUids); case AND: - return and(criteria, message, recentMessageUids, log); + return and(criteria, message, recentMessageUids); default: return false; } } private boolean and(List<SearchQuery.Criterion> criteria, MailboxMessage message, - final Collection<Long> recentMessageUids, Logger log) throws MailboxException { + final Collection<Long> recentMessageUids) throws MailboxException { boolean result = true; for (SearchQuery.Criterion criterion : criteria) { - boolean matches = isMatch(criterion, message, recentMessageUids, log); + boolean matches = isMatch(criterion, message, recentMessageUids); if (!matches) { result = false; break; @@ -253,10 +247,10 @@ public class MessageSearches implements Iterable<Long> { } private boolean or(List<SearchQuery.Criterion> criteria, MailboxMessage message, - final Collection<Long> recentMessageUids, Logger log) throws MailboxException { + final Collection<Long> recentMessageUids) throws MailboxException { boolean result = false; for (SearchQuery.Criterion criterion : criteria) { - boolean matches = isMatch(criterion, message, recentMessageUids, log); + boolean matches = isMatch(criterion, message, recentMessageUids); if (matches) { result = true; break; @@ -266,10 +260,10 @@ public class MessageSearches implements Iterable<Long> { } private boolean nor(List<SearchQuery.Criterion> criteria, MailboxMessage message, - final Collection<Long> recentMessageUids, Logger log) throws MailboxException { + final Collection<Long> recentMessageUids) throws MailboxException { boolean result = true; for (SearchQuery.Criterion criterion : criteria) { - boolean matches = isMatch(criterion, message, recentMessageUids, log); + boolean matches = isMatch(criterion, message, recentMessageUids); if (matches) { result = false; break; @@ -325,7 +319,7 @@ public class MessageSearches implements Iterable<Long> { return result; } - private boolean matches(SearchQuery.HeaderCriterion criterion, MailboxMessage message, Logger log) + private boolean matches(SearchQuery.HeaderCriterion criterion, MailboxMessage message) throws MailboxException, IOException { SearchQuery.HeaderOperator operator = criterion.getOperator(); String headerName = criterion.getHeaderName(); @@ -337,7 +331,7 @@ public class MessageSearches implements Iterable<Long> { } else if (operator instanceof SearchQuery.ExistsOperator) { result = exists(headerName, message); } else if (operator instanceof SearchQuery.AddressOperator) { - result = matchesAddress((SearchQuery.AddressOperator) operator, headerName, message, log); + result = matchesAddress((SearchQuery.AddressOperator) operator, headerName, message); } else { throw new UnsupportedSearchException(); } @@ -355,7 +349,7 @@ public class MessageSearches implements Iterable<Long> { * @throws IOException */ private boolean matchesAddress(SearchQuery.AddressOperator operator, String headerName, - MailboxMessage message, Logger log) throws MailboxException, IOException { + MailboxMessage message) throws MailboxException, IOException { String text = operator.getAddress().toUpperCase(Locale.ENGLISH); List<Header> headers = ResultUtils.createHeaders(message); for (Header header : headers) { http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java index 7d05a49..7dccf41 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java @@ -48,6 +48,7 @@ import org.apache.james.mailbox.store.mail.MessageMapperFactory; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.MailboxMessage; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap.Builder; @@ -99,6 +100,7 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex { @Override public Iterator<Long> search(MailboxSession session, Mailbox mailbox, SearchQuery query) throws MailboxException { + Preconditions.checkArgument(session != null, "'session' is mandatory"); return searchMultimap(session, ImmutableList.of(mailbox), query) .get(mailbox.getMailboxId()) .iterator(); @@ -114,6 +116,9 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex { } private Multimap<MailboxId, Long> searchMultimap(MailboxSession session, Mailbox mailbox, SearchQuery query) throws MailboxException { + if (!isMatchingUser(session, mailbox)) { + return ImmutableMultimap.of(); + } MessageMapper mapper = messageMapperFactory.getMessageMapper(session); final SortedSet<MailboxMessage> hitSet = new TreeSet<MailboxMessage>(); @@ -139,15 +144,13 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex { } // MessageSearches does the filtering for us - if (session == null) { - return ImmutableMultimap.<MailboxId, Long>builder() - .putAll(mailbox.getMailboxId(), ImmutableList.copyOf(new MessageSearches(hitSet.iterator(), query).iterator())) - .build(); - } else { - return ImmutableMultimap.<MailboxId, Long>builder() - .putAll(mailbox.getMailboxId(), ImmutableList.copyOf(new MessageSearches(hitSet.iterator(), query, session.getLog()).iterator())) - .build(); - } + return ImmutableMultimap.<MailboxId, Long>builder() + .putAll(mailbox.getMailboxId(), ImmutableList.copyOf(new MessageSearches(hitSet.iterator(), query, session).iterator())) + .build(); + } + + private boolean isMatchingUser(MailboxSession session, Mailbox mailbox) { + return mailbox.getUser().equals(session.getUser().getUserName()); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java index 7b87e5c..d350e33 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java @@ -31,8 +31,6 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.search.MessageSearches; import org.junit.Before; import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SearchUtilsMultipartMixedTest { @@ -112,7 +110,6 @@ public class SearchUtilsMultipartMixedTest { Collection<Long> recent; - private Logger log = LoggerFactory.getLogger(this.getClass()); @Before public void setUp() throws Exception { final MessageBuilder builder = new MessageBuilder(); @@ -131,94 +128,94 @@ public class SearchUtilsMultipartMixedTest { @Test public void testShouldNotFindWhatIsNotThere() throws Exception { assertFalse(new MessageSearches().isMatch(SearchQuery.bodyContains("BOGUS"), row, - recent, log)); + recent)); assertFalse(new MessageSearches().isMatch(SearchQuery.mailContains("BOGUS"), row, - recent, log)); + recent)); } @Test public void testBodyShouldFindTextInBody() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery - .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log)); + .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO), - row, recent, log)); + row, recent)); } @Test public void testBodyShouldFindTextInBodyCaseInsensitive() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery - .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log)); + .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE.toLowerCase()), row, - recent, log)); + recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery .bodyContains(SAMPLE_INNER_MAIL_BODY_ONE.toUpperCase()), row, - recent, log)); + recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_ONE - .toUpperCase()), row, recent, log)); + .toUpperCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(SAMPLE_PART_TWO - .toUpperCase()), row, recent, log)); + .toUpperCase()), row, recent)); } @Test public void testBodyShouldNotFindTextInHeaders() throws Exception { assertFalse(new MessageSearches().isMatch(SearchQuery - .bodyContains(SAMPLE_INNER_MAIL_FIELD), row, recent, log)); + .bodyContains(SAMPLE_INNER_MAIL_FIELD), row, recent)); assertFalse(new MessageSearches().isMatch(SearchQuery - .bodyContains(SAMPLE_PART_TWO_FIELD), row, recent, log)); + .bodyContains(SAMPLE_PART_TWO_FIELD), row, recent)); } @Test public void testTextShouldFindTextInBody() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery - .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log)); + .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO), - row, recent, log)); + row, recent)); } @Test public void testTextShouldFindTextInBodyCaseInsensitive() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery - .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log)); + .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery .mailContains(SAMPLE_INNER_MAIL_BODY_ONE.toLowerCase()), row, - recent, log)); + recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery .mailContains(SAMPLE_INNER_MAIL_BODY_ONE.toUpperCase()), row, - recent, log)); + recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_ONE - .toUpperCase()), row, recent, log)); + .toUpperCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SAMPLE_PART_TWO - .toUpperCase()), row, recent, log)); + .toUpperCase()), row, recent)); } @Test public void testTextShouldFindTextInHeaders() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery - .mailContains(SAMPLE_INNER_MAIL_FIELD), row, recent, log)); + .mailContains(SAMPLE_INNER_MAIL_FIELD), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery - .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent, log)); + .mailContains(SAMPLE_INNER_MAIL_BODY_ONE), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery - .mailContains(SAMPLE_PART_TWO_FIELD), row, recent, log)); + .mailContains(SAMPLE_PART_TWO_FIELD), row, recent)); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/c981e8a3/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java index d8c7e58..c06c191 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java @@ -31,8 +31,6 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.search.MessageSearches; import org.junit.Before; import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SearchUtilsRFC822Test { @@ -50,7 +48,6 @@ public class SearchUtilsRFC822Test { MailboxMessage row; - private Logger log = LoggerFactory.getLogger(getClass()); Collection<Long> recent; @Before @@ -69,52 +66,52 @@ public class SearchUtilsRFC822Test { @Test public void testBodyShouldMatchPhraseInBody() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(CUSTARD), row, - recent, log)); + recent)); assertFalse(new MessageSearches().isMatch(SearchQuery - .bodyContains(CUSTARD + CUSTARD), row, recent, log)); + .bodyContains(CUSTARD + CUSTARD), row, recent)); } @Test public void testBodyMatchShouldBeCaseInsensitive() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(RHUBARD), row, - recent, log)); + recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(RHUBARD - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.bodyContains(RHUBARD - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); } @Test public void testBodyShouldNotMatchPhraseOnlyInHeader() throws Exception { assertFalse(new MessageSearches().isMatch(SearchQuery.bodyContains(FROM_ADDRESS), - row, recent, log)); + row, recent)); assertFalse(new MessageSearches().isMatch(SearchQuery.bodyContains(SUBJECT_PART), - row, recent, log)); + row, recent)); } @Test public void testTextShouldMatchPhraseInBody() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(CUSTARD), row, - recent, log)); + recent)); assertFalse(new MessageSearches().isMatch(SearchQuery - .mailContains(CUSTARD + CUSTARD), row, recent, log)); + .mailContains(CUSTARD + CUSTARD), row, recent)); } @Test public void testTextMatchShouldBeCaseInsensitive() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(RHUBARD), row, - recent, log)); + recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(RHUBARD - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(RHUBARD - .toLowerCase()), row, recent, log)); + .toLowerCase()), row, recent)); } @Test public void testBodyShouldMatchPhraseOnlyInHeader() throws Exception { assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(FROM_ADDRESS), - row, recent, log)); + row, recent)); assertTrue(new MessageSearches().isMatch(SearchQuery.mailContains(SUBJECT_PART), - row, recent, log)); + row, recent)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org