This is an automated email from the ASF dual-hosted git repository. orpiske 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 98e06884 Migrates camel-nats to the new test infra (#4706) 98e06884 is described below commit 98e06884635b456c1b32ea01b5064e5ff6411eff Author: Otavio Rodolfo Piske <orpi...@users.noreply.github.com> AuthorDate: Tue Dec 1 16:40:35 2020 +0100 Migrates camel-nats to the new test infra (#4706) --- components/camel-nats/pom.xml | 14 +++- .../component/nats/NatsAuthConsumerLoadTest.java | 2 +- .../camel/component/nats/NatsAuthTestSupport.java | 45 ++--------- .../nats/NatsAuthTokenConsumerLoadTest.java | 2 +- .../component/nats/NatsAuthTokenTestSupport.java | 40 ++-------- .../camel/component/nats/NatsConsumerLoadTest.java | 2 +- .../nats/NatsConsumerWithConnectionLoadTest.java | 4 +- .../component/nats/NatsTLSAuthTestSupport.java | 45 ++--------- .../camel/component/nats/NatsTestSupport.java | 35 ++------- test-infra/camel-test-infra-nats/pom.xml | 60 +++++++++++++++ .../src/main/resources/META-INF/MANIFEST.MF | 0 .../test/infra/nats/common/NatsProperties.java | 13 ++-- .../services/NatsLocalContainerAuthService.java | 46 +++++++++++ .../NatsLocalContainerAuthTokenService.java | 44 +++++++++++ .../nats/services/NatsLocalContainerService.java | 88 ++++++++++++++++++++++ .../services/NatsLocalContainerTLSAuthService.java | 37 +++++++++ .../infra/nats/services/NatsRemoteService.java | 24 +++++- .../test/infra/nats/services/NatsService.java | 22 +++++- .../infra/nats/services/NatsServiceFactory.java | 25 +++++- .../apache/camel/test/infra/nats/services}/ca.pem | 0 .../apache/camel/test/infra/nats/services}/key.pem | 0 .../camel/test/infra/nats/services}/server.pem | 0 test-infra/pom.xml | 1 + 23 files changed, 392 insertions(+), 157 deletions(-) diff --git a/components/camel-nats/pom.xml b/components/camel-nats/pom.xml index a6030da..fd5f291 100644 --- a/components/camel-nats/pom.xml +++ b/components/camel-nats/pom.xml @@ -56,9 +56,21 @@ <artifactId>log4j-slf4j-impl</artifactId> <scope>test</scope> </dependency> + + <!-- test infra --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-infra-common</artifactId> + <version>${project.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-testcontainers-junit5</artifactId> + <artifactId>camel-test-infra-nats</artifactId> + <version>${project.version}</version> + <type>test-jar</type> <scope>test</scope> </dependency> </dependencies> diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java index 2993ce7..faf9761 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java @@ -35,7 +35,7 @@ public class NatsAuthConsumerLoadTest extends NatsAuthTestSupport { @Test public void testLoadConsumer() throws InterruptedException, IOException, TimeoutException { mockResultEndpoint.setExpectedMessageCount(100); - Options options = new Options.Builder().server("nats://" + getNatsBrokerUrl()).build(); + Options options = new Options.Builder().server("nats://" + service.getServiceAddress()).build(); Connection connection = Nats.connect(options); for (int i = 0; i < 100; i++) { diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTestSupport.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTestSupport.java index 382a0cd..27121cf 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTestSupport.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTestSupport.java @@ -17,49 +17,20 @@ package org.apache.camel.component.nats; import org.apache.camel.CamelContext; -import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport; -import org.apache.camel.test.testcontainers.junit5.Wait; -import org.testcontainers.containers.GenericContainer; +import org.apache.camel.test.infra.nats.services.NatsLocalContainerAuthService; +import org.apache.camel.test.infra.nats.services.NatsLocalContainerService; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.extension.RegisterExtension; -import static org.apache.camel.component.nats.NatsTestConstants.CONTAINER_IMAGE; - -public class NatsAuthTestSupport extends ContainerAwareTestSupport { - - public static final String CONTAINER_NAME = "nats-auth"; - public static final String USERNAME = "admin"; - public static final String PASSWORD = "password"; - - @Override - protected GenericContainer<?> createContainer() { - return natsContainer(); - } - - public static GenericContainer natsContainer() { - return new GenericContainer(CONTAINER_IMAGE) - .withNetworkAliases(CONTAINER_NAME) - .waitingFor(Wait.forLogMessageContaining("Server is ready", 1)) - .withCommand( - "-DV", - "--user", - USERNAME, - "--pass", - PASSWORD); - } - - public String getNatsBrokerUrl() { - return String.format( - "%s:%s@%s:%d", - USERNAME, - PASSWORD, - getContainerHost(CONTAINER_NAME), - getContainerPort(CONTAINER_NAME, 4222)); - } +public class NatsAuthTestSupport extends CamelTestSupport { + @RegisterExtension + static NatsLocalContainerService service = new NatsLocalContainerAuthService(); @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); NatsComponent nats = context.getComponent("nats", NatsComponent.class); - nats.setServers(getNatsBrokerUrl()); + nats.setServers(service.getServiceAddress()); return context; } } diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java index 13c404d..f02dd7a 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java @@ -35,7 +35,7 @@ public class NatsAuthTokenConsumerLoadTest extends NatsAuthTokenTestSupport { @Test public void testLoadConsumer() throws InterruptedException, IOException, TimeoutException { mockResultEndpoint.setExpectedMessageCount(100); - Options options = new Options.Builder().server("nats://" + getNatsBrokerUrl()).build(); + Options options = new Options.Builder().server("nats://" + service.getServiceAddress()).build(); Connection connection = Nats.connect(options); for (int i = 0; i < 100; i++) { diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenTestSupport.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenTestSupport.java index 1040124..432ebf1 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenTestSupport.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenTestSupport.java @@ -17,45 +17,19 @@ package org.apache.camel.component.nats; import org.apache.camel.CamelContext; -import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport; -import org.apache.camel.test.testcontainers.junit5.Wait; -import org.testcontainers.containers.GenericContainer; +import org.apache.camel.test.infra.nats.services.NatsLocalContainerAuthTokenService; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.extension.RegisterExtension; -import static org.apache.camel.component.nats.NatsTestConstants.CONTAINER_IMAGE; - -public class NatsAuthTokenTestSupport extends ContainerAwareTestSupport { - - public static final String CONTAINER_NAME = "nats-auth-token"; - public static final String TOKEN = "!admin23456"; - - @Override - protected GenericContainer<?> createContainer() { - return natsContainer(); - } - - public static GenericContainer natsContainer() { - return new GenericContainer(CONTAINER_IMAGE) - .withNetworkAliases(CONTAINER_NAME) - .waitingFor(Wait.forLogMessageContaining("Server is ready", 1)) - .withCommand( - "-DV", - "-auth", - TOKEN); - } - - public String getNatsBrokerUrl() { - return String.format( - "%s@%s:%d", - TOKEN, - getContainerHost(CONTAINER_NAME), - getContainerPort(CONTAINER_NAME, 4222)); - } +public class NatsAuthTokenTestSupport extends CamelTestSupport { + @RegisterExtension + static NatsLocalContainerAuthTokenService service = new NatsLocalContainerAuthTokenService(); @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); NatsComponent nats = context.getComponent("nats", NatsComponent.class); - nats.setServers(getNatsBrokerUrl()); + nats.setServers(service.getServiceAddress()); return context; } diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java index 2ee2e92..c6121e5 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java @@ -32,7 +32,7 @@ public class NatsConsumerLoadTest extends NatsTestSupport { @Test public void testLoadConsumer() throws Exception { mockResultEndpoint.setExpectedMessageCount(10000); - Options options = new Options.Builder().server("nats://" + getNatsBrokerUrl()).build(); + Options options = new Options.Builder().server("nats://" + service.getServiceAddress()).build(); Connection connection = Nats.connect(options); for (int i = 0; i < 10000; i++) { diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java index 12b5550..4316f6d 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java @@ -39,7 +39,7 @@ public class NatsConsumerWithConnectionLoadTest extends NatsTestSupport { @BindToRegistry("connection") public Connection connection() throws Exception { Builder options = new Options.Builder(); - options.server("nats://" + getNatsBrokerUrl()); + options.server("nats://" + service.getServiceAddress()); connection = Nats.connect(options.build()); return connection; } @@ -48,7 +48,7 @@ public class NatsConsumerWithConnectionLoadTest extends NatsTestSupport { public void testLoadConsumer() throws Exception { mockResultEndpoint.setExpectedMessageCount(100); mockResultEndpoint1.setExpectedMessageCount(0); - Options options = new Options.Builder().server("nats://" + getNatsBrokerUrl()).build(); + Options options = new Options.Builder().server("nats://" + service.getServiceAddress()).build(); Connection connection = Nats.connect(options); for (int i = 0; i < 100; i++) { diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java index 2f9e68a..3429a08 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java @@ -17,49 +17,20 @@ package org.apache.camel.component.nats; import org.apache.camel.CamelContext; -import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport; -import org.apache.camel.test.testcontainers.junit5.Wait; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; +import org.apache.camel.test.infra.nats.services.NatsLocalContainerService; +import org.apache.camel.test.infra.nats.services.NatsLocalContainerTLSAuthService; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.extension.RegisterExtension; -import static org.apache.camel.component.nats.NatsTestConstants.CONTAINER_IMAGE; - -/*Certificates used for tests with TLS authentication come from: - *https://github.com/nats-io/jnats/tree/master/src/test/resources */ -public class NatsTLSAuthTestSupport extends ContainerAwareTestSupport { - - public static final String CONTAINER_NAME = "nats-tls"; - - @Override - protected GenericContainer<?> createContainer() { - return natsContainer(); - } - - public static GenericContainer natsContainer() { - return new GenericContainer(CONTAINER_IMAGE) - .withNetworkAliases(CONTAINER_NAME) - .withClasspathResourceMapping("org/apache/camel/component/nats", "/nats", BindMode.READ_ONLY) - .waitingFor(Wait.forLogMessageContaining("Server is ready", 1)) - .withCommand( - "--tls", - "--tlscert=/nats/server.pem", - "--tlskey=/nats/key.pem", - "--tlsverify", - "--tlscacert=/nats/ca.pem"); - } - - public String getNatsBrokerUrl() { - return String.format( - "%s:%d", - getContainerHost(CONTAINER_NAME), - getContainerPort(CONTAINER_NAME, 4222)); - } +public class NatsTLSAuthTestSupport extends CamelTestSupport { + @RegisterExtension + static NatsLocalContainerService service = new NatsLocalContainerTLSAuthService(); @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); NatsComponent nats = context.getComponent("nats", NatsComponent.class); - nats.setServers(getNatsBrokerUrl()); + nats.setServers(service.getServiceAddress()); return context; } diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestSupport.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestSupport.java index 0fe765c..b6904b4 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestSupport.java +++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestSupport.java @@ -17,39 +17,20 @@ package org.apache.camel.component.nats; import org.apache.camel.CamelContext; -import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport; -import org.apache.camel.test.testcontainers.junit5.Wait; -import org.testcontainers.containers.GenericContainer; +import org.apache.camel.test.infra.nats.services.NatsService; +import org.apache.camel.test.infra.nats.services.NatsServiceFactory; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.extension.RegisterExtension; -import static org.apache.camel.component.nats.NatsTestConstants.CONTAINER_IMAGE; - -public class NatsTestSupport extends ContainerAwareTestSupport { - - public static final String CONTAINER_NAME = "nats"; - - @Override - protected GenericContainer<?> createContainer() { - return natsContainer(); - } - - public static GenericContainer natsContainer() { - return new GenericContainer(CONTAINER_IMAGE) - .withNetworkAliases(CONTAINER_NAME) - .waitingFor(Wait.forLogMessageContaining("Listening for route connections", 1)); - } - - public String getNatsBrokerUrl() { - return String.format( - "%s:%d", - getContainerHost(CONTAINER_NAME), - getContainerPort(CONTAINER_NAME, 4222)); - } +public class NatsTestSupport extends CamelTestSupport { + @RegisterExtension + static NatsService service = NatsServiceFactory.createService(); @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); NatsComponent nats = context.getComponent("nats", NatsComponent.class); - nats.setServers(getNatsBrokerUrl()); + nats.setServers(service.getServiceAddress()); return context; } } diff --git a/test-infra/camel-test-infra-nats/pom.xml b/test-infra/camel-test-infra-nats/pom.xml new file mode 100644 index 0000000..a6916b8 --- /dev/null +++ b/test-infra/camel-test-infra-nats/pom.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>camel-test-infra-parent</artifactId> + <groupId>org.apache.camel</groupId> + <relativePath>../camel-test-infra-parent/pom.xml</relativePath> + <version>3.7.0-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + + <artifactId>camel-test-infra-nats</artifactId> + <name>Camel :: Test Infra :: Nats</name> + + <dependencies> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-infra-common</artifactId> + <version>${project.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>testcontainers</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + </plugin> + </plugins> + </build> + + +</project> \ No newline at end of file diff --git a/test-infra/camel-test-infra-nats/src/main/resources/META-INF/MANIFEST.MF b/test-infra/camel-test-infra-nats/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e69de29 diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/common/NatsProperties.java similarity index 67% copy from components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java copy to test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/common/NatsProperties.java index 3f73f8a..79860b7 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/common/NatsProperties.java @@ -14,13 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.nats; -public final class NatsTestConstants { +package org.apache.camel.test.infra.nats.common; - public static final String CONTAINER_IMAGE = "nats:2.1.9"; +public final class NatsProperties { + public static final String SERVICE_ADDRESS = "nat.service.address"; + public static final String ACCESS_USERNAME = "nats.access.username"; + public static final String ACCESS_PASSWORD = "nats.access.password"; + public static final String ACCESS_TOKEN = "nats.access.token"; - private NatsTestConstants() { - } + private NatsProperties() { + } } diff --git a/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerAuthService.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerAuthService.java new file mode 100644 index 0000000..02cdf95 --- /dev/null +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerAuthService.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.infra.nats.services; + +import org.apache.camel.test.infra.nats.common.NatsProperties; +import org.testcontainers.containers.wait.strategy.Wait; + +public class NatsLocalContainerAuthService extends NatsLocalContainerService { + private static final String USERNAME = "admin"; + private static final String PASSWORD = "password"; + + protected void initContainer(String imageName) { + super.initContainer(imageName); + + getContainer() + .waitingFor(Wait.forLogMessage(".*Server.*is.*ready.*", 1)) + .withCommand("-DV", "--user", USERNAME, "--pass", PASSWORD); + } + + @Override + public void registerProperties() { + super.registerProperties(); + + System.setProperty(NatsProperties.ACCESS_USERNAME, USERNAME); + System.setProperty(NatsProperties.ACCESS_PASSWORD, PASSWORD); + } + + @Override + public String getServiceAddress() { + return String.format("%s:%s@%s:%d", USERNAME, PASSWORD, getHost(), getPort()); + } +} diff --git a/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerAuthTokenService.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerAuthTokenService.java new file mode 100644 index 0000000..7b6e3b5 --- /dev/null +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerAuthTokenService.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.infra.nats.services; + +import org.apache.camel.test.infra.nats.common.NatsProperties; +import org.testcontainers.containers.wait.strategy.Wait; + +public class NatsLocalContainerAuthTokenService extends NatsLocalContainerService { + public static final String TOKEN = "!admin23456"; + + protected void initContainer(String imageName) { + super.initContainer(imageName); + + getContainer() + .waitingFor(Wait.forLogMessage(".*Server.*is.*ready.*", 1)) + .withCommand("-DV", "-auth", TOKEN); + } + + @Override + public void registerProperties() { + super.registerProperties(); + + System.setProperty(NatsProperties.ACCESS_TOKEN, TOKEN); + } + + @Override + public String getServiceAddress() { + return String.format("%s@%s:%d", TOKEN, getHost(), getPort()); + } +} diff --git a/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerService.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerService.java new file mode 100644 index 0000000..6c50c3e --- /dev/null +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerService.java @@ -0,0 +1,88 @@ +/* + * 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.test.infra.nats.services; + +import org.apache.camel.test.infra.common.services.ContainerService; +import org.apache.camel.test.infra.nats.common.NatsProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; + +public class NatsLocalContainerService implements NatsService, ContainerService<GenericContainer> { + public static final String CONTAINER_IMAGE = "nats:2.1.9"; + public static final String CONTAINER_NAME = "nats"; + private static final int PORT = 4222; + + private static final Logger LOG = LoggerFactory.getLogger(NatsLocalContainerService.class); + private GenericContainer container; + + public NatsLocalContainerService() { + String imageName = System.getProperty("nats.container", CONTAINER_IMAGE); + + initContainer(imageName); + } + + public NatsLocalContainerService(String imageName) { + initContainer(imageName); + } + + protected void initContainer(String imageName) { + container = new GenericContainer(imageName) + .withNetworkAliases(CONTAINER_NAME) + .withExposedPorts(PORT) + .waitingFor(Wait.forLogMessage(".*Listening.*for.*route.*connections.*", 1)); + } + + @Override + public void registerProperties() { + System.setProperty(NatsProperties.SERVICE_ADDRESS, getServiceAddress()); + } + + @Override + public void initialize() { + LOG.info("Trying to start the Nats container"); + container.start(); + + registerProperties(); + LOG.info("Nats instance running at {}", getServiceAddress()); + } + + @Override + public void shutdown() { + LOG.info("Stopping the Nats container"); + container.stop(); + } + + @Override + public GenericContainer getContainer() { + return container; + } + + protected String getHost() { + return container.getHost(); + } + + protected int getPort() { + return container.getMappedPort(PORT); + } + + @Override + public String getServiceAddress() { + return String.format("%s:%d", getHost(), getPort()); + } +} diff --git a/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerTLSAuthService.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerTLSAuthService.java new file mode 100644 index 0000000..371beaf --- /dev/null +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerTLSAuthService.java @@ -0,0 +1,37 @@ +/* + * 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.test.infra.nats.services; + +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.wait.strategy.Wait; + +public class NatsLocalContainerTLSAuthService extends NatsLocalContainerService { + /*Certificates used for tests with TLS authentication come from: + *https://github.com/nats-io/jnats/tree/master/src/test/resources */ + protected void initContainer(String imageName) { + super.initContainer(imageName); + + getContainer() + .waitingFor(Wait.forLogMessage(".*Server.*is.*ready.*", 1)) + .withClasspathResourceMapping("org/apache/camel/test/infra/nats/services", "/nats", BindMode.READ_ONLY) + .withCommand("--tls", + "--tlscert=/nats/server.pem", + "--tlskey=/nats/key.pem", + "--tlsverify", + "--tlscacert=/nats/ca.pem"); + } +} diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsRemoteService.java similarity index 61% copy from components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java copy to test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsRemoteService.java index 3f73f8a..0bd880a 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsRemoteService.java @@ -14,13 +14,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.nats; +package org.apache.camel.test.infra.nats.services; -public final class NatsTestConstants { +import org.apache.camel.test.infra.nats.common.NatsProperties; - public static final String CONTAINER_IMAGE = "nats:2.1.9"; +public class NatsRemoteService implements NatsService { - private NatsTestConstants() { + @Override + public void registerProperties() { + // NO-OP } + @Override + public void initialize() { + registerProperties(); + } + + @Override + public void shutdown() { + // NO-OP + } + + @Override + public String getServiceAddress() { + return System.getProperty(NatsProperties.SERVICE_ADDRESS); + } } diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsService.java similarity index 54% copy from components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java copy to test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsService.java index 3f73f8a..4449af5 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsService.java @@ -14,13 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.nats; +package org.apache.camel.test.infra.nats.services; -public final class NatsTestConstants { +import org.apache.camel.test.infra.common.services.TestService; +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.ExtensionContext; - public static final String CONTAINER_IMAGE = "nats:2.1.9"; +/** + * Test infra service for Nats + */ +public interface NatsService extends BeforeAllCallback, AfterAllCallback, TestService { + + String getServiceAddress(); - private NatsTestConstants() { + @Override + default void beforeAll(ExtensionContext extensionContext) throws Exception { + initialize(); } + @Override + default void afterAll(ExtensionContext extensionContext) throws Exception { + shutdown(); + } } diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsServiceFactory.java similarity index 50% rename from components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java rename to test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsServiceFactory.java index 3f73f8a..3f3c89e 100644 --- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTestConstants.java +++ b/test-infra/camel-test-infra-nats/src/test/java/org/apache/camel/test/infra/nats/services/NatsServiceFactory.java @@ -14,13 +14,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.nats; +package org.apache.camel.test.infra.nats.services; -public final class NatsTestConstants { +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; - public static final String CONTAINER_IMAGE = "nats:2.1.9"; +public final class NatsServiceFactory { + private static final Logger LOG = LoggerFactory.getLogger(NatsServiceFactory.class); + + private NatsServiceFactory() { - private NatsTestConstants() { } + public static NatsService createService() { + String instanceType = System.getProperty("nats.instance.type"); + + if (instanceType == null || instanceType.equals("local-nats-container")) { + return new NatsLocalContainerService(); + } + + if (instanceType.equals("remote")) { + return new NatsRemoteService(); + } + + LOG.error("Nats instance must be one of 'local-nats-container' or 'remote"); + throw new UnsupportedOperationException("Invalid Nats instance type"); + } } diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/ca.pem b/test-infra/camel-test-infra-nats/src/test/resources/org/apache/camel/test/infra/nats/services/ca.pem similarity index 100% rename from components/camel-nats/src/test/resources/org/apache/camel/component/nats/ca.pem rename to test-infra/camel-test-infra-nats/src/test/resources/org/apache/camel/test/infra/nats/services/ca.pem diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/key.pem b/test-infra/camel-test-infra-nats/src/test/resources/org/apache/camel/test/infra/nats/services/key.pem similarity index 100% rename from components/camel-nats/src/test/resources/org/apache/camel/component/nats/key.pem rename to test-infra/camel-test-infra-nats/src/test/resources/org/apache/camel/test/infra/nats/services/key.pem diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/server.pem b/test-infra/camel-test-infra-nats/src/test/resources/org/apache/camel/test/infra/nats/services/server.pem similarity index 100% rename from components/camel-nats/src/test/resources/org/apache/camel/component/nats/server.pem rename to test-infra/camel-test-infra-nats/src/test/resources/org/apache/camel/test/infra/nats/services/server.pem diff --git a/test-infra/pom.xml b/test-infra/pom.xml index a297446..7d96ca6 100644 --- a/test-infra/pom.xml +++ b/test-infra/pom.xml @@ -59,5 +59,6 @@ <module>camel-test-infra-hbase</module> <module>camel-test-infra-infinispan</module> <module>camel-test-infra-minio</module> + <module>camel-test-infra-nats</module> </modules> </project>