Author: btellier
Date: Mon Jun 29 08:36:12 2015
New Revision: 1688133
URL: http://svn.apache.org/r1688133
Log:
MAILBOX-155 Replacing ISO_OFFSET_DATE_TIME
Added:
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
james/mailbox/trunk/elasticsearch/src/test/resources/documents/frnog.eml
james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail1.eml
james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail2.eml
james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail3.eml
james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail4.eml
Modified:
james/mailbox/trunk/elasticsearch/pom.xml
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
james/mailbox/trunk/elasticsearch/src/main/resources/META-INF/spring/mailbox-elasticsearch.xml
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.eml
james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.json
Modified: james/mailbox/trunk/elasticsearch/pom.xml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/pom.xml?rev=1688133&r1=1688132&r2=1688133&view=diff
==============================================================================
--- james/mailbox/trunk/elasticsearch/pom.xml (original)
+++ james/mailbox/trunk/elasticsearch/pom.xml Mon Jun 29 08:36:12 2015
@@ -97,10 +97,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.james</groupId>
- <artifactId>apache-james-mailbox-store</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.10.4</version>
@@ -144,6 +140,11 @@
<artifactId>groovy-all</artifactId>
<version>2.3.2</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-james-mailbox-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<profiles>
Modified:
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java?rev=1688133&r1=1688132&r2=1688133&view=diff
==============================================================================
---
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
(original)
+++
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
Mon Jun 29 08:36:12 2015
@@ -22,10 +22,10 @@ import java.util.Iterator;
import javax.mail.Flags;
-import org.apache.commons.lang.NotImplementedException;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageRange.Type;
@@ -42,22 +42,23 @@ import org.slf4j.LoggerFactory;
public class ElasticSearchListeningMessageSearchIndex<Id extends MailboxId>
extends ListeningMessageSearchIndex<Id> {
private final static Logger LOGGER =
LoggerFactory.getLogger(ElasticSearchListeningMessageSearchIndex.class);
- private final static int NO_LIMIT = -1;
private final static String ID_SEPARATOR = ":";
private final ElasticSearchIndexer indexer;
+ private final ElasticSearchSearcher<Id> searcher;
private final MessageToElasticSearchJson messageToElasticSearchJson;
- public ElasticSearchListeningMessageSearchIndex(MessageMapperFactory<Id>
factory,
- ElasticSearchIndexer indexer, MessageToElasticSearchJson
messageToElasticSearchJson) {
+ public ElasticSearchListeningMessageSearchIndex(MessageMapperFactory<Id>
factory, ElasticSearchIndexer indexer,
+ ElasticSearchSearcher<Id> searcher, MessageToElasticSearchJson
messageToElasticSearchJson) {
super(factory);
this.indexer = indexer;
this.messageToElasticSearchJson = messageToElasticSearchJson;
+ this.searcher = searcher;
}
@Override
public Iterator<Long> search(MailboxSession session, Mailbox<Id> mailbox,
SearchQuery searchQuery) throws MailboxException {
- throw new NotImplementedException();
+ return searcher.search(mailbox, searchQuery);
}
@Override
Added:
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java?rev=1688133&view=auto
==============================================================================
---
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
(added)
+++
james/mailbox/trunk/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,93 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.elasticsearch.search;
+
+import java.util.Iterator;
+import java.util.Optional;
+import java.util.stream.StreamSupport;
+
+import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
+import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
+import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
+import org.apache.james.mailbox.elasticsearch.query.SortConverter;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
+import org.elasticsearch.action.search.SearchRequestBuilder;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.Client;
+import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.node.Node;
+import org.elasticsearch.search.SearchHit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ElasticSearchSearcher<Id extends MailboxId> {
+
+ private static final Logger LOGGER =
LoggerFactory.getLogger(ElasticSearchSearcher.class);
+
+ private final Node node;
+ private final QueryConverter queryConverter;
+
+ public ElasticSearchSearcher(Node node, QueryConverter queryConverter) {
+ this.node = node;
+ this.queryConverter = queryConverter;
+ }
+
+ public Iterator<Long> search(Mailbox<Id> mailbox, SearchQuery searchQuery)
throws MailboxException {
+ try (Client client = node.client()) {
+ return transformResponseToUidIterator(
+ getSearchRequestBuilder(client, mailbox, searchQuery).get());
+ }
+ }
+
+ private SearchRequestBuilder getSearchRequestBuilder(Client client,
Mailbox<Id> mailbox, SearchQuery searchQuery) {
+ return searchQuery.getSorts()
+ .stream()
+ .reduce(
+ client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
+ .setTypes(ElasticSearchIndexer.MESSAGE_TYPE)
+ .setScroll(new TimeValue(60000))
+ .setQuery(queryConverter.from(searchQuery,
mailbox.getMailboxId().serialize()))
+ .setSize(100),
+ (searchBuilder, sort) ->
searchBuilder.addSort(SortConverter.convertSort(sort)),
+ (partialResult1, partialResult2) -> partialResult1);
+ }
+
+ private Iterator<Long> transformResponseToUidIterator(SearchResponse
searchResponse) {
+ return StreamSupport.stream(searchResponse.getHits().spliterator(),
false)
+ .map(this::extractUidFromHit)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .iterator();
+
+ }
+
+ private Optional<Long> extractUidFromHit(SearchHit hit) {
+ try {
+ return Optional.of(((Number)
hit.getSource().get(JsonMessageConstants.ID)).longValue());
+ } catch (Exception exception) {
+ LOGGER.warn("Can not extract UID for search result " +
hit.getId(), exception);
+ return Optional.empty();
+ }
+ }
+
+}
Modified:
james/mailbox/trunk/elasticsearch/src/main/resources/META-INF/spring/mailbox-elasticsearch.xml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/main/resources/META-INF/spring/mailbox-elasticsearch.xml?rev=1688133&r1=1688132&r2=1688133&view=diff
==============================================================================
---
james/mailbox/trunk/elasticsearch/src/main/resources/META-INF/spring/mailbox-elasticsearch.xml
(original)
+++
james/mailbox/trunk/elasticsearch/src/main/resources/META-INF/spring/mailbox-elasticsearch.xml
Mon Jun 29 08:36:12 2015
@@ -31,7 +31,8 @@
<bean id="elasticsearch-listener"
class="org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex">
<constructor-arg index="0" ref="elasticsearch-node"/>
<constructor-arg index="1" ref="elasticsearch-indexer"/>
- <constructor-arg index="2" ref="elasticsearch-json"/>
+ <constructor-arg index="2" ref="elasticsearch-searcher"/>
+ <constructor-arg index="3" ref="elasticsearch-json"/>
</bean>
<bean id="elasticsearch-indexer"
class="org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer">
@@ -42,6 +43,7 @@
<bean id="elasticsearch-searcher"
class="org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher">
<constructor-arg index="0" ref="elasticsearch-node"/>
+ <constructor-arg index="1" ref="query-converter"/>
</bean>
<bean id="elasticsearch-node-no-index"
class="org.apache.james.mailbox.cassandra.elasticsearch.NodeProvider"
factory-method="createNodeForClusterName">
@@ -59,4 +61,10 @@
<constructor-arg index="0" ref="elasticsearch-node-index"/>
</bean>
+ <bean id="query-converter"
class="org.apache.james.mailbox.elasticsearch.query.QueryConverter">
+ <constructor-arg index="0" ref="criterion-converter"/>
+ </bean>
+
+ <bean id="criterion-converter"
class="org.apache.james.mailbox.elasticsearch.query.CriterionConverter"/>
+
</beans>
Added:
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java?rev=1688133&view=auto
==============================================================================
---
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
(added)
+++
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,517 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.elasticsearch;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.text.SimpleDateFormat;
+
+import javax.mail.Flags;
+
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import
org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.elasticsearch.query.CriterionConverter;
+import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
+import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.MockAuthenticator;
+import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.elasticsearch.node.Node;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+
+public class ElasticSearchIntegrationTest {
+
+ private static final Logger LOGGER =
LoggerFactory.getLogger(ElasticSearchIntegrationTest.class);
+
+ private static Node node;
+ private static StoreMailboxManager<InMemoryId> storeMailboxManager;
+ private static ElasticSearchListeningMessageSearchIndex
elasticSearchListeningMessageSearchIndex;
+ private static Mailbox mailbox;
+ private static SimpleDateFormat format;
+ private static MailboxSession session;
+
+ @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Before
+ @SuppressWarnings("unchecked")
+ public void setUp() throws Exception {
+ format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
+
+ initializeMailboxManager();
+
+ session = storeMailboxManager.createSystemSession("benwa", LOGGER);
+
+ storeMailboxManager.createMailbox(new MailboxPath("#private", "benwa",
"INBOX"), session);
+ StoreMessageManager<InMemoryId> messageManager =
(StoreMessageManager<InMemoryId>) storeMailboxManager.getMailbox(new
MailboxPath("#private", "benwa", "INBOX"), session);
+ mailbox = messageManager.getMailboxEntity();
+
+ // sentDate: Wed, 3 Jun 2015 09:05:46 +0000
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/spamMail.eml"),
+ format.parse("2014/01/02 00:00:00.000"),
+ session,
+ true,
+ new Flags(Flags.Flag.DELETED));
+ //sentDate: Thu, 4 Jun 2015 09:23:37 +0000
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/mail1.eml"),
+ format.parse("2014/02/02 00:00:00.000"),
+ session,
+ true,
+ new Flags(Flags.Flag.ANSWERED));
+ //sentDate: Thu, 4 Jun 2015 09:27:37 +0000
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/mail2.eml"),
+ format.parse("2014/03/02 00:00:00.000"),
+ session,
+ true,
+ new Flags(Flags.Flag.DRAFT));
+ //sentDate: Tue, 2 Jun 2015 08:16:19 +0000
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/mail3.eml"),
+ format.parse("2014/05/02 00:00:00.000"),
+ session,
+ true,
+ new Flags(Flags.Flag.RECENT));
+ //sentDate: Fri, 15 May 2015 06:35:59 +0000
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/mail4.eml"),
+ format.parse("2014/04/02 00:00:00.000"),
+ session,
+ true,
+ new Flags(Flags.Flag.FLAGGED));
+ //sentDate: Wed, 03 Jun 2015 19:14:32 +0000
+ messageManager.appendMessage(
+
ClassLoader.getSystemResourceAsStream("documents/pgpSignedMail.eml"),
+ format.parse("2014/06/02 00:00:00.000"),
+ session,
+ true,
+ new Flags(Flags.Flag.SEEN));
+ //sentDate: Thu, 04 Jun 2015 07:36:08 +0000
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/htmlMail.eml"),
+ format.parse("2014/07/02 00:00:00.000"),
+ session,
+ false,
+ new Flags());
+ //sentDate: Thu, 4 Jun 2015 06:08:41 +0200
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/mail.eml"),
+ format.parse("2014/08/02 00:00:00.000"),
+ session,
+ true,
+ new Flags("Hello"));
+ //sentDate: Tue, 2 Jun 2015 12:00:55 +0200
+ messageManager.appendMessage(
+ ClassLoader.getSystemResourceAsStream("documents/frnog.eml"),
+ format.parse("2014/09/02 00:00:00.000"),
+ session,
+ true,
+ new Flags("Hello you"));
+
+ EmbeddedElasticSearch.awaitForElasticSearch(node);
+ }
+
+ private void initializeMailboxManager() throws Exception {
+ node = NodeMappingFactory.applyMapping(
+ IndexCreationFactory.createIndex(
+ EmbeddedElasticSearch.provideNode(temporaryFolder)
+ )
+ );
+ MailboxSessionMapperFactory<InMemoryId> mapperFactory = new
InMemoryMailboxSessionMapperFactory();
+ elasticSearchListeningMessageSearchIndex = new
ElasticSearchListeningMessageSearchIndex(mapperFactory,
+ new ElasticSearchIndexer(node),
+ new ElasticSearchSearcher<InMemoryId>(node, new QueryConverter(new
CriterionConverter())),
+ new MessageToElasticSearchJson());
+ storeMailboxManager = new StoreMailboxManager<>(
+ mapperFactory,
+ new MockAuthenticator(),
+ new JVMMailboxPathLocker(),
+ new UnionMailboxACLResolver(),
+ new SimpleGroupMembershipResolver());
+
storeMailboxManager.setMessageSearchIndex(elasticSearchListeningMessageSearchIndex);
+ storeMailboxManager.init();
+ }
+
+ @After
+ public void cleanUp() {
+ EmbeddedElasticSearch.shutDown(node);
+ }
+
+ @Test
+ public void allShouldReturnAllUids() throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.all());
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L);
+ }
+
+ @Test
+ public void bodyContainsShouldReturnUidOfMessageContainingTheGivenText()
throws MailboxException {
+ /*
+ Only mail4.eml contains word MAILET-94
+ */
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.bodyContains("MAILET-94"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(5L);
+ }
+
+ @Test
+ public void
bodyContainsShouldReturnUidOfMessageContainingTheApproximativeText() throws
MailboxException {
+ /*
+ mail1.eml contains words created AND summary
+ mail.eml contains created and thus matches the query with a low score
+ */
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.bodyContains("created summary"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(2L, 8L);
+ }
+
+ @Test
+ public void
flagIsSetShouldReturnUidOfMessageMarkedAsDeletedWhenUsedWithFlagDeleted()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.DELETED));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L);
+ }
+
+ @Test
+ public void
flagIsSetShouldReturnUidOfMessageMarkedAsAnsweredWhenUsedWithFlagAnswered()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.ANSWERED));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(2L);
+ }
+
+ @Test
+ public void
flagIsSetShouldReturnUidOfMessageMarkedAsDraftWhenUsedWithFlagDraft() throws
MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.DRAFT));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(3L);
+ }
+
+ @Test
+ public void
flagIsSetShouldReturnUidOfMessageMarkedAsRecentWhenUsedWithFlagRecent() throws
MailboxException {
+ // Only message 7 is not marked as RECENT
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.RECENT));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 3L, 4L, 5L, 6L, 8L, 9L);
+ }
+
+ @Test
+ public void
flagIsSetShouldReturnUidOfMessageMarkedAsFlaggedWhenUsedWithFlagFlagged()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.FLAGGED));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(5L);
+ }
+
+ @Test
+ public void
flagIsSetShouldReturnUidOfMessageMarkedAsSeenWhenUsedWithFlagSeen() throws
MailboxException {
+ // Only message 6 is marked as read.
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet(Flags.Flag.SEEN));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(6L);
+ }
+
+ @Ignore("This test will fail as Memory mailbox has no support for user
defined flags. This test will return two message instead of one => mapping
issue")
+ @Test
+ public void flagIsSetShouldReturnUidsOfMessageContainingAGivenUserFlag()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet("Hello"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(8L);
+ }
+
+ @Ignore("This test will fail as Memory mailbox has no support for user
defined flags. This test will return two message instead of one => mapping
issue")
+ @Test
+ public void userFlagsShouldBeMatchedExactly() throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsSet("Hello bonjour"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(8L);
+ }
+
+ @Test
+ public void
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsDeletedWhenUsedWithFlagDeleted()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.DELETED));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L);
+ }
+
+ @Test
+ public void
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsAnsweredWhenUsedWithFlagAnswered()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.ANSWERED));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 3L, 4L, 5L, 6L, 7L, 8L, 9L);
+ }
+
+ @Test
+ public void
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsDraftWhenUsedWithFlagDraft()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 4L, 5L, 6L, 7L, 8L, 9L);
+ }
+
+ @Test
+ public void
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsRecentWhenUsedWithFlagRecent()
throws MailboxException {
+ // Only message 7 is not marked as RECENT
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.RECENT));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(7L);
+ }
+
+ @Test
+ public void
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsFlaggedWhenUsedWithFlagFlagged()
throws MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.FLAGGED));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 3L, 4L, 6L, 7L, 8L, 9L);
+ }
+
+ @Test
+ public void
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsSeendWhenUsedWithFlagSeen()
throws MailboxException {
+ // Only message 6 is marked as read.
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flags.Flag.SEEN));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 3L, 4L, 5L, 7L, 8L, 9L);
+ }
+
+ @Ignore("This test will fail as Memory mailbox has no support for user
defined flags. This test will return two message instead of one => mapping
issue")
+ @Test
+ public void
flagIsUnSetShouldReturnUidsOfMessageNotContainingAGivenUserFlag() throws
MailboxException {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.flagIsUnSet("Hello"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(8L);
+ }
+
+ @Test
+ public void internalDateAfterShouldReturnMessagesAfterAGivenDate() throws
Exception {
+ SearchQuery searchQuery = new SearchQuery();
+
searchQuery.andCriteria(SearchQuery.internalDateAfter(format.parse("2014/07/02
00:00:00.000"), SearchQuery.DateResolution.Day));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(7L, 8L, 9L);
+ }
+
+ @Test
+ public void internalDateBeforeShouldReturnMessagesBeforeAGivenDate()
throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+
searchQuery.andCriteria(SearchQuery.internalDateBefore(format.parse("2014/02/02
00:00:00.000"), SearchQuery.DateResolution.Day));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L);
+ }
+
+ @Test
+ public void internalDateOnShouldReturnMessagesOfTheGivenDate() throws
Exception {
+ SearchQuery searchQuery = new SearchQuery();
+
searchQuery.andCriteria(SearchQuery.internalDateOn(format.parse("2014/03/02
00:00:00.000"), SearchQuery.DateResolution.Day));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(3L);
+ }
+
+ @Test
+ public void modSeqEqualsShouldReturnUidsOfMessageHavingAGivenModSeq()
throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.modSeqEquals(2L));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(2L);
+ }
+
+ @Test
+ public void
modSeqGreaterThanShouldReturnUidsOfMessageHavingAGreaterModSeq() throws
Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.modSeqGreaterThan(7L));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(7L, 8L, 9L);
+ }
+
+ @Test
+ public void modSeqLessThanShouldReturnUidsOfMessageHavingAGreaterModSeq()
throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.modSeqLessThan(3L));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 3L);
+ }
+
+ @Test
+ public void
sizeGreaterThanShouldReturnUidsOfMessageExceedingTheSpecifiedSize() throws
Exception {
+ // Only message 7 is over 10 KB
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.sizeGreaterThan(10000L));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(7L);
+ }
+
+ @Test
+ public void
sizeLessThanShouldReturnUidsOfMessageNotExceedingTheSpecifiedSize() throws
Exception {
+ // Only message 2 3 4 5 9 are under 5 KB
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.sizeLessThan(5000L));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(2L, 3L, 4L, 5L, 9L);
+ }
+
+ @Test
+ public void
headerContainsShouldReturnUidsOfMessageHavingThisHeaderWithTheSpecifiedValue()
throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.headerContains("Precedence",
"list"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 6L, 8L, 9L);
+ }
+
+ @Test
+ public void headerExistsShouldReturnUidsOfMessageHavingThisHeader() throws
Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.headerExists("Precedence"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L, 2L, 3L, 4L, 5L, 6L, 8L, 9L);
+ }
+
+ @Test
+ public void
addressShouldReturnUidHavingRightExpeditorWhenFromIsSpecified() throws
Exception {
+ SearchQuery searchQuery = new SearchQuery();
+
searchQuery.andCriteria(SearchQuery.address(SearchQuery.AddressType.From,
"[email protected]"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(8L);
+ }
+
+ @Test
+ public void addressShouldReturnUidHavingRightRecipientWhenToIsSpecified()
throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+
searchQuery.andCriteria(SearchQuery.address(SearchQuery.AddressType.To,
"[email protected]"));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(1L);
+ }
+
+ @Test
+ public void uidShouldreturnExistingUidsOnTheGivenRanges() throws Exception
{
+ SearchQuery searchQuery = new SearchQuery();
+ SearchQuery.NumericRange[] numericRanges = {new
SearchQuery.NumericRange(2L, 4L), new SearchQuery.NumericRange(6L, 7L)};
+ searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(2L, 3L, 4L, 6L, 7L);
+ }
+
+ @Test
+ public void youShouldBeAbleToSpecifySeveralCriterionOnASingleQuery()
throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.headerExists("Precedence"));
+ searchQuery.andCriteria(SearchQuery.modSeqGreaterThan(6L));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(6L, 8L, 9L);
+ }
+
+ @Test
+ public void andShouldReturnResultsMatchingBothRequests() throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(
+ SearchQuery.and(
+ SearchQuery.headerExists("Precedence"),
+ SearchQuery.modSeqGreaterThan(6L)));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(6L, 8L, 9L);
+ }
+
+ @Test
+ public void notShouldReturnResultsThatDoNotMatchAQuery() throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(
+ SearchQuery.not(SearchQuery.headerExists("Precedence")));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(7L);
+ }
+
+ @Test
+ public void sortShouldOrderMessages() throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.all());
+ searchQuery.setSorts(Lists.newArrayList(new
SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival)));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsExactly(1L, 2L, 3L, 5L, 4L, 6L, 7L, 8L, 9L);
+ }
+
+ @Test
+ public void revertSortingShouldReturnElementsInAReversedOrder() throws
Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.all());
+ searchQuery.setSorts(Lists.newArrayList(new
SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsExactly(9L, 8L, 7L, 6L, 4L, 5L, 3L, 2L, 1L);
+ }
+
+ @Test
+ public void headerDateAfterShouldWork() throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.headerDateAfter("sentDate",
format.parse("2015/06/04 11:00:00.000"), SearchQuery.DateResolution.Second));
+ searchQuery.setSorts(Lists.newArrayList(new
SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(3L, 2L);
+ }
+
+ @Test
+ public void headerDateBeforeShouldWork() throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.headerDateBefore("sentDate",
format.parse("2015/06/01 00:00:00.000"), SearchQuery.DateResolution.Day));
+ searchQuery.setSorts(Lists.newArrayList(new
SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(5L);
+ }
+
+ @Test
+ public void headerDateOnShouldWork() throws Exception {
+ SearchQuery searchQuery = new SearchQuery();
+ searchQuery.andCriteria(SearchQuery.headerDateOn("sentDate",
format.parse("2015/06/02 08:00:00.000"), SearchQuery.DateResolution.Day));
+ searchQuery.setSorts(Lists.newArrayList(new
SearchQuery.Sort(SearchQuery.Sort.SortClause.Arrival, true)));
+ assertThat(elasticSearchListeningMessageSearchIndex.search(session,
mailbox, searchQuery))
+ .containsOnly(4L, 9L);
+ }
+
+}
Modified:
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java?rev=1688133&r1=1688132&r2=1688133&view=diff
==============================================================================
---
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
(original)
+++
james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
Mon Jun 29 08:36:12 2015
@@ -32,10 +32,10 @@ import java.util.stream.LongStream;
import javax.mail.Flags;
-import org.apache.commons.lang.NotImplementedException;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.store.TestId;
import org.apache.james.mailbox.store.mail.MessageMapperFactory;
@@ -60,6 +60,7 @@ public class ElasticSearchListeningMessa
private MessageMapperFactory<TestId> mapperFactory;
private ElasticSearchIndexer indexer;
private MessageToElasticSearchJson messageToElasticSearchJson;
+ private ElasticSearchSearcher<TestId> elasticSearchSearcher;
private ElasticSearchListeningMessageSearchIndex<TestId> testee;
@@ -73,15 +74,10 @@ public class ElasticSearchListeningMessa
messageToElasticSearchJson =
control.createMock(MessageToElasticSearchJson.class);
expect(messageToElasticSearchJson.convertToJson(anyObject(Message.class))).andReturn("json
content").anyTimes();
expect(messageToElasticSearchJson.getUpdatedJsonMessagePart(anyObject(Flags.class),
anyLong())).andReturn("json updated content").anyTimes();
+
+ elasticSearchSearcher =
control.createMock(ElasticSearchSearcher.class);
- testee = new ElasticSearchListeningMessageSearchIndex<>(mapperFactory,
indexer, messageToElasticSearchJson);
- }
-
- @Test(expected=NotImplementedException.class)
- public void searchShouldThrow() throws Exception {
- control.replay();
- testee.search(null, null, null);
- control.verify();
+ testee = new ElasticSearchListeningMessageSearchIndex<>(mapperFactory,
indexer, elasticSearchSearcher, messageToElasticSearchJson);
}
@Test
Added: james/mailbox/trunk/elasticsearch/src/test/resources/documents/frnog.eml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/frnog.eml?rev=1688133&view=auto
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/resources/documents/frnog.eml
(added)
+++ james/mailbox/trunk/elasticsearch/src/test/resources/documents/frnog.eml
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,92 @@
+Return-Path: <[email protected]>
+Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
+ by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
+ Tue, 02 Jun 2015 12:01:42 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from localhost (spam.minet.net [192.168.102.97])
+ by mx2.minet.net (Postfix) with ESMTP id E92F2A25320
+ for <[email protected]>; Tue, 2 Jun 2015 12:01:46 +0200 (CEST)
+X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
+X-Spam-Flag: NO
+X-Spam-Score: -1.499
+X-Spam-Level:
+X-Spam-Status: No, score=-1.499 required=1 tests=[BAYES_00=-1.5,
+ UNPARSEABLE_RELAY=0.001] autolearn=ham
+Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
+ by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new,
port 10024)
+ with ESMTP id bRNLR9Tbk4Jg for <[email protected]>;
+ Tue, 2 Jun 2015 10:01:46 +0000 (UTC)
+Received-SPF: Pass (sender SPF authorized) identity=mailfrom;
client-ip=217.24.82.4; helo=cabale.usenet-fr.net;
[email protected]; [email protected]
+Received: from cabale.usenet-fr.net (cabale.usenet-fr.net [217.24.82.4])
+ by mx2.minet.net (Postfix) with ESMTP id 089E7A2531A
+ for <[email protected]>; Tue, 2 Jun 2015 12:01:45 +0200 (CEST)
+Received: by cabale.usenet-fr.net (Postfix, from userid 90)
+ id A267298A5DC6; Tue, 2 Jun 2015 12:01:44 +0200 (CEST)
+X-Original-To: [email protected]
+Delivered-To: [email protected]
+Received: from mta.mail.waycom.net (mta.mail.waycom.net [194.177.32.18])
+ by cabale.usenet-fr.net (Postfix) with ESMTP id AE2E798A58FC
+ for <[email protected]>; Tue, 2 Jun 2015 12:01:01 +0200 (CEST)
+Received: from [127.0.0.1] (localhost [127.0.0.1])
+ by mta.mail.waycom.net (Postfix) with ESMTP id D30D6567E1
+ for <[email protected]>; Tue, 2 Jun 2015 12:00:56 +0200 (CEST)
+Received: from [127.0.0.1] (localhost [127.0.0.1])
+ wcm-hv1-exch1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a) with Microsoft SMTP
+ Server (TLS) id 15.0.847.32; Tue, 2 Jun 2015 12:00:56 +0200
+Message-ID: <[email protected]>
+Date: Tue, 2 Jun 2015 12:00:55 +0200
+From: Guillaume Genty <[email protected]>
+Organization: Waycom
+MIME-Version: 1.0
+To: <[email protected]>
+Content-Type: text/plain; charset="utf-8"; format=flowed
+Content-Transfer-Encoding: 8bit
+X-ClientProxiedBy: WCM-HV1-EXCH1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a) To
+ wcm-hv1-exch1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a)
+X-C2ProcessedOrg: 9180093e-3f32-48c9-b36b-0805cbe4c266
+Subject: [FRnOG] [BIZ] Collecte de liens C2E/CELAN en DOM
+X-Loop: [email protected]
+X-Sequence: 5349
+Errors-to: [email protected]
+Precedence: list
+Precedence: bulk
+Sender: [email protected]
+X-mailing-list: [email protected]
+List-Id: <frnog.frnog.org>
+List-Archive: <http://sympa.frnog.org/wss/arc/frnog>
+List-Help: <mailto:[email protected]?subject=help>
+List-Owner: <mailto:[email protected]>
+List-Post: <mailto:[email protected]>
+List-Subscribe: <mailto:[email protected]?subject=subscribe%20frnog>
+List-Unsubscribe: <mailto:[email protected]?subject=unsubscribe%20frnog>
+
+Bonjour le FRnOG,
+
+
+Je cherche un partenaire dans les DOM avec de la collecte C2E et/ou
+CELAN capable de revendre des liens et de remonter le trafic (en niveau
+2, L2TP ou PPP sur L2TP) en métropole, idéalement à TH2.
+
+Nous aurions besoin des DOM suivants:
+- Guadeloupe
+- Martinique
+- Guyane
+- La Réunion
+(Toutes les plaques DOM sauf îles du nord)
+
+Merci d'avance !
+
+
+Cordialement,
+
+--
+Guillaume Genty | WAYCOM
+Directeur Technique Adjoint
+24-28 Avenue du Général de Gaulle | F-92150 Suresnes, FRANCE
+T. : +33 (0)1 41 44 83 00 | F. : +33 (0)1 41 44 00 22
[email protected] | www.waycom.net
+
+
+---------------------------
+Liste de diffusion du FRnOG
+http://www.frnog.org/
Added: james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail1.eml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail1.eml?rev=1688133&view=auto
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail1.eml
(added)
+++ james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail1.eml
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,69 @@
+Return-Path: <[email protected]>
+Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
+ by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
+ Thu, 04 Jun 2015 11:23:39 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from localhost (spam.minet.net [192.168.102.97])
+ by mx1.minet.net (Postfix) with ESMTP id 0113F385C15
+ for <[email protected]>; Thu, 4 Jun 2015 11:23:43 +0200 (CEST)
+X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
+X-Spam-Flag: NO
+X-Spam-Score: -1.51
+X-Spam-Level:
+X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
+ T_RP_MATCHES_RCVD=-0.01] autolearn=ham
+Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
+ by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new,
port 10024)
+ with ESMTP id IeILbadS9lo5 for <[email protected]>;
+ Thu, 4 Jun 2015 09:23:42 +0000 (UTC)
+Received-SPF: Pass (sender SPF authorized) identity=mailfrom;
client-ip=140.211.11.3; helo=mail.apache.org;
envelope-from=server-dev-return-56862-benwa=minet....@james.apache.org;
[email protected]
+Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
+ by mx2.minet.net (Postfix) with SMTP id CDE83A1C7FC
+ for <[email protected]>; Thu, 4 Jun 2015 11:23:40 +0200 (CEST)
+Received: (qmail 37249 invoked by uid 500); 4 Jun 2015 09:23:38 -0000
+Mailing-List: contact [email protected]; run by ezmlm
+Precedence: bulk
+List-Unsubscribe: <mailto:[email protected]>
+List-Help: <mailto:[email protected]>
+List-Post: <mailto:[email protected]>
+List-Id: "James Developers List" <server-dev.james.apache.org>
+Reply-To: "James Developers List" <[email protected]>
+Delivered-To: mailing list [email protected]
+Received: (qmail 37236 invoked by uid 99); 4 Jun 2015 09:23:38 -0000
+Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
+ by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:23:38 +0000
+Date: Thu, 4 Jun 2015 09:23:37 +0000
+From: "Tellier Benoit (JIRA)" <[email protected]>
+To: [email protected]
+Message-ID: <[email protected]>
+In-Reply-To: <[email protected]>
+References: <[email protected]>
<JIRA.12835341.1433409792972@arcas>
+Subject: [jira] [Created] (MAILBOX-234) Convert Message into JSON
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 7bit
+X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
+
+Tellier Benoit created MAILBOX-234:
+--------------------------------------
+
+ Summary: Convert Message into JSON
+ Key: MAILBOX-234
+ URL: https://issues.apache.org/jira/browse/MAILBOX-234
+ Project: James Mailbox
+ Issue Type: New Feature
+ Reporter: Tellier Benoit
+
+
+This would give us the ability to index e-mails in ElasticSearch.
+
+
+
+--
+This message was sent by Atlassian JIRA
+(v6.3.4#6332)
+
+---------------------------------------------------------------------
+To unsubscribe, e-mail: [email protected]
+For additional commands, e-mail: [email protected]
+
Added: james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail2.eml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail2.eml?rev=1688133&view=auto
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail2.eml
(added)
+++ james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail2.eml
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,82 @@
+Return-Path: <[email protected]>
+Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
+ by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
+ Thu, 04 Jun 2015 11:27:36 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from localhost (spam.minet.net [192.168.102.97])
+ by mx2.minet.net (Postfix) with ESMTP id D65F3A1CA35
+ for <[email protected]>; Thu, 4 Jun 2015 11:27:40 +0200 (CEST)
+X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
+X-Spam-Flag: NO
+X-Spam-Score: -1.51
+X-Spam-Level:
+X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
+ T_RP_MATCHES_RCVD=-0.01] autolearn=ham
+Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
+ by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new,
port 10024)
+ with ESMTP id jH3GE2vu5VKE for <[email protected]>;
+ Thu, 4 Jun 2015 09:27:40 +0000 (UTC)
+Received-SPF: Pass (sender SPF authorized) identity=mailfrom;
client-ip=140.211.11.3; helo=mail.apache.org;
envelope-from=server-dev-return-56863-benwa=minet....@james.apache.org;
[email protected]
+Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
+ by mx2.minet.net (Postfix) with SMTP id 85A3AA1CA2C
+ for <[email protected]>; Thu, 4 Jun 2015 11:27:38 +0200 (CEST)
+Received: (qmail 43145 invoked by uid 500); 4 Jun 2015 09:27:38 -0000
+Mailing-List: contact [email protected]; run by ezmlm
+Precedence: bulk
+List-Unsubscribe: <mailto:[email protected]>
+List-Help: <mailto:[email protected]>
+List-Post: <mailto:[email protected]>
+List-Id: "James Developers List" <server-dev.james.apache.org>
+Reply-To: "James Developers List" <[email protected]>
+Delivered-To: mailing list [email protected]
+Received: (qmail 43130 invoked by uid 99); 4 Jun 2015 09:27:38 -0000
+Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
+ by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:27:38 +0000
+Date: Thu, 4 Jun 2015 09:27:37 +0000
+From: "Tellier Benoit (JIRA)" <[email protected]>
+To: [email protected]
+Message-ID: <[email protected]>
+In-Reply-To: <[email protected]>
+References: <[email protected]>
<JIRA.12781874.1426269127444@arcas>
+Subject: [jira] [Closed] (MAILBOX-217) We should index attachment in elastic
+ search
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 7bit
+X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
+
+
+ [
https://issues.apache.org/jira/browse/MAILBOX-217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
+
+Tellier Benoit closed MAILBOX-217.
+----------------------------------
+ Resolution: Duplicate
+
+We are reviewing work I did for this feature.
+
+This issue will be divided in smallest issues.
+
+The first one is MAILBOX-234
+
+> We should index attachment in elastic search
+> --------------------------------------------
+>
+> Key: MAILBOX-217
+> URL: https://issues.apache.org/jira/browse/MAILBOX-217
+> Project: James Mailbox
+> Issue Type: Improvement
+> Reporter: Tellier Benoit
+>
+> Attachment should be indexed in message document as nested document.
+> Their textual content should be available for better search results.
+
+
+
+--
+This message was sent by Atlassian JIRA
+(v6.3.4#6332)
+
+---------------------------------------------------------------------
+To unsubscribe, e-mail: [email protected]
+For additional commands, e-mail: [email protected]
+
Added: james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail3.eml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail3.eml?rev=1688133&view=auto
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail3.eml
(added)
+++ james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail3.eml
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,96 @@
+Return-Path: <[email protected]>
+Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
+ by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
+ Tue, 02 Jun 2015 10:16:17 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from localhost (spam.minet.net [192.168.102.97])
+ by mx1.minet.net (Postfix) with ESMTP id 52917327827
+ for <[email protected]>; Tue, 2 Jun 2015 10:16:22 +0200 (CEST)
+X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
+X-Spam-Flag: NO
+X-Spam-Score: -1.51
+X-Spam-Level:
+X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
+ T_RP_MATCHES_RCVD=-0.01] autolearn=ham
+Received: from mx1.minet.net ([IPv6:::ffff:192.168.102.25])
+ by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new,
port 10024)
+ with ESMTP id rcP3IZbh_eqS for <[email protected]>;
+ Tue, 2 Jun 2015 08:16:21 +0000 (UTC)
+Received-SPF: Pass (sender SPF authorized) identity=mailfrom;
client-ip=140.211.11.3; helo=mail.apache.org;
envelope-from=server-dev-return-56848-benwa=minet....@james.apache.org;
[email protected]
+Authentication-Results: mx1.minet.net; dkim=none reason="no signature";
+ dkim-adsp=none (insecure policy); dkim-atps=neutral
+Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
+ by mx1.minet.net (Postfix) with SMTP id 37EAD327826
+ for <[email protected]>; Tue, 2 Jun 2015 10:16:20 +0200 (CEST)
+Received: (qmail 1143 invoked by uid 500); 2 Jun 2015 08:16:20 -0000
+Mailing-List: contact [email protected]; run by ezmlm
+Precedence: bulk
+List-Unsubscribe: <mailto:[email protected]>
+List-Help: <mailto:[email protected]>
+List-Post: <mailto:[email protected]>
+List-Id: "James Developers List" <server-dev.james.apache.org>
+Reply-To: "James Developers List" <[email protected]>
+Delivered-To: mailing list [email protected]
+Received: (qmail 1132 invoked by uid 99); 2 Jun 2015 08:16:20 -0000
+Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
+ by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 02 Jun 2015 08:16:20 +0000
+Date: Tue, 2 Jun 2015 08:16:19 +0000
+From: "Eric Charles (JIRA)" <[email protected]>
+To: [email protected]
+Message-ID: <[email protected]>
+In-Reply-To: <[email protected]>
+References: <[email protected]>
<JIRA.12473940.1284322083687@arcas>
+Subject: [jira] [Closed] (MAILBOX-11) MailboxQuery ignore namespace
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
+
+
+ [ https://issues.apache.org/jira/browse/MAILBOX-11?page=3Dcom.atlassia=
+n.jira.plugin.system.issuetabpanels:all-tabpanel ]
+
+Eric Charles closed MAILBOX-11.
+-------------------------------
+ Resolution: Fixed
+ Assignee: Eric Charles (was: Norman Maurer)
+
+Committed, Thx Benoit.
+
+> MailboxQuery ignore namespace
+> -----------------------------
+>
+> Key: MAILBOX-11
+> URL: https://issues.apache.org/jira/browse/MAILBOX-11
+> Project: James Mailbox
+> Issue Type: Bug
+> Environment: Linux, JDK 1.6
+> Reporter: Fran=C3=A7ois-Denis Gonthier
+> Assignee: Eric Charles
+> Fix For: 0.6
+>
+> Attachments: 0001-MAILBOX-11-Add-filters-on-namespace-and-user-fo=
+r-sea.patch
+>
+>
+> MailboxQuery doesn't pay any attention to namespace of the mailbox it is =
+based on. For example, Mozilla Thunderbird might to mailbox search with exp=
+ressions like #private.%. That expression is passed directly to the isExpre=
+ssionMatch method of the MailboxQuery class. This has obviously incorrect r=
+esults.
+> Arguments to the isExpressionMatch method should be parsed to separate th=
+e namespace from the mailbox name or isExpressionMatch should do the parsin=
+g itself. In that case the argument name should be renamed to something lik=
+e 'searchExpression' instead of 'name' which doesn't convey the right meani=
+ng.
+
+
+
+--
+This message was sent by Atlassian JIRA
+(v6.3.4#6332)
+
+---------------------------------------------------------------------
+To unsubscribe, e-mail: [email protected]
+For additional commands, e-mail: [email protected]
+
Added: james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail4.eml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail4.eml?rev=1688133&view=auto
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail4.eml
(added)
+++ james/mailbox/trunk/elasticsearch/src/test/resources/documents/mail4.eml
Mon Jun 29 08:36:12 2015
@@ -0,0 +1,81 @@
+Return-Path: <[email protected]>
+Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
+ by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
+ Fri, 15 May 2015 08:36:03 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from localhost (spam.minet.net [192.168.102.97])
+ by mx2.minet.net (Postfix) with ESMTP id 5AC87A19A4F
+ for <[email protected]>; Fri, 15 May 2015 08:36:03 +0200 (CEST)
+X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
+X-Spam-Flag: NO
+X-Spam-Score: -1.51
+X-Spam-Level:
+X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
+ T_RP_MATCHES_RCVD=-0.01] autolearn=ham
+Received: from mx1.minet.net ([IPv6:::ffff:192.168.102.25])
+ by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new,
port 10024)
+ with ESMTP id 2xNJ-Rh-AWoj for <[email protected]>;
+ Fri, 15 May 2015 06:36:02 +0000 (UTC)
+Received-SPF: Pass (sender SPF authorized) identity=mailfrom;
client-ip=140.211.11.3; helo=mail.apache.org;
envelope-from=mailet-api-return-812-benwa=minet....@james.apache.org;
[email protected]
+Authentication-Results: mx1.minet.net; dkim=none reason="no signature";
+ dkim-adsp=none (insecure policy); dkim-atps=neutral
+Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
+ by mx1.minet.net (Postfix) with SMTP id 24F75686039
+ for <[email protected]>; Fri, 15 May 2015 08:36:01 +0200 (CEST)
+Received: (qmail 81830 invoked by uid 500); 15 May 2015 06:36:00 -0000
+Mailing-List: contact [email protected]; run by ezmlm
+Precedence: bulk
+List-Help: <mailto:[email protected]>
+List-Unsubscribe: <mailto:[email protected]>
+List-Post: <mailto:[email protected]>
+List-Id: <mailet-api.james.apache.org>
+Reply-To: [email protected]
+Delivered-To: mailing list [email protected]
+Received: (qmail 81730 invoked by uid 99); 15 May 2015 06:36:00 -0000
+Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
+ by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 15 May 2015 06:36:00 +0000
+Date: Fri, 15 May 2015 06:35:59 +0000
+From: "Eric Charles (JIRA)" <[email protected]>
+To: [email protected]
+Message-ID: <[email protected]>
+In-Reply-To: <[email protected]>
+References: <[email protected]>
<JIRA.12825882.1430301328925@arcas>
+Subject: [jira] [Resolved] (MAILET-94) James Mailet should use latest
+ version of other James subprojects
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 7bit
+X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
+
+
+ [
https://issues.apache.org/jira/browse/MAILET-94?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
+
+Eric Charles resolved MAILET-94.
+--------------------------------
+ Resolution: Fixed
+ Assignee: Eric Charles
+
+Patch committed, Thx Matthieu
+
+> James Mailet should use latest version of other James subprojects
+> -----------------------------------------------------------------
+>
+> Key: MAILET-94
+> URL: https://issues.apache.org/jira/browse/MAILET-94
+> Project: James Mailet
+> Issue Type: Task
+> Components: Build
+> Reporter: Matthieu Baechler
+> Assignee: Eric Charles
+> Fix For: 2.5.1
+>
+> Attachments:
0001-JWC-111-update-james-related-projects-to-SNAPSHOT-ve.patch
+>
+>
+> It should depend on james-project 1.8.3-SNAPSHOT to use only up-to-date
component.
+
+
+
+--
+This message was sent by Atlassian JIRA
+(v6.3.4#6332)
Modified:
james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.eml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.eml?rev=1688133&r1=1688132&r2=1688133&view=diff
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.eml
(original)
+++ james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.eml
Mon Jun 29 08:36:12 2015
@@ -31,7 +31,7 @@ Content-Type: multipart/mixed; boundary=
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <[email protected]>
-Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
+Date: Wed, 3 Jun 2015 09:05:46 +0000
To: <[email protected]>
Message-ID: <[email protected]>
Subject: [root] UNCHECKED contents in mail FROM <[email protected]>
Modified:
james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.json
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.json?rev=1688133&r1=1688132&r2=1688133&view=diff
==============================================================================
---
james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.json
(original)
+++
james/mailbox/trunk/elasticsearch/src/test/resources/documents/spamMail.json
Mon Jun 29 08:36:12 2015
@@ -12,7 +12,7 @@
"1.0"
],
"date": [
- "Wed, 3 Jun 2015 09:05:46 +0000 (UTC)"
+ "Wed, 3 Jun 2015 09:05:46 +0000"
],
"x-beenthere": [
"[email protected]"
@@ -103,7 +103,7 @@
"subject": [
"[root] UNCHECKED contents in mail FROM <[email protected]>"
],
- "sentDate": "2015-06-07T00:00:00+02:00",
+ "sentDate": "2015-06-03T09:05:46+0000",
"properties": [
{
"namespace": "http://james.apache.org/rfc2045/Content-Type",
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]