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 ro...@apache.org on 2019/11/14 09:13:24 UTC

[james-project] 04/07: JAMES-2905 Expand ClientProvider tests with Auth ES

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit f8a5fb607bd47a479f055ea45363bb00d72fbd9d
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue Nov 12 16:36:58 2019 +0700

    JAMES-2905 Expand ClientProvider tests with Auth ES
---
 ...iderImplConnectionAuthESIgnoreSSLCheckTest.java | 44 +++++++++++++
 ...ImplConnectionAuthESOverrideTrustStoreTest.java | 46 +++++++++++++
 ...a => ClientProviderImplConnectionContract.java} | 75 ++++++----------------
 .../ClientProviderImplConnectionNoAuthESTest.java  | 31 +++++++++
 .../es/DockerAuthElasticSearchSingleton.java       | 28 ++++++++
 5 files changed, 169 insertions(+), 55 deletions(-)

diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
new file mode 100644
index 0000000..1de1996
--- /dev/null
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.backends.es;
+
+import static org.apache.james.backends.es.ElasticSearchClusterExtension.ElasticSearchCluster;
+
+import java.util.Optional;
+
+import org.apache.james.backends.es.ElasticSearchConfiguration.HostScheme;
+import org.apache.james.backends.es.ElasticSearchConfiguration.SSLTrustConfiguration;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class ClientProviderImplConnectionAuthESIgnoreSSLCheckTest implements ClientProviderImplConnectionContract {
+
+    @RegisterExtension
+    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchCluster(
+        DockerAuthElasticSearchSingleton.INSTANCE,
+        new DockerElasticSearch.WithAuth()));
+
+    @Override
+    public ElasticSearchConfiguration.Builder configurationBuilder() {
+        return ElasticSearchConfiguration.builder()
+            .credential(Optional.of(DockerElasticSearch.WithAuth.DEFAULT_CREDENTIAL))
+            .hostScheme(Optional.of(HostScheme.HTTPS))
+            .sslTrustConfiguration(SSLTrustConfiguration.ignore());
+    }
+}
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
new file mode 100644
index 0000000..5b92cf7
--- /dev/null
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
@@ -0,0 +1,46 @@
+/****************************************************************
+ * 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.backends.es;
+
+import java.util.Optional;
+
+import org.apache.james.backends.es.ElasticSearchConfiguration.SSLTrustConfiguration;
+import org.apache.james.backends.es.ElasticSearchConfiguration.SSLTrustConfiguration.SSLTrustStore;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class ClientProviderImplConnectionAuthESOverrideTrustStoreTest implements ClientProviderImplConnectionContract {
+
+    private static final String TRUST_STORE_PASSWORD = "mypass";
+    private static final String TRUST_STORE_FILE_PATH = "src/test/resources/auth-es/server.jks";
+
+    @RegisterExtension
+    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchClusterExtension.ElasticSearchCluster(
+        DockerAuthElasticSearchSingleton.INSTANCE,
+        new DockerElasticSearch.WithAuth()));
+
+    @Override
+    public ElasticSearchConfiguration.Builder configurationBuilder() {
+        return ElasticSearchConfiguration.builder()
+            .credential(Optional.of(DockerElasticSearch.WithAuth.DEFAULT_CREDENTIAL))
+            .hostScheme(Optional.of(ElasticSearchConfiguration.HostScheme.HTTPS))
+            .sslTrustConfiguration(SSLTrustConfiguration.override(
+                SSLTrustStore.of(TRUST_STORE_FILE_PATH, TRUST_STORE_PASSWORD)));
+    }
+}
\ No newline at end of file
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionContract.java
similarity index 56%
rename from backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
rename to backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionContract.java
index db6ae42..05a7ec4 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionContract.java
@@ -21,61 +21,25 @@ package org.apache.james.backends.es;
 
 import java.util.concurrent.TimeUnit;
 
-import org.apache.james.util.Host;
-import org.apache.james.util.docker.DockerContainer;
-import org.apache.james.util.docker.Images;
+import org.apache.james.backends.es.ElasticSearchClusterExtension.ElasticSearchCluster;
 import org.awaitility.Awaitility;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class ClientProviderImplConnectionTest {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ClientProviderImplConnectionTest.class);
-    private static final int ES_APPLICATIVE_PORT = 9200;
+interface ClientProviderImplConnectionContract {
 
-    static DockerContainer es1 = DockerContainer.fromName(Images.ELASTICSEARCH_6)
-        .withEnv("discovery.type", "single-node")
-        .withAffinityToContainer()
-        .withExposedPorts(ES_APPLICATIVE_PORT);
-
-    DockerContainer es2 = DockerContainer.fromName(Images.ELASTICSEARCH_6)
-        .withEnv("discovery.type", "single-node")
-        .withAffinityToContainer()
-        .withExposedPorts(ES_APPLICATIVE_PORT);
-
-    @BeforeAll
-    static void setUpClass() {
-        es1.start();
-    }
-
-    @BeforeEach
-    void setUp() {
-        es2.start();
-    }
-
-    @AfterEach
-    void tearDown() {
-        es2.stop();
-    }
-
-    @AfterAll
-    static void tearDownClass() {
-        es1.stop();
-    }
+    Logger LOGGER = LoggerFactory.getLogger(ClientProviderImplConnectionContract.class);
 
     @Test
-    void connectingASingleServerShouldWork() {
-        ElasticSearchConfiguration configuration = ElasticSearchConfiguration.builder()
-            .addHost(Host.from(es1.getContainerIp(), ES_APPLICATIVE_PORT))
+    default void connectingASingleServerShouldWork(ElasticSearchCluster esCluster) {
+        ElasticSearchConfiguration configuration = configurationBuilder()
+            .addHost(esCluster.es1.getHttpHost())
             .build();
 
         Awaitility.await()
@@ -85,10 +49,9 @@ class ClientProviderImplConnectionTest {
     }
 
     @Test
-    void connectingAClusterShouldWork() {
-        ElasticSearchConfiguration configuration = ElasticSearchConfiguration.builder()
-            .addHost(Host.from(es1.getContainerIp(), ES_APPLICATIVE_PORT))
-            .addHost(Host.from(es2.getContainerIp(), ES_APPLICATIVE_PORT))
+    default void connectingAClusterShouldWork(ElasticSearchCluster esCluster) {
+        ElasticSearchConfiguration configuration = configurationBuilder()
+            .addHosts(esCluster.getHosts())
             .build();
 
         Awaitility.await()
@@ -98,23 +61,20 @@ class ClientProviderImplConnectionTest {
     }
 
     @Test
-    void connectingAClusterWithAFailedNodeShouldWork() {
-        String es1Ip = es1.getContainerIp();
-        String es2Ip = es2.getContainerIp();
-        es2.stop();
-
-        ElasticSearchConfiguration configuration = ElasticSearchConfiguration.builder()
-            .addHost(Host.from(es1Ip, ES_APPLICATIVE_PORT))
-            .addHost(Host.from(es2Ip, ES_APPLICATIVE_PORT))
+    default void connectingAClusterWithAFailedNodeShouldWork(ElasticSearchCluster esCluster) {
+        ElasticSearchConfiguration configuration = configurationBuilder()
+            .addHosts(esCluster.getHosts())
             .build();
 
+        esCluster.es2.stop();
+
         Awaitility.await()
             .atMost(1, TimeUnit.MINUTES)
             .pollInterval(5, TimeUnit.SECONDS)
             .until(() -> isConnected(new ClientProvider(configuration)));
     }
 
-    private boolean isConnected(ClientProvider clientProvider) {
+    default boolean isConnected(ClientProvider clientProvider) {
         try (RestHighLevelClient client = clientProvider.get()) {
             client.search(
                 new SearchRequest()
@@ -126,4 +86,9 @@ class ClientProviderImplConnectionTest {
             return false;
         }
     }
+
+    default ElasticSearchConfiguration.Builder configurationBuilder() {
+        return ElasticSearchConfiguration.builder();
+    }
 }
+
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionNoAuthESTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionNoAuthESTest.java
new file mode 100644
index 0000000..6fa92d3
--- /dev/null
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionNoAuthESTest.java
@@ -0,0 +1,31 @@
+/****************************************************************
+ * 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.backends.es;
+
+import org.apache.james.backends.es.ElasticSearchClusterExtension.ElasticSearchCluster;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class ClientProviderImplConnectionNoAuthESTest implements ClientProviderImplConnectionContract {
+
+    @RegisterExtension
+    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchCluster(
+        DockerElasticSearchSingleton.INSTANCE,
+        new DockerElasticSearch.NoAuth()));
+}
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerAuthElasticSearchSingleton.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerAuthElasticSearchSingleton.java
new file mode 100644
index 0000000..5346ef4
--- /dev/null
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerAuthElasticSearchSingleton.java
@@ -0,0 +1,28 @@
+/****************************************************************
+ * 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.backends.es;
+
+public class DockerAuthElasticSearchSingleton {
+    public static DockerElasticSearch INSTANCE = new DockerElasticSearch.WithAuth();
+
+    static {
+        INSTANCE.start();
+    }
+}


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