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 2017/02/28 11:45:11 UTC
[4/6] james-project git commit: MAILBOX-287 Allow connection to an ES
cluster
MAILBOX-287 Allow connection to an ES cluster
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/94f7a413
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/94f7a413
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/94f7a413
Branch: refs/heads/master
Commit: 94f7a413a4824c0d814559f01ce8921a3188c7a1
Parents: 78426b8
Author: benwa <bt...@linagora.com>
Authored: Fri Feb 24 11:55:11 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Feb 28 18:44:33 2017 +0700
----------------------------------------------------------------------
backends-common/elasticsearch/pom.xml | 11 ++
.../james/backends/es/ClientProviderImpl.java | 100 ++++++++--
.../backends/es/ClientProviderImplTest.java | 192 +++++++++++++++++++
.../destination/conf/elasticsearch.properties | 4 +
.../destination/conf/elasticsearch.properties | 4 +
.../mailbox/ElasticSearchMailboxModule.java | 37 +++-
.../mailbox/ElasticSearchMailboxModuleTest.java | 71 +++++++
.../apache/james/metric/es/ESReporterTest.java | 2 +-
8 files changed, 404 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/backends-common/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/pom.xml b/backends-common/elasticsearch/pom.xml
index 624ec16..0ffbdd8 100644
--- a/backends-common/elasticsearch/pom.xml
+++ b/backends-common/elasticsearch/pom.xml
@@ -130,6 +130,11 @@
<artifactId>james-server-util-java8</artifactId>
</dependency>
<dependency>
+ <groupId>com.github.fge</groupId>
+ <artifactId>throwing-lambdas</artifactId>
+ <version>0.5.0</version>
+ </dependency>
+ <dependency>
<groupId>com.jayway.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>1.6.3</version>
@@ -160,6 +165,12 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>nl.jqno.equalsverifier</groupId>
+ <artifactId>equalsverifier</artifactId>
+ <version>1.7.6</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<plugins>
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
index 118d077..bc378c1 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
@@ -19,30 +19,102 @@
package org.apache.james.backends.es;
import java.net.InetAddress;
-import java.net.UnknownHostException;
+import java.util.Objects;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
-import com.google.common.base.Throwables;
+import com.github.fge.lambdas.Throwing;
+import com.github.fge.lambdas.consumers.ConsumerChainer;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableList;
public class ClientProviderImpl implements ClientProvider {
- private final String host;
- private final int port;
-
- public ClientProviderImpl(String host, int port) {
- this.host = host;
- this.port = port;
+ public static class Host {
+ private final String host;
+ private final int port;
+
+ public Host(String host, int port) {
+ Preconditions.checkNotNull(host, "Host address can not be null");
+ Preconditions.checkArgument(!host.isEmpty(), "Host address can not be empty");
+ Preconditions.checkArgument(isValidPort(port), "Port should be between ]0, 65535]");
+ this.host = host;
+ this.port = port;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof Host) {
+ Host that = (Host) o;
+
+ return Objects.equals(this.host, that.host)
+ && Objects.equals(this.port, that.port);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(host, port);
+ }
+ }
+
+ public static ClientProviderImpl forHost(String address, Integer port) {
+ isValidPort(port);
+ return new ClientProviderImpl(ImmutableList.of(new Host(address, port)));
+ }
+
+ public static ClientProviderImpl fromHostsString(String hostsString) {
+ Preconditions.checkNotNull(hostsString, "HostString should not be null");
+ return new ClientProviderImpl(parseHosts(hostsString));
+ }
+
+ @VisibleForTesting
+ static ImmutableList<Host> parseHosts(String hostsString) {
+ return Splitter.on(',').splitToList(hostsString)
+ .stream()
+ .map(hostSting -> Splitter.on(':').splitToList(hostSting))
+ .map(hostParts -> {
+ Preconditions.checkArgument(hostParts.size() == 2, "A host should be defined as a : separated pair of address and port");
+ return new Host(hostParts.get(0), Integer.valueOf(hostParts.get(1)));
+ })
+ .distinct()
+ .collect(Guavate.toImmutableList());
+ }
+
+ private static boolean isValidPort(Integer port) {
+ return port > 0 && port <= 65535;
+ }
+
+ private final ImmutableList<Host> hosts;
+
+ private ClientProviderImpl(ImmutableList<Host> hosts) {
+ Preconditions.checkArgument(!hosts.isEmpty(), "You should provide at least one host");
+ this.hosts = hosts;
}
+
public Client get() {
- try {
- return TransportClient.builder().build()
- .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
- } catch (UnknownHostException e) {
- throw Throwables.propagate(e);
- }
+ TransportClient transportClient = TransportClient.builder().build();
+ ConsumerChainer<Host> consumer = Throwing.consumer(host -> transportClient
+ .addTransportAddress(
+ new InetSocketTransportAddress(
+ InetAddress.getByName(host.getHost()),
+ host.getPort())));
+ hosts.forEach(consumer.sneakyThrow());
+ return transportClient;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
new file mode 100644
index 0000000..5d8f420
--- /dev/null
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
@@ -0,0 +1,192 @@
+/****************************************************************
+ * 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.assertj.core.api.Assertions.assertThat;
+
+import org.apache.james.backends.es.ClientProviderImpl.Host;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+public class ClientProviderImplTest {
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Test
+ public void fromHostsStringShouldThrowOnNullString() {
+ expectedException.expect(NullPointerException.class);
+
+ ClientProviderImpl.fromHostsString(null);
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnEmptyString() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("");
+ }
+
+ @Test
+ public void forHostShouldThrowOnNullHost() {
+ expectedException.expect(NullPointerException.class);
+
+ ClientProviderImpl.forHost(null, 9200);
+ }
+
+ @Test
+ public void forHostShouldThrowOnEmptyHost() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.forHost("", 9200);
+ }
+
+ @Test
+ public void forHostShouldThrowOnNegativePort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.forHost("localhost", -1);
+ }
+
+ @Test
+ public void forHostShouldThrowOnZeroPort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.forHost("localhost", 0);
+ }
+
+ @Test
+ public void forHostShouldThrowOnTooBigPort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.forHost("localhost", 65536);
+ }
+
+ @Test
+ public void fromHostsStringShouldEmptyAddress() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString(":9200");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnAbsentPort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("localhost");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowWhenTooMuchParts() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:9200:9200");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnEmptyPort() {
+ expectedException.expect(NumberFormatException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnInvalidPort() {
+ expectedException.expect(NumberFormatException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:invalid");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnNegativePort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:-1");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnZeroPort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:0");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowOnTooBigPort() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:65536");
+ }
+
+ @Test
+ public void fromHostsStringShouldThrowIfOneHostIsInvalid() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ClientProviderImpl.fromHostsString("localhost:9200,localhost");
+ }
+
+ @Test
+ public void parseHostsShouldParseMonoHost() {
+ assertThat(ClientProviderImpl.parseHosts("localhost:9200"))
+ .containsOnly(new Host("localhost", 9200));
+ }
+
+ @Test
+ public void parseHostsShouldParseMultiHosts() {
+ assertThat(ClientProviderImpl.parseHosts("localhost:9200,server:9155"))
+ .containsOnly(
+ new Host("localhost", 9200),
+ new Host("server", 9155));
+ }
+
+ @Test
+ public void parseHostsShouldSwallowDuplicates() {
+ assertThat(ClientProviderImpl.parseHosts("localhost:9200,localhost:9200"))
+ .containsOnly(
+ new Host("localhost", 9200));
+ }
+
+ @Test
+ public void parseHostsShouldNotSwallowSameAddressDifferentPort() {
+ assertThat(ClientProviderImpl.parseHosts("localhost:9200,localhost:9155"))
+ .containsOnly(
+ new Host("localhost", 9200),
+ new Host("localhost", 9155));
+ }
+
+
+
+ @Test
+ public void parseHostsShouldNotSwallowSamePortDifferentAddress() {
+ assertThat(ClientProviderImpl.parseHosts("localhost:9200,abcd:9200"))
+ .containsOnly(
+ new Host("localhost", 9200),
+ new Host("abcd", 9200));
+ }
+
+
+ @Test
+ public void hostShouldRespectBeanContract() {
+ EqualsVerifier.forClass(ClientProviderImpl.Host.class).verify();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
index 06e1852..6d17382 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
@@ -22,6 +22,10 @@
elasticsearch.masterHost=elasticsearch
elasticsearch.port=9300
+
+# You can alternatively provide a list of hosts following this format :
+# elasticsearch.hosts=host1:9300,host2:9300
+
elasticsearch.nb.shards=1
elasticsearch.nb.replica=0
elasticsearch.retryConnection.maxRetries=7
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
index 06e1852..6d17382 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
@@ -22,6 +22,10 @@
elasticsearch.masterHost=elasticsearch
elasticsearch.port=9300
+
+# You can alternatively provide a list of hosts following this format :
+# elasticsearch.hosts=host1:9300,host2:9300
+
elasticsearch.nb.shards=1
elasticsearch.nb.replica=0
elasticsearch.retryConnection.maxRetries=7
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index bbea50a..6206222 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -20,6 +20,7 @@
package org.apache.james.modules.mailbox;
import java.io.FileNotFoundException;
+import java.util.Optional;
import java.util.concurrent.ExecutionException;
import javax.inject.Singleton;
@@ -44,6 +45,8 @@ import org.apache.james.mailbox.tika.extractor.TikaTextExtractor;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.NoNodeAvailableException;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableList;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
@@ -52,6 +55,7 @@ import com.nurkiewicz.asyncretry.AsyncRetryExecutor;
public class ElasticSearchMailboxModule extends AbstractModule {
public static final String ES_CONFIG_FILE = FileSystem.FILE_PROTOCOL_AND_CONF + "elasticsearch.properties";
+ public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
public static final String ELASTICSEARCH_MASTER_HOST = "elasticsearch.masterHost";
public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
private static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
@@ -75,8 +79,8 @@ public class ElasticSearchMailboxModule extends AbstractModule {
protected Client provideClientProvider(FileSystem fileSystem, AsyncRetryExecutor executor) throws ConfigurationException, FileNotFoundException, ExecutionException, InterruptedException {
PropertiesConfiguration propertiesReader = new PropertiesConfiguration(fileSystem.getFile(ES_CONFIG_FILE));
- ClientProvider clientProvider = new ClientProviderImpl(propertiesReader.getString(ELASTICSEARCH_MASTER_HOST),
- propertiesReader.getInt(ELASTICSEARCH_PORT));
+ ClientProvider clientProvider = connectToCluster(propertiesReader);
+
Client client = getRetryer(executor, propertiesReader)
.getWithRetry(ctx -> clientProvider.get()).get();
IndexCreationFactory.createIndex(client,
@@ -90,6 +94,35 @@ public class ElasticSearchMailboxModule extends AbstractModule {
return client;
}
+ private static ClientProvider connectToCluster(PropertiesConfiguration propertiesReader) throws ConfigurationException {
+ Optional<String> monoHostAddress = Optional.ofNullable(propertiesReader.getString(ELASTICSEARCH_MASTER_HOST, null));
+ Optional<Integer> monoHostPort = Optional.ofNullable(propertiesReader.getInteger(ELASTICSEARCH_PORT, null));
+ Optional<String> multiHosts = Optional.ofNullable(propertiesReader.getString(ELASTICSEARCH_HOSTS, null));
+
+ validateHostsConfigurationOptions(monoHostAddress, monoHostPort, multiHosts);
+
+ if (monoHostAddress.isPresent()) {
+ return ClientProviderImpl.forHost(monoHostAddress.get(), monoHostPort.get());
+ } else {
+ return ClientProviderImpl.fromHostsString(multiHosts.get());
+ }
+ }
+
+ @VisibleForTesting
+ static void validateHostsConfigurationOptions(Optional<String> monoHostAddress,
+ Optional<Integer> monoHostPort,
+ Optional<String> multiHosts) throws ConfigurationException {
+ if (monoHostAddress.isPresent() != monoHostPort.isPresent()) {
+ throw new ConfigurationException(ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + " should be specified together");
+ }
+ if (multiHosts.isPresent() && monoHostAddress.isPresent()) {
+ throw new ConfigurationException("You should choose between mono host set up and " + ELASTICSEARCH_HOSTS);
+ }
+ if (!multiHosts.isPresent() && !monoHostAddress.isPresent()) {
+ throw new ConfigurationException("You should specify either (" + ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + ") or " + ELASTICSEARCH_HOSTS);
+ }
+ }
+
private static AsyncRetryExecutor getRetryer(AsyncRetryExecutor executor, PropertiesConfiguration configuration) {
return executor
.withProportionalJitter()
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
index 26e3cc5..dd22797 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
@@ -19,14 +19,25 @@
package org.apache.james.modules.mailbox;
+import static org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTICSEARCH_HOSTS;
+import static org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTICSEARCH_MASTER_HOST;
+import static org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTICSEARCH_PORT;
import static org.assertj.core.api.Assertions.assertThat;
+import java.util.Optional;
+
+import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.james.mailbox.elasticsearch.IndexAttachments;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
public class ElasticSearchMailboxModuleTest {
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
@Test
public void provideIndexAttachmentsShouldReturnTrueWhenIndexAttachmentsIsTrueInConfiguration() {
PropertiesConfiguration configuration = new PropertiesConfiguration();
@@ -61,4 +72,64 @@ public class ElasticSearchMailboxModuleTest {
assertThat(indexAttachments).isEqualTo(IndexAttachments.YES);
}
+
+ @Test
+ public void validateHostsConfigurationOptionsShouldThrowWhenNoHostSpecify() throws Exception {
+ expectedException.expect(ConfigurationException.class);
+ expectedException.expectMessage("You should specify either (" + ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + ") or " + ELASTICSEARCH_HOSTS);
+
+ ElasticSearchMailboxModule.validateHostsConfigurationOptions(
+ Optional.empty(),
+ Optional.empty(),
+ Optional.empty());
+ }
+
+ @Test
+ public void validateHostsConfigurationOptionsShouldThrowWhenMonoAndMultiHostSpecified() throws Exception {
+ expectedException.expect(ConfigurationException.class);
+ expectedException.expectMessage("You should choose between mono host set up and " + ELASTICSEARCH_HOSTS);
+
+ ElasticSearchMailboxModule.validateHostsConfigurationOptions(
+ Optional.of("localhost"),
+ Optional.of(9200),
+ Optional.of("localhost:9200"));
+ }
+
+ @Test
+ public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutPort() throws Exception {
+ expectedException.expect(ConfigurationException.class);
+ expectedException.expectMessage(ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + " should be specified together");
+
+ ElasticSearchMailboxModule.validateHostsConfigurationOptions(
+ Optional.of("localhost"),
+ Optional.empty(),
+ Optional.empty());
+ }
+
+ @Test
+ public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutAddress() throws Exception {
+ expectedException.expect(ConfigurationException.class);
+ expectedException.expectMessage(ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + " should be specified together");
+
+ ElasticSearchMailboxModule.validateHostsConfigurationOptions(
+ Optional.empty(),
+ Optional.of(9200),
+ Optional.empty());
+ }
+
+ @Test
+ public void validateHostsConfigurationOptionsShouldAcceptMonoHostConfiguration() throws Exception {
+ ElasticSearchMailboxModule.validateHostsConfigurationOptions(
+ Optional.of("localhost"),
+ Optional.of(9200),
+ Optional.empty());
+ }
+
+ @Test
+ public void validateHostsConfigurationOptionsShouldAcceptMultiHostConfiguration() throws Exception {
+ ElasticSearchMailboxModule.validateHostsConfigurationOptions(
+ Optional.empty(),
+ Optional.empty(),
+ Optional.of("localhost:9200"));
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/94f7a413/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
----------------------------------------------------------------------
diff --git a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
index fedc02d..f592ddc 100644
--- a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
@@ -61,7 +61,7 @@ public class ESReporterTest {
@Before
public void setUp() {
- clientProvider = new ClientProviderImpl(getContainerIp(), ES_APPLICATIVE_PORT);
+ clientProvider = ClientProviderImpl.forHost(getContainerIp(), ES_APPLICATIVE_PORT);
await().atMost(Duration.ONE_MINUTE)
.until(() -> elasticSearchStarted(clientProvider));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org