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