You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2015/06/29 10:36:32 UTC

svn commit: r1688134 - in /james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch: ElasticSearchIndexerTest.java ElasticSearchIntegrationTest.java EmbeddedElasticSearch.java

Author: btellier
Date: Mon Jun 29 08:36:31 2015
New Revision: 1688134

URL: http://svn.apache.org/r1688134
Log:
MAILBOX-235 Adding full mail search support

Modified:
    james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java
    james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
    james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/EmbeddedElasticSearch.java

Modified: james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java?rev=1688134&r1=1688133&r2=1688134&view=diff
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java (original)
+++ james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java Mon Jun 29 08:36:31 2015
@@ -27,37 +27,36 @@ import org.elasticsearch.action.search.S
 import org.elasticsearch.client.Client;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.node.Node;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
 
 public class ElasticSearchIndexerTest {
 
-    @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
+    private TemporaryFolder temporaryFolder = new TemporaryFolder();
+    private EmbeddedElasticSearch embeddedElasticSearch = new EmbeddedElasticSearch(temporaryFolder);
+    
+    @Rule
+    public RuleChain chain = RuleChain.outerRule(temporaryFolder).around(embeddedElasticSearch);
     
     private Node node;
     private ElasticSearchIndexer testee;
 
     @Before
     public void setup() throws IOException {
-        node = EmbeddedElasticSearch.provideNode(temporaryFolder);
+        node = embeddedElasticSearch.getNode();
         testee = new ElasticSearchIndexer(node);
     }
     
-    @After
-    public void tearDown() {
-        EmbeddedElasticSearch.shutDown(node);
-    }
-    
     @Test
     public void indexMessageShouldWork() throws Exception {
         String messageId = "1";
         String content = "{\"message\": \"trying out Elasticsearch\"}";
         
         testee.indexMessage(messageId, content);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         try (Client client = node.client()) {
             SearchResponse searchResponse = client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
@@ -79,10 +78,10 @@ public class ElasticSearchIndexerTest {
         String content = "{\"message\": \"trying out Elasticsearch\",\"field\":\"Should be unchanged\"}";
 
         testee.indexMessage(messageId, content);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
 
         testee.updateMessage(messageId, "{\"message\": \"mastering out Elasticsearch\"}");
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
 
         try (Client client = node.client()) {
             SearchResponse searchResponse = client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
@@ -107,7 +106,7 @@ public class ElasticSearchIndexerTest {
         String content = "{\"message\": \"trying out Elasticsearch\"}";
 
         testee.indexMessage(messageId, content);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
 
         testee.updateMessage("1", null);
     }
@@ -118,10 +117,10 @@ public class ElasticSearchIndexerTest {
         String content = "{\"message\": \"trying out Elasticsearch\"}";
 
         testee.indexMessage(messageId, content);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         testee.deleteAllWithIdStarting("1:");
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         try (Client client = node.client()) {
             SearchResponse searchResponse = client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
@@ -138,22 +137,22 @@ public class ElasticSearchIndexerTest {
         String content = "{\"message\": \"trying out Elasticsearch\"}";
         
         testee.indexMessage(messageId, content);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         String messageId2 = "1:2";
         String content2 = "{\"message\": \"trying out Elasticsearch 2\"}";
         
         testee.indexMessage(messageId2, content2);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         String messageId3 = "2:3";
         String content3 = "{\"message\": \"trying out Elasticsearch 3\"}";
         
         testee.indexMessage(messageId3, content3);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         testee.deleteAllWithIdStarting("1:");
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         try (Client client = node.client()) {
             SearchResponse searchResponse = client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
@@ -170,10 +169,10 @@ public class ElasticSearchIndexerTest {
         String content = "{\"message\": \"trying out Elasticsearch\"}";
 
         testee.indexMessage(messageId, content);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
 
         testee.deleteMessage(messageId);
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
         
         try (Client client = node.client()) {
             SearchResponse searchResponse = client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)

Modified: 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=1688134&r1=1688133&r2=1688134&view=diff
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java (original)
+++ james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java Mon Jun 29 08:36:31 2015
@@ -45,11 +45,11 @@ import org.apache.james.mailbox.store.St
 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.RuleChain;
 import org.junit.rules.TemporaryFolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,14 +60,17 @@ public class ElasticSearchIntegrationTes
 
     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;
+    private TemporaryFolder temporaryFolder = new TemporaryFolder();
+    private EmbeddedElasticSearch embeddedElasticSearch = new EmbeddedElasticSearch(temporaryFolder);
 
-    @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
+    @Rule
+    public RuleChain chain = RuleChain.outerRule(temporaryFolder).around(embeddedElasticSearch);
+    
+    private StoreMailboxManager<InMemoryId> storeMailboxManager;
+    private ElasticSearchListeningMessageSearchIndex<InMemoryId> elasticSearchListeningMessageSearchIndex;
+    private Mailbox<InMemoryId> mailbox;
+    private SimpleDateFormat format;
+    private MailboxSession session;
 
     @Before
     @SuppressWarnings("unchecked")
@@ -146,17 +149,17 @@ public class ElasticSearchIntegrationTes
             true,
             new Flags("Hello you"));
 
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+        embeddedElasticSearch.awaitForElasticSearch();
     }
 
     private void initializeMailboxManager() throws Exception {
-        node = NodeMappingFactory.applyMapping(
+        Node node = NodeMappingFactory.applyMapping(
             IndexCreationFactory.createIndex(
-                EmbeddedElasticSearch.provideNode(temporaryFolder)
+                embeddedElasticSearch.getNode()
             )
         );
         MailboxSessionMapperFactory<InMemoryId> mapperFactory = new InMemoryMailboxSessionMapperFactory();
-        elasticSearchListeningMessageSearchIndex = new ElasticSearchListeningMessageSearchIndex(mapperFactory,
+        elasticSearchListeningMessageSearchIndex = new ElasticSearchListeningMessageSearchIndex<InMemoryId>(mapperFactory,
             new ElasticSearchIndexer(node),
             new ElasticSearchSearcher<InMemoryId>(node, new QueryConverter(new CriterionConverter())),
             new MessageToElasticSearchJson());
@@ -170,11 +173,6 @@ public class ElasticSearchIntegrationTes
         storeMailboxManager.init();
     }
 
-    @After
-    public void cleanUp() {
-        EmbeddedElasticSearch.shutDown(node);
-    }
-
     @Test
     public void allShouldReturnAllUids() throws MailboxException {
         SearchQuery searchQuery = new SearchQuery();

Modified: james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/EmbeddedElasticSearch.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/EmbeddedElasticSearch.java?rev=1688134&r1=1688133&r2=1688134&view=diff
==============================================================================
--- james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/EmbeddedElasticSearch.java (original)
+++ james/mailbox/trunk/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/EmbeddedElasticSearch.java Mon Jun 29 08:36:31 2015
@@ -19,44 +19,70 @@
 
 package org.apache.james.mailbox.elasticsearch;
 
-
-
 import static com.jayway.awaitility.Awaitility.await;
 import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
 
 import java.io.IOException;
+import java.nio.file.Path;
+import java.util.function.Supplier;
 
 import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
 import org.elasticsearch.action.admin.indices.flush.FlushRequestBuilder;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.common.settings.ImmutableSettings;
 import org.elasticsearch.node.Node;
+import org.junit.rules.ExternalResource;
 import org.junit.rules.TemporaryFolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Throwables;
 import com.jayway.awaitility.Duration;
 
-public class EmbeddedElasticSearch {
+public class EmbeddedElasticSearch extends ExternalResource {
 
     private static Logger LOGGER = LoggerFactory.getLogger(EmbeddedElasticSearch.class);
 
-    public static Node provideNode(TemporaryFolder temporaryFolder) throws IOException {
-        Node node = nodeBuilder().local(true)
+    private final Supplier<Path> folder;
+    private Node node;
+
+    private static Path createTempDir(TemporaryFolder temporaryFolder) {
+        try {
+            return temporaryFolder.newFolder().toPath();
+        } catch (IOException e) {
+            throw Throwables.propagate(e);
+        }
+    }
+    
+    public EmbeddedElasticSearch(TemporaryFolder temporaryFolder) {
+        this(() -> EmbeddedElasticSearch.createTempDir(temporaryFolder));
+    }
+    
+    public EmbeddedElasticSearch(Path folder) {
+        this(() -> folder);
+    }
+    
+    private EmbeddedElasticSearch(Supplier<Path> folder) {
+        this.folder = folder;
+    }
+    
+    @Override
+    public void before() throws IOException {
+        node = nodeBuilder().local(true)
             .settings(ImmutableSettings.builder()
-                .put("path.data", temporaryFolder.newFolder().getAbsolutePath())
+                .put("path.data", folder.get().toAbsolutePath())
+                .put("script.disable_dynamic",true)
                 .build())
             .node();
         node.start();
-        awaitForElasticSearch(node);
-        return node;
+        awaitForElasticSearch();
     }
 
-    public static void shutDown(Node node) {
-        EmbeddedElasticSearch.awaitForElasticSearch(node);
+    @Override
+    public void after() {
+        awaitForElasticSearch();
         try (Client client = node.client()) {
-            node.client()
-                .admin()
+            client.admin()
                 .indices()
                 .delete(new DeleteIndexRequest(ElasticSearchIndexer.MAILBOX_INDEX))
                 .actionGet();
@@ -66,15 +92,19 @@ public class EmbeddedElasticSearch {
         node.close();
     }
 
+    public Node getNode() {
+        return node;
+    }
+
     /**
      * Sometimes, tests are too fast.
      * This method ensure that ElasticSearch service is up and indices are updated
      */
-    public static void awaitForElasticSearch(Node node) {
-        await().atMost(Duration.TEN_SECONDS).until(() -> flush(node));
+    public void awaitForElasticSearch() {
+        await().atMost(Duration.TEN_SECONDS).until(this::flush);
     }
 
-    private static boolean flush(Node node) {
+    private boolean flush() {
         try (Client client = node.client()) {
             new FlushRequestBuilder(client.admin().indices()).setForce(true).get();
             return true;



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org