This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 639ad83 CAMEL-14543: Execute camel-etcd tests with testcontainers 639ad83 is described below commit 639ad830b955ae3c85413f008f248cb5e31542c9 Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Wed Feb 12 16:35:49 2020 +0100 CAMEL-14543: Execute camel-etcd tests with testcontainers --- components/camel-etcd/pom.xml | 40 +++++++-- .../apache/camel/component/etcd/EtcdKeysTest.java | 15 ++-- .../apache/camel/component/etcd/EtcdStatsTest.java | 3 +- .../camel/component/etcd/EtcdTestSupport.java | 46 ----------- .../apache/camel/component/etcd/EtcdWatchTest.java | 5 +- .../etcd/cloud/EtcdServiceCallRouteTest.java | 11 ++- .../etcd/cloud/EtcdServiceDiscoveryTest.java | 30 ++++--- .../SpringEtcdServiceCallDefaultRouteTest.java | 29 +++---- .../etcd/cloud/SpringEtcdServiceCallRouteTest.java | 33 +++----- .../component/etcd/policy/EtcdRoutePolicyMain.java | 2 +- .../component/etcd/support/EtcdTestSupport.java | 95 ++++++++++++++++++++++ .../etcd/support/SpringEtcdTestSupport.java | 74 +++++++++++++++++ .../src/test/resources/log4j2.properties | 2 +- .../SpringEtcdServiceCallDefaultRouteTest.xml | 2 +- .../etcd/cloud/SpringEtcdServiceCallRouteTest.xml | 12 ++- parent/pom.xml | 2 +- 16 files changed, 279 insertions(+), 122 deletions(-) diff --git a/components/camel-etcd/pom.xml b/components/camel-etcd/pom.xml index 7979a35..a91a738 100644 --- a/components/camel-etcd/pom.xml +++ b/components/camel-etcd/pom.xml @@ -71,12 +71,12 @@ <!-- testing --> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-test</artifactId> + <artifactId>camel-testcontainers-spring-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-test-spring</artifactId> + <artifactId>camel-testcontainers-junit5</artifactId> <scope>test</scope> </dependency> <dependency> @@ -109,17 +109,47 @@ </plugins> </build> </profile> + + <!-- activate test if the docker socket file is accessible --> + <profile> + <id>etcd-tests-docker-file</id> + <activation> + <file> + <exists>/var/run/docker.sock</exists> + </file> + </activation> + <build> + <plugins> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skipTests>${skipTests}</skipTests> + <systemPropertyVariables> + <visibleassertions.silence>true</visibleassertions.silence> + </systemPropertyVariables> + </configuration> + </plugin> + </plugins> + </build> + </profile> + + <!-- activate test if the DOCKER_HOST env var is set --> <profile> - <id>etcd-tests</id> + <id>etcd-tests-docker-env</id> <activation> - <activeByDefault>false</activeByDefault> + <property> + <name>env.DOCKER_HOST</name> + </property> </activation> <build> <plugins> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> - <skipTests>false</skipTests> + <skipTests>${skipTests}</skipTests> + <systemPropertyVariables> + <visibleassertions.silence>true</visibleassertions.silence> + </systemPropertyVariables> </configuration> </plugin> </plugins> diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdKeysTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdKeysTest.java index 3e0ac31..9ca98fa 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdKeysTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdKeysTest.java @@ -26,12 +26,17 @@ import mousio.etcd4j.responses.EtcdKeysResponse; import org.apache.camel.Exchange; import org.apache.camel.Predicate; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.etcd.support.EtcdTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.fail; public class EtcdKeysTest extends EtcdTestSupport { - @Test(expected = EtcdException.class) + @Test public void testKeys() throws Exception { final String path = "/camel/" + UUID.randomUUID().toString(); final String value = UUID.randomUUID().toString(); @@ -102,9 +107,9 @@ public class EtcdKeysTest extends EtcdTestSupport { // VALIDATION // ******************************************* - client.get(path).send().get(); - - fail("EtcdException should have been thrown"); + assertThrows(EtcdException.class, () -> { + client.get(path).send().get(); + }); } @Override diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdStatsTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdStatsTest.java index ab6657b..c9db4c4 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdStatsTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdStatsTest.java @@ -22,8 +22,9 @@ import mousio.etcd4j.responses.EtcdStoreStatsResponse; import org.apache.camel.Exchange; import org.apache.camel.Predicate; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.etcd.support.EtcdTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class EtcdStatsTest extends EtcdTestSupport { diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdTestSupport.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdTestSupport.java deleted file mode 100644 index c5f28c5..0000000 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdTestSupport.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.camel.component.etcd; - -import java.net.URI; - -import mousio.etcd4j.EtcdClient; -import mousio.etcd4j.responses.EtcdKeysResponse; -import org.apache.camel.Exchange; -import org.apache.camel.Processor; -import org.apache.camel.test.junit4.CamelTestSupport; - -public class EtcdTestSupport extends CamelTestSupport { - protected static final Processor NODE_TO_VALUE_IN = new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - EtcdKeysResponse response = exchange.getIn().getBody(EtcdKeysResponse.class); - if (response != null) { - exchange.getIn().setBody(response.node.key + "=" + response.node.value); - } - } - }; - - @Override - public boolean isCreateCamelContextPerClass() { - return false; - } - - protected EtcdClient getClient() { - return new EtcdClient(URI.create("http://localhost:2379")); - } -} diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdWatchTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdWatchTest.java index a11ba36..d35e609 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdWatchTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/EtcdWatchTest.java @@ -20,8 +20,9 @@ import mousio.etcd4j.EtcdClient; import mousio.etcd4j.responses.EtcdErrorCode; import mousio.etcd4j.responses.EtcdException; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.etcd.support.EtcdTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class EtcdWatchTest extends EtcdTestSupport { @@ -76,7 +77,7 @@ public class EtcdWatchTest extends EtcdTestSupport { } private void testWatch(String mockEndpoint, final String key, int updates) throws Exception { - final String[] values = new String[updates]; + final Object[] values = new String[updates]; for (int i = 0; i < updates; i++) { values[i] = key + "=myValue-" + i; } diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java index f9cbd3c..bb6ca66 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java @@ -27,9 +27,8 @@ import mousio.etcd4j.EtcdClient; import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.etcd.EtcdHelper; -import org.apache.camel.component.etcd.EtcdTestSupport; -import org.junit.After; -import org.junit.Test; +import org.apache.camel.component.etcd.support.EtcdTestSupport; +import org.junit.jupiter.api.Test; public class EtcdServiceCallRouteTest extends EtcdTestSupport { private static final ObjectMapper MAPPER = EtcdHelper.createObjectMapper(); @@ -66,10 +65,9 @@ public class EtcdServiceCallRouteTest extends EtcdTestSupport { } @Override - @After - public void tearDown() throws Exception { - super.tearDown(); + protected void cleanupResources() throws Exception { client.deleteDir("/services/").recursive().send().get(); + super.cleanupResources(); } // ************************************************************************* @@ -99,6 +97,7 @@ public class EtcdServiceCallRouteTest extends EtcdTestSupport { .serviceCall() .name(SERVICE_NAME) .etcdServiceDiscovery() + .uris(getClientUri()) .type("on-demand") .endParent() .to("log:org.apache.camel.component.etcd.processor.service?level=INFO&showAll=true&multiline=true") diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java index d67fdf1..5289a16 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java @@ -27,37 +27,45 @@ import mousio.etcd4j.responses.EtcdException; import org.apache.camel.cloud.ServiceDefinition; import org.apache.camel.component.etcd.EtcdConfiguration; import org.apache.camel.component.etcd.EtcdHelper; -import org.apache.camel.component.etcd.EtcdTestSupport; -import org.junit.After; -import org.junit.Test; +import org.apache.camel.component.etcd.support.EtcdTestSupport; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; public class EtcdServiceDiscoveryTest extends EtcdTestSupport { private static final ObjectMapper MAPPER = EtcdHelper.createObjectMapper(); - private static final EtcdConfiguration CONFIGURATION = new EtcdConfiguration(null); private static final AtomicInteger PORT = new AtomicInteger(0); private EtcdClient client; + private EtcdConfiguration configuration; @Override public void doPreSetup() throws Exception { + configuration = new EtcdConfiguration(); + configuration.setCamelContext(context); + configuration.setUris(getClientUri()); + client = getClient(); try { - client.deleteDir(CONFIGURATION.getServicePath()).recursive().send().get(); + client.deleteDir(configuration.getServicePath()).recursive().send().get(); } catch (EtcdException e) { // Ignore } } @Override - @After - public void tearDown() throws Exception { + protected void cleanupResources() throws Exception { try { - client.deleteDir(CONFIGURATION.getServicePath()).recursive().send().get(); + client.deleteDir(configuration.getServicePath()).recursive().send().get(); client.close(); client = null; } catch (EtcdException e) { // Ignore } + + super.cleanupResources(); } @Test @@ -69,7 +77,7 @@ public class EtcdServiceDiscoveryTest extends EtcdTestSupport { addServer(client, "serviceType-2"); } - EtcdOnDemandServiceDiscovery strategy = new EtcdOnDemandServiceDiscovery(CONFIGURATION); + EtcdOnDemandServiceDiscovery strategy = new EtcdOnDemandServiceDiscovery(configuration); strategy.start(); List<ServiceDefinition> type1 = strategy.getServices("serviceType-1"); @@ -95,7 +103,7 @@ public class EtcdServiceDiscoveryTest extends EtcdTestSupport { public void testWatchDiscovery() throws Exception { addServer(client, "serviceType-3"); - EtcdWatchServiceDiscovery strategy = new EtcdWatchServiceDiscovery(CONFIGURATION); + EtcdWatchServiceDiscovery strategy = new EtcdWatchServiceDiscovery(configuration); strategy.start(); assertEquals(1, strategy.getServices("serviceType-3").size()); @@ -124,6 +132,6 @@ public class EtcdServiceDiscoveryTest extends EtcdTestSupport { server.put("port", 8000 + port); server.put("tags", tags); - client.put(CONFIGURATION.getServicePath() + "service-" + port, MAPPER.writeValueAsString(server)).send().get(); + client.put(configuration.getServicePath() + "service-" + port, MAPPER.writeValueAsString(server)).send().get(); } } diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java index 31c0ba7..4225c36 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java @@ -16,24 +16,14 @@ */ package org.apache.camel.component.etcd.cloud; -import java.net.URI; - import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import mousio.etcd4j.EtcdClient; -import org.apache.camel.component.etcd.EtcdConfiguration; -import org.apache.camel.component.etcd.EtcdHelper; -import org.apache.camel.test.spring.CamelSpringTestSupport; -import org.junit.After; -import org.junit.Test; +import org.apache.camel.component.etcd.support.SpringEtcdTestSupport; +import org.junit.jupiter.api.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -public class SpringEtcdServiceCallDefaultRouteTest extends CamelSpringTestSupport { - private static final ObjectMapper MAPPER = EtcdHelper.createObjectMapper(); - private static final EtcdConfiguration CONFIGURATION = new EtcdConfiguration(); - private static final EtcdClient CLIENT = new EtcdClient(URI.create("http://localhost:2379")); - +public class SpringEtcdServiceCallDefaultRouteTest extends SpringEtcdTestSupport { @Override protected AbstractApplicationContext createApplicationContext() { return new ClassPathXmlApplicationContext("org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.xml"); @@ -54,17 +44,18 @@ public class SpringEtcdServiceCallDefaultRouteTest extends CamelSpringTestSuppor .put("address", "127.0.0.1") .put("port", "9092"); - CLIENT.put(CONFIGURATION.getServicePath() + "service-1", MAPPER.writeValueAsString(service1)).send().get(); - CLIENT.put(CONFIGURATION.getServicePath() + "service-2", MAPPER.writeValueAsString(service2)).send().get(); + EtcdClient client = getClient(); + client.put(CONFIGURATION.getServicePath() + "service-1", MAPPER.writeValueAsString(service1)).send().get(); + client.put(CONFIGURATION.getServicePath() + "service-2", MAPPER.writeValueAsString(service2)).send().get(); super.doPreSetup(); } @Override - @After - public void tearDown() throws Exception { - super.tearDown(); - CLIENT.deleteDir(CONFIGURATION.getServicePath()).recursive().send().get(); + protected void cleanupResources() throws Exception { + getClient().deleteDir(CONFIGURATION.getServicePath()).recursive().send().get(); + + super.cleanupResources(); } // ************************************************************************* diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java index fda5e02..9e35df5 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java @@ -16,22 +16,14 @@ */ package org.apache.camel.component.etcd.cloud; -import java.net.URI; - import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import mousio.etcd4j.EtcdClient; -import org.apache.camel.component.etcd.EtcdHelper; -import org.apache.camel.test.spring.CamelSpringTestSupport; -import org.junit.After; -import org.junit.Test; +import org.apache.camel.component.etcd.support.SpringEtcdTestSupport; +import org.junit.jupiter.api.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -public class SpringEtcdServiceCallRouteTest extends CamelSpringTestSupport { - private static final ObjectMapper MAPPER = EtcdHelper.createObjectMapper(); - private static final EtcdClient CLIENT = new EtcdClient(URI.create("http://localhost:2379")); - +public class SpringEtcdServiceCallRouteTest extends SpringEtcdTestSupport { @Override protected AbstractApplicationContext createApplicationContext() { return new ClassPathXmlApplicationContext("org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.xml"); @@ -60,20 +52,21 @@ public class SpringEtcdServiceCallRouteTest extends CamelSpringTestSupport { .put("address", "127.0.0.1") .put("port", "9094"); - CLIENT.put("/etcd-services-1/" + "service-1", MAPPER.writeValueAsString(service1)).send().get(); - CLIENT.put("/etcd-services-1/" + "service-2", MAPPER.writeValueAsString(service2)).send().get(); - CLIENT.put("/etcd-services-2/" + "service-3", MAPPER.writeValueAsString(service3)).send().get(); - CLIENT.put("/etcd-services-2/" + "service-4", MAPPER.writeValueAsString(service4)).send().get(); + EtcdClient client = getClient(); + client.put("/etcd-services-1/" + "service-1", MAPPER.writeValueAsString(service1)).send().get(); + client.put("/etcd-services-1/" + "service-2", MAPPER.writeValueAsString(service2)).send().get(); + client.put("/etcd-services-2/" + "service-3", MAPPER.writeValueAsString(service3)).send().get(); + client.put("/etcd-services-2/" + "service-4", MAPPER.writeValueAsString(service4)).send().get(); super.doPreSetup(); } @Override - @After - public void tearDown() throws Exception { - super.tearDown(); - CLIENT.deleteDir("/etcd-services-1/").recursive().send().get(); - CLIENT.deleteDir("/etcd-services-2/").recursive().send().get(); + protected void cleanupResources() throws Exception { + getClient().deleteDir("/etcd-services-1/").recursive().send().get(); + getClient().deleteDir("/etcd-services-2/").recursive().send().get(); + + super.cleanupResources(); } // ************************************************************************* diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicyMain.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicyMain.java index 402b3ba..480cf86 100644 --- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicyMain.java +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicyMain.java @@ -27,7 +27,7 @@ public final class EtcdRoutePolicyMain { public static void main(final String[] args) throws Exception { Main main = new Main(); - main.addRouteBuilder(new RouteBuilder() { + main.addRoutesBuilder(new RouteBuilder() { public void configure() { EtcdRoutePolicy policy = new EtcdRoutePolicy(); policy.setClientUris(EtcdConstants.ETCD_DEFAULT_URIS); diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/support/EtcdTestSupport.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/support/EtcdTestSupport.java new file mode 100644 index 0000000..4d04908 --- /dev/null +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/support/EtcdTestSupport.java @@ -0,0 +1,95 @@ +/* + * 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.camel.component.etcd.support; + +import java.net.URI; + +import com.fasterxml.jackson.databind.ObjectMapper; +import mousio.etcd4j.EtcdClient; +import mousio.etcd4j.responses.EtcdKeysResponse; +import org.apache.camel.CamelContext; +import org.apache.camel.Processor; +import org.apache.camel.component.etcd.EtcdHelper; +import org.apache.camel.component.etcd.EtcdKeysComponent; +import org.apache.camel.component.etcd.EtcdStatsComponent; +import org.apache.camel.component.etcd.EtcdWatchComponent; +import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport; +import org.apache.camel.test.testcontainers.junit5.Wait; +import org.testcontainers.DockerClientFactory; +import org.testcontainers.containers.GenericContainer; + +public abstract class EtcdTestSupport extends ContainerAwareTestSupport { + public static final ObjectMapper MAPPER = EtcdHelper.createObjectMapper(); + public static final String CONTAINER_IMAGE = "quay.io/coreos/etcd:v2.3.7"; + public static final String CONTAINER_NAME = "etcd"; + public static final int ETCD_CLIENT_PORT = 2379; + public static final int ETCD_PEER_PORT = 2380; + + protected static final Processor NODE_TO_VALUE_IN = exchange -> { + EtcdKeysResponse response = exchange.getMessage().getBody(EtcdKeysResponse.class); + if (response != null) { + exchange.getMessage().setBody(response.node.key + "=" + response.node.value); + } + }; + + protected String getClientUri() { + return String.format( + "http://%s:%d", + getContainerHost(CONTAINER_NAME), + getContainerPort(CONTAINER_NAME, ETCD_CLIENT_PORT)); + } + + protected EtcdClient getClient() { + return new EtcdClient(URI.create(getClientUri())); + } + + @Override + protected CamelContext createCamelContext() throws Exception { + EtcdKeysComponent keys = new EtcdKeysComponent(); + keys.setUris(getClientUri()); + + EtcdStatsComponent stats = new EtcdStatsComponent(); + stats.setUris(getClientUri()); + + EtcdWatchComponent watch = new EtcdWatchComponent(); + watch.setUris(getClientUri()); + + CamelContext context = super.createCamelContext(); + context.addComponent("etcd-keys", keys); + context.addComponent("etcd-stats", stats); + context.addComponent("etcd-watch", watch); + + return context; + } + + @Override + protected GenericContainer<?> createContainer() { + return etcdContainer(); + } + + public static GenericContainer etcdContainer() { + return new GenericContainer(CONTAINER_IMAGE) + .withNetworkAliases(CONTAINER_NAME) + .withExposedPorts(ETCD_CLIENT_PORT, ETCD_PEER_PORT) + .waitingFor(Wait.forLogMessageContaining("etcdserver: set the initial cluster version", 1)) + .withCommand( + "-name", CONTAINER_NAME + "-0", + "-advertise-client-urls", "http://" + DockerClientFactory.instance().dockerHostIpAddress() + ":" + ETCD_CLIENT_PORT, + "-listen-client-urls", "http://0.0.0.0:" + ETCD_CLIENT_PORT + ); + } +} diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/support/SpringEtcdTestSupport.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/support/SpringEtcdTestSupport.java new file mode 100644 index 0000000..aa0de4b --- /dev/null +++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/support/SpringEtcdTestSupport.java @@ -0,0 +1,74 @@ +/* + * 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.camel.component.etcd.support; + +import java.net.URI; + +import com.fasterxml.jackson.databind.ObjectMapper; +import mousio.etcd4j.EtcdClient; +import org.apache.camel.CamelContext; +import org.apache.camel.component.etcd.EtcdConfiguration; +import org.apache.camel.component.etcd.EtcdHelper; +import org.apache.camel.component.etcd.EtcdKeysComponent; +import org.apache.camel.component.etcd.EtcdStatsComponent; +import org.apache.camel.component.etcd.EtcdWatchComponent; +import org.apache.camel.test.testcontainers.spring.junit5.ContainerAwareSpringTestSupport; +import org.testcontainers.containers.GenericContainer; + +public abstract class SpringEtcdTestSupport extends ContainerAwareSpringTestSupport { + protected static final ObjectMapper MAPPER = EtcdHelper.createObjectMapper(); + protected static final EtcdConfiguration CONFIGURATION = new EtcdConfiguration(); + + @Override + protected GenericContainer<?> createContainer() { + return EtcdTestSupport.etcdContainer(); + } + + protected String getClientUri() { + return String.format( + "http://%s:%d", + getContainerHost(EtcdTestSupport.CONTAINER_NAME), + getContainerPort(EtcdTestSupport.CONTAINER_NAME, EtcdTestSupport.ETCD_CLIENT_PORT)); + } + + protected EtcdClient getClient() { + return new EtcdClient(URI.create(getClientUri())); + } + + // ************************************************************************* + // Setup / tear down + // ************************************************************************* + + @Override + protected CamelContext createCamelContext() throws Exception { + EtcdKeysComponent keys = new EtcdKeysComponent(); + keys.setUris(getClientUri()); + + EtcdStatsComponent stats = new EtcdStatsComponent(); + stats.setUris(getClientUri()); + + EtcdWatchComponent watch = new EtcdWatchComponent(); + watch.setUris(getClientUri()); + + CamelContext context = super.createCamelContext(); + context.addComponent("etcd-keys", keys); + context.addComponent("etcd-stats", stats); + context.addComponent("etcd-watch", watch); + + return context; + } +} diff --git a/components/camel-etcd/src/test/resources/log4j2.properties b/components/camel-etcd/src/test/resources/log4j2.properties index bd42f41..58ce90a 100644 --- a/components/camel-etcd/src/test/resources/log4j2.properties +++ b/components/camel-etcd/src/test/resources/log4j2.properties @@ -29,6 +29,6 @@ logger.etcd4j.level = INFO logger.camel.name = org.apache.camel logger.camel.level = INFO logger.etcd.name = org.apache.camel.component.etcd -logger.etcd.level = DEBUG +logger.etcd.level = INFO rootLogger.level = INFO rootLogger.appenderRef.file.ref = file diff --git a/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.xml b/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.xml index 7d945fb..4dec9b7 100644 --- a/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.xml +++ b/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.xml @@ -29,7 +29,7 @@ <route> <from uri="direct:start"/> <serviceCall name="http-service"> - <etcdServiceDiscovery/> + <etcdServiceDiscovery uris="http://{{container:host:etcd}}:{{container:port:2379@etcd}}"/> </serviceCall> <to uri="mock:result"/> </route> diff --git a/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.xml b/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.xml index 312c110..b426679 100644 --- a/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.xml +++ b/components/camel-etcd/src/test/resources/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.xml @@ -27,7 +27,9 @@ <camelContext xmlns="http://camel.apache.org/schema/spring"> <serviceCallConfiguration id="service-0"> - <etcdServiceDiscovery servicePath="/etcd-services-0/"/> + <etcdServiceDiscovery + uris="http://{{container:host:etcd}}:{{container:port:2379@etcd}}" + servicePath="/etcd-services-0/"/> </serviceCallConfiguration> <route> @@ -41,14 +43,18 @@ <when> <simple>${body} == 'service-1'</simple> <serviceCall name="http-service"> - <etcdServiceDiscovery servicePath="/etcd-services-1/"/> + <etcdServiceDiscovery + uris="http://{{container:host:etcd}}:{{container:port:2379@etcd}}" + servicePath="/etcd-services-1/"/> </serviceCall> <to uri="mock:result-1"/> </when> <when> <simple>${body} == 'service-2'</simple> <serviceCall name="http-service"> - <etcdServiceDiscovery servicePath="/etcd-services-2/"/> + <etcdServiceDiscovery + uris="http://{{container:host:etcd}}:{{container:port:2379@etcd}}" + servicePath="/etcd-services-2/"/> </serviceCall> <to uri="mock:result-2"/> </when> diff --git a/parent/pom.xml b/parent/pom.xml index 8f879cc..2b61d8a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -189,7 +189,7 @@ <elytron-web>1.7.0.CR3</elytron-web> <eddsa-version>0.3.0</eddsa-version> <embedmongo-version>2.1.1</embedmongo-version> - <etcd4j-version>2.17.0</etcd4j-version> + <etcd4j-version>2.18.0</etcd4j-version> <exec-maven-plugin-version>1.6.0</exec-maven-plugin-version> <fabric8-maven-plugin-version>4.3.1</fabric8-maven-plugin-version> <facebook4j-core-version>2.4.13</facebook4j-core-version>