diff --git a/jetcd-core/pom.xml b/jetcd-core/pom.xml
index 2a2f93683..147c23a6b 100644
--- a/jetcd-core/pom.xml
+++ b/jetcd-core/pom.xml
@@ -119,8 +119,8 @@
test
- org.testcontainers
- testcontainers
+ ${project.groupId}
+ jetcd-launcher
test
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/AuthClientTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/AuthClientTest.java
index 227e2df3a..878b780f1 100755
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/AuthClientTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/AuthClientTest.java
@@ -27,8 +27,8 @@
import io.etcd.jetcd.auth.Permission;
import io.etcd.jetcd.auth.Permission.Type;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdCluster;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterFactory;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ExecutionException;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClientConnectionManagerTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClientConnectionManagerTest.java
index 609d7f01b..7d984ca6a 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClientConnectionManagerTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClientConnectionManagerTest.java
@@ -22,8 +22,8 @@
import io.etcd.jetcd.Client;
import io.etcd.jetcd.ClientBuilder;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterResource;
import io.etcd.jetcd.kv.PutResponse;
+import io.etcd.jetcd.launcher.junit.EtcdClusterResource;
import io.grpc.CallOptions;
import io.grpc.Channel;
import io.grpc.ClientCall;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClusterClientTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClusterClientTest.java
index cf75af33a..1f42a5829 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClusterClientTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/ClusterClientTest.java
@@ -20,8 +20,8 @@
import io.etcd.jetcd.cluster.Member;
import io.etcd.jetcd.cluster.MemberAddResponse;
import io.etcd.jetcd.cluster.MemberListResponse;
-import io.etcd.jetcd.internal.infrastructure.EtcdCluster;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterFactory;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/KVTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/KVTest.java
index 7a193089d..9037d3468 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/KVTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/KVTest.java
@@ -20,14 +20,15 @@
import static org.junit.Assert.assertTrue;
import com.google.common.base.Charsets;
+import io.etcd.jetcd.Client;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.Txn;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdCluster;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterFactory;
import io.etcd.jetcd.kv.DeleteResponse;
import io.etcd.jetcd.kv.GetResponse;
import io.etcd.jetcd.kv.PutResponse;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import io.etcd.jetcd.op.Cmp;
import io.etcd.jetcd.op.CmpTarget;
import io.etcd.jetcd.op.Op;
@@ -62,7 +63,7 @@ public class KVTest {
public static void setUp() throws Exception {
CLUSTER.start();
- kvClient = CLUSTER.getClient().getKVClient();
+ kvClient = Client.builder().endpoints(CLUSTER.getClientEndpoints()).build().getKVClient();
}
@Test
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LeaseTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LeaseTest.java
index 19790e85b..18ad6b62e 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LeaseTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LeaseTest.java
@@ -22,8 +22,8 @@
import io.etcd.jetcd.KV;
import io.etcd.jetcd.Lease;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdCluster;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterFactory;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import io.etcd.jetcd.lease.LeaseKeepAliveResponse;
import io.etcd.jetcd.lease.LeaseTimeToLiveResponse;
import io.etcd.jetcd.options.LeaseOption;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LoadBalancerTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LoadBalancerTest.java
index 317a7c43a..2ceb30ab5 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LoadBalancerTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LoadBalancerTest.java
@@ -20,8 +20,8 @@
import io.etcd.jetcd.Client;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.data.Response;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterResource;
import io.etcd.jetcd.kv.PutResponse;
+import io.etcd.jetcd.launcher.junit.EtcdClusterResource;
import io.grpc.PickFirstBalancerFactory;
import io.grpc.util.RoundRobinLoadBalancerFactory;
import java.util.List;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LockTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LockTest.java
index 0a0ed65d7..0eb897be0 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LockTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/LockTest.java
@@ -20,8 +20,8 @@
import io.etcd.jetcd.Lease;
import io.etcd.jetcd.Lock;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdCluster;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterFactory;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import io.etcd.jetcd.lease.LeaseGrantResponse;
import io.etcd.jetcd.lock.LockResponse;
import java.io.IOException;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/MaintenanceTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/MaintenanceTest.java
index 614384815..5e7311d32 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/MaintenanceTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/MaintenanceTest.java
@@ -20,8 +20,8 @@
import io.etcd.jetcd.Client;
import io.etcd.jetcd.Maintenance;
-import io.etcd.jetcd.internal.infrastructure.EtcdCluster;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterFactory;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import io.etcd.jetcd.maintenance.SnapshotResponse;
import io.etcd.jetcd.maintenance.StatusResponse;
import io.grpc.stub.StreamObserver;
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/SslTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/SslTest.java
index caa65c17b..5b550db85 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/SslTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/SslTest.java
@@ -21,7 +21,7 @@
import io.etcd.jetcd.Client;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterResource;
+import io.etcd.jetcd.launcher.junit.EtcdClusterResource;
import io.grpc.netty.GrpcSslContexts;
import java.io.File;
import java.io.FileInputStream;
@@ -31,20 +31,24 @@
import org.junit.Test;
public class SslTest {
+
@Rule
public final EtcdClusterResource clusterResource = new EtcdClusterResource("etcd-ssl", 1, true);
+ private static final String DEFAULT_SSL_AUTHORITY = "etcd0";
+ private static final String DEFAULT_SSL_CA_PATH = "/ssl/cert/ca.pem";
+
@Test(timeout = 5000)
public void testSimpleSllSetup() throws Exception {
final ByteSequence key = ByteSequence.from(TestUtil.randomString(), Charsets.UTF_8);
final ByteSequence val = ByteSequence.from(TestUtil.randomString(), Charsets.UTF_8);
final String capath = System.getProperty("ssl.cert.capath");
- final String authority = System.getProperty("ssl.cert.authority", TestConstants.DEFAULT_SSL_AUTHORITY);
+ final String authority = System.getProperty("ssl.cert.authority", DEFAULT_SSL_AUTHORITY);
final String endpoints = System.getProperty("ssl.cert.endpoints", clusterResource.cluster().getClientEndpoints().get(0));
try (InputStream is = Objects.nonNull(capath)
? new FileInputStream(new File(capath))
- : getClass().getResourceAsStream(TestConstants.DEFAULT_SSL_CA_PATH)) {
+ : getClass().getResourceAsStream(DEFAULT_SSL_CA_PATH)) {
Client client = Client.builder()
.endpoints(endpoints)
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestConstants.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestConstants.java
deleted file mode 100644
index f3262bb29..000000000
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestConstants.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright 2017 The jetcd authors
- *
- * Licensed 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 io.etcd.jetcd.internal.impl;
-
-/**
- * Test constants, contain the cluster info.
- */
-public class TestConstants {
- public static final String ETCD_DOCKER_IMAGE_NAME = "gcr.io/etcd-development/etcd:v3.3";
-
- public static final int ETCD_CLIENT_PORT = 2379;
- public static final int ETCD_PEER_PORT = 2380;
-
- public static final String DEFAULT_SSL_AUTHORITY = "etcd0";
-
- public static final String DEFAULT_SSL_CA_PATH = "/ssl/cert/ca.pem";
-}
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestUtil.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestUtil.java
index 6b95d4162..f702b5861 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestUtil.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/TestUtil.java
@@ -19,10 +19,6 @@
import io.etcd.jetcd.data.ByteSequence;
import java.io.IOException;
import java.net.ServerSocket;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.testcontainers.containers.GenericContainer;
public class TestUtil {
@@ -39,30 +35,4 @@ public static int findNextAvailablePort() throws IOException {
return socket.getLocalPort();
}
}
-
- public static String buildClientEndpoint(GenericContainer container) {
- return buildEndpoint(container, "http", TestConstants.ETCD_CLIENT_PORT);
- }
-
- public static List buildClientEndpoints(GenericContainer... etcdContainers) {
- return Arrays.stream(etcdContainers)
- .map(TestUtil::buildClientEndpoint)
- .collect(Collectors.toList());
- }
-
- public static String buildPeerEndpoint(GenericContainer container) {
- return buildEndpoint(container, "http", TestConstants.ETCD_PEER_PORT);
- }
-
- public static List buildPeerEndpoints(GenericContainer... etcdContainers) {
- return Arrays.stream(etcdContainers)
- .map(TestUtil::buildPeerEndpoint)
- .collect(Collectors.toList());
- }
-
- public static String buildEndpoint(GenericContainer container, String scheme, int port) {
- String nodeAddress = container.getContainerIpAddress();
- Integer nodePort = container.getMappedPort(port);
- return scheme + "://" + nodeAddress + ":" + nodePort;
- }
}
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/WatchTest.java b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/WatchTest.java
index 6e12cb64e..6b2cd9a8a 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/WatchTest.java
+++ b/jetcd-core/src/test/java/io/etcd/jetcd/internal/impl/WatchTest.java
@@ -15,7 +15,6 @@
*/
package io.etcd.jetcd.internal.impl;
-
import static com.google.common.base.Charsets.UTF_8;
import static org.assertj.core.api.Assertions.assertThat;
@@ -24,7 +23,7 @@
import io.etcd.jetcd.Watch;
import io.etcd.jetcd.Watch.Watcher;
import io.etcd.jetcd.data.ByteSequence;
-import io.etcd.jetcd.internal.infrastructure.EtcdClusterResource;
+import io.etcd.jetcd.launcher.junit.EtcdClusterResource;
import io.etcd.jetcd.watch.WatchEvent;
import io.etcd.jetcd.watch.WatchEvent.EventType;
import io.etcd.jetcd.watch.WatchResponse;
diff --git a/jetcd-launcher/pom.xml b/jetcd-launcher/pom.xml
new file mode 100644
index 000000000..7d1266eac
--- /dev/null
+++ b/jetcd-launcher/pom.xml
@@ -0,0 +1,80 @@
+
+
+
+ 4.0.0
+
+
+ io.etcd
+ jetcd-parent
+ 0.3.0-SNAPSHOT
+
+
+ jetcd-launcher
+ bundle
+
+
+ ${basedir}/../etc/checkstyle.xml
+ ${basedir}../etc/checkstyle-header-java.txt
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.testcontainers
+ testcontainers
+
+
+ commons-io
+ commons-io
+
+
+ junit
+ junit
+
+ compile
+ true
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.groupId}.${project.artifactId}
+ etcd :: ${project.artifactId}
+
+
+
+
+
+
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdCluster.java b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdCluster.java
similarity index 78%
rename from jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdCluster.java
rename to jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdCluster.java
index eb386b233..10eb5b909 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdCluster.java
+++ b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdCluster.java
@@ -14,28 +14,21 @@
* limitations under the License.
*/
-package io.etcd.jetcd.internal.infrastructure;
+package io.etcd.jetcd.launcher;
-import io.etcd.jetcd.Client;
import java.util.List;
import javax.annotation.Nonnull;
public interface EtcdCluster extends AutoCloseable {
+
void start();
+ @Override
void close();
- @Nonnull
- Client getClient();
-
@Nonnull
List getClientEndpoints();
@Nonnull
List getPeerEndpoints();
-
- interface LifecycleListener {
- void started(EtcdContainer container);
- void stopped(EtcdContainer container);
- }
}
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdClusterFactory.java b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdClusterFactory.java
similarity index 82%
rename from jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdClusterFactory.java
rename to jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdClusterFactory.java
index a9163b450..b48d00f92 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdClusterFactory.java
+++ b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdClusterFactory.java
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package io.etcd.jetcd.internal.infrastructure;
+package io.etcd.jetcd.launcher;
import static java.util.stream.Collectors.toList;
-import io.etcd.jetcd.Client;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -26,13 +25,12 @@
import javax.annotation.Nonnull;
import org.testcontainers.containers.Network;
-
public class EtcdClusterFactory {
public static EtcdCluster buildCluster(@Nonnull String clusterName, int nodes, boolean ssl) {
final Network network = Network.builder().id(clusterName).build();
final CountDownLatch latch = new CountDownLatch(nodes);
- final EtcdCluster.LifecycleListener listener = new EtcdCluster.LifecycleListener() {
+ final EtcdContainer.LifecycleListener listener = new EtcdContainer.LifecycleListener() {
@Override
public void started(EtcdContainer container) {
latch.countDown();
@@ -44,7 +42,9 @@ public void stopped(EtcdContainer container) {
};
final List endpoints = IntStream.range(0, nodes).mapToObj(i -> "etcd" + i).collect(toList());
- final List containers = endpoints.stream().map(e -> new EtcdContainer(network, listener, ssl, clusterName, e, endpoints)).collect(toList());
+
+ final List containers = endpoints.stream()
+ .map(e -> new EtcdContainer(network, listener, ssl, clusterName, e, endpoints)).collect(toList());
return new EtcdCluster() {
@Override
@@ -65,12 +65,6 @@ public void close() {
containers.forEach(EtcdContainer::close);
}
- @Nonnull
- @Override
- public Client getClient() {
- return Client.builder().endpoints(getClientEndpoints()).build();
- }
-
@Nonnull
@Override
public List getClientEndpoints() {
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdContainer.java b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdContainer.java
similarity index 84%
rename from jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdContainer.java
rename to jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdContainer.java
index 092655fd1..959bae018 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdContainer.java
+++ b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/EtcdContainer.java
@@ -14,11 +14,7 @@
* limitations under the License.
*/
-package io.etcd.jetcd.internal.infrastructure;
-
-import static io.etcd.jetcd.internal.impl.TestConstants.ETCD_CLIENT_PORT;
-import static io.etcd.jetcd.internal.impl.TestConstants.ETCD_DOCKER_IMAGE_NAME;
-import static io.etcd.jetcd.internal.impl.TestConstants.ETCD_PEER_PORT;
+package io.etcd.jetcd.launcher;
import com.github.dockerjava.api.DockerClient;
import java.util.ArrayList;
@@ -42,14 +38,26 @@
import org.testcontainers.utility.LogUtils;
public class EtcdContainer implements AutoCloseable {
+
+ interface LifecycleListener {
+ void started(EtcdContainer container);
+
+ void stopped(EtcdContainer container);
+ }
+
private static final Logger LOGGER = LoggerFactory.getLogger(EtcdCluster.class);
+ private static final String ETCD_DOCKER_IMAGE_NAME = "gcr.io/etcd-development/etcd:v3.3";
+ private static final int ETCD_CLIENT_PORT = 2379;
+ private static final int ETCD_PEER_PORT = 2380;
+
private final String endpoint;
private final boolean ssl;
private final GenericContainer> container;
- private final EtcdCluster.LifecycleListener listener;
+ private final LifecycleListener listener;
- public EtcdContainer(Network network, EtcdCluster.LifecycleListener listener, boolean ssl, String clusterName, String endpoint, List endpoints) {
+ public EtcdContainer(Network network, LifecycleListener listener, boolean ssl, String clusterName,
+ String endpoint, List endpoints) {
this.endpoint = endpoint;
this.ssl = ssl;
this.listener = listener;
@@ -74,16 +82,16 @@ public EtcdContainer(Network network, EtcdCluster.LifecycleListener listener, bo
if (ssl) {
this.container.withClasspathResourceMapping(
- "ssl/cert/" + name + ".pem",
- "/etc/ssl/etcd/server.pem",
- BindMode.READ_ONLY,
- SelinuxContext.SHARED);
+ "ssl/cert/" + name + ".pem",
+ "/etc/ssl/etcd/server.pem",
+ BindMode.READ_ONLY,
+ SelinuxContext.SHARED);
this.container.withClasspathResourceMapping(
- "ssl/cert/" + name + "-key.pem",
- "/etc/ssl/etcd/server-key.pem",
- BindMode.READ_ONLY,
- SelinuxContext.SHARED);
+ "ssl/cert/" + name + "-key.pem",
+ "/etc/ssl/etcd/server-key.pem",
+ BindMode.READ_ONLY,
+ SelinuxContext.SHARED);
command.add("--cert-file");
command.add("/etc/ssl/etcd/server.pem");
@@ -153,10 +161,10 @@ protected void waitUntilReady() {
try {
waitingConsumer.waitUntil(
- f -> f.getUtf8String().contains("ready to serve client requests"),
- startupTimeout.getSeconds(),
- TimeUnit.SECONDS,
- 1
+ f -> f.getUtf8String().contains("ready to serve client requests"),
+ startupTimeout.getSeconds(),
+ TimeUnit.SECONDS,
+ 1
);
} catch (TimeoutException e) {
throw new ContainerLaunchException("Timed out");
diff --git a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdClusterResource.java b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/junit/EtcdClusterResource.java
similarity index 90%
rename from jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdClusterResource.java
rename to jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/junit/EtcdClusterResource.java
index 49e24ae9e..cae1cac6c 100644
--- a/jetcd-core/src/test/java/io/etcd/jetcd/internal/infrastructure/EtcdClusterResource.java
+++ b/jetcd-launcher/src/main/java/io/etcd/jetcd/launcher/junit/EtcdClusterResource.java
@@ -14,8 +14,10 @@
* limitations under the License.
*/
-package io.etcd.jetcd.internal.infrastructure;
+package io.etcd.jetcd.launcher.junit;
+import io.etcd.jetcd.launcher.EtcdCluster;
+import io.etcd.jetcd.launcher.EtcdClusterFactory;
import org.junit.rules.ExternalResource;
public class EtcdClusterResource extends ExternalResource {
diff --git a/pom.xml b/pom.xml
index 62a7c7224..282aa35f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,6 +129,7 @@
+ jetcd-launcher
jetcd-common
jetcd-resolver
jetcd-resolver-dns-srv
@@ -140,6 +141,11 @@
+
+ ${project.groupId}
+ jetcd-launcher
+ ${project.version}
+
${project.groupId}
jetcd-common
@@ -275,7 +281,6 @@
org.testcontainers
testcontainers
${testcontainers.version}
- test
commons-io