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 8adbb77  Migrates camel-nsq to the new test infra (#4710)
8adbb77 is described below

commit 8adbb7723e0f2351cbc3b2830222ac43b0f05da2
Author: Otavio Rodolfo Piske <orpi...@users.noreply.github.com>
AuthorDate: Wed Dec 2 12:35:30 2020 +0100

    Migrates camel-nsq to the new test infra (#4710)
---
 components/camel-nsq/pom.xml                       |  20 +++-
 .../apache/camel/component/nsq/NsqTestSupport.java |  50 ++--------
 test-infra/camel-test-infra-nsq/pom.xml            |  60 ++++++++++++
 .../src/main/resources/META-INF/MANIFEST.MF        |   0
 .../camel/test/infra/nsq/common/NsqProperties.java |  27 ++++++
 .../nsq/services/NsqLocalContainerService.java     | 102 +++++++++++++++++++++
 .../test/infra/nsq/services/NsqRemoteService.java  |  47 ++++++++++
 .../camel/test/infra/nsq/services/NsqService.java  |  41 +++++++++
 .../test/infra/nsq/services/NsqServiceFactory.java |  43 +++++++++
 test-infra/pom.xml                                 |   1 +
 10 files changed, 346 insertions(+), 45 deletions(-)

diff --git a/components/camel-nsq/pom.xml b/components/camel-nsq/pom.xml
index 70e8289..a48a01f 100644
--- a/components/camel-nsq/pom.xml
+++ b/components/camel-nsq/pom.xml
@@ -49,15 +49,27 @@
             <artifactId>camel-test-junit5</artifactId>
             <scope>test</scope>
         </dependency>
+        <!-- logging -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- test infra -->
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-testcontainers-junit5</artifactId>
+            <artifactId>camel-test-infra-common</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
             <scope>test</scope>
         </dependency>
-        <!-- logging -->
+
         <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-slf4j-impl</artifactId>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-nsq</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqTestSupport.java
 
b/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqTestSupport.java
index 0fc8c69..0dca974 100644
--- 
a/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqTestSupport.java
+++ 
b/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqTestSupport.java
@@ -16,52 +16,20 @@
  */
 package org.apache.camel.component.nsq;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import org.apache.camel.test.infra.nsq.services.NsqService;
+import org.apache.camel.test.infra.nsq.services.NsqServiceFactory;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport;
-import org.apache.camel.test.testcontainers.junit5.Wait;
-import org.testcontainers.containers.FixedHostPortGenericContainer;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.Network;
-
-public class NsqTestSupport extends ContainerAwareTestSupport {
-
-    public static final String CONTAINER_NSQLOOKUPD_IMAGE = "nsqio/nsq:v1.2.0";
-    public static final String CONTAINER_NSQLOOKUPD_NAME = "nsqlookupd";
-
-    public static final String CONTAINER_NSQD_IMAGE = "nsqio/nsq:v1.2.0";
-    public static final String CONTAINER_NSQD_NAME = "nsqd";
-
-    Network network;
-
-    @Override
-    protected List<GenericContainer<?>> createContainers() {
-        network = Network.newNetwork();
-        return new ArrayList<>(Arrays.asList(nsqlookupdContainer(network), 
nsqdContainer(network)));
-    }
-
-    public static GenericContainer<?> nsqlookupdContainer(Network network) {
-        return new 
FixedHostPortGenericContainer<>(CONTAINER_NSQLOOKUPD_IMAGE).withFixedExposedPort(4160,
 4160)
-                .withFixedExposedPort(4161, 4161)
-                
.withNetworkAliases(CONTAINER_NSQLOOKUPD_NAME).withCommand("/nsqlookupd").withNetwork(network)
-                .waitingFor(Wait.forLogMessageContaining("TCP: listening on", 
1));
-    }
-
-    public static GenericContainer<?> nsqdContainer(Network network) {
-        return new 
FixedHostPortGenericContainer<>(CONTAINER_NSQD_IMAGE).withFixedExposedPort(4150,
 4150)
-                .withFixedExposedPort(4151, 
4151).withNetworkAliases(CONTAINER_NSQD_NAME)
-                .withCommand(String.format("/nsqd --broadcast-address=%s 
--lookupd-tcp-address=%s:4160", "localhost",
-                        CONTAINER_NSQLOOKUPD_NAME))
-                
.withNetwork(network).waitingFor(Wait.forLogMessageContaining("TCP: listening 
on", 1));
-    }
+public class NsqTestSupport extends CamelTestSupport {
+    @RegisterExtension
+    static NsqService service = NsqServiceFactory.createService();
 
     public String getNsqConsumerUrl() {
-        return String.format("%s:%d", "localhost", 4161);
+        return service.getNsqConsumerUrl();
     }
 
     public String getNsqProducerUrl() {
-        return String.format("%s:%d", "localhost", 4150);
+        return service.getNsqProducerUrl();
     }
 }
diff --git a/test-infra/camel-test-infra-nsq/pom.xml 
b/test-infra/camel-test-infra-nsq/pom.xml
new file mode 100644
index 0000000..b98d43e
--- /dev/null
+++ b/test-infra/camel-test-infra-nsq/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-nsq</artifactId>
+    <name>Camel :: Test Infra :: Nsq</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-nsq/src/main/resources/META-INF/MANIFEST.MF 
b/test-infra/camel-test-infra-nsq/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e69de29
diff --git 
a/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/common/NsqProperties.java
 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/common/NsqProperties.java
new file mode 100644
index 0000000..724d12a
--- /dev/null
+++ 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/common/NsqProperties.java
@@ -0,0 +1,27 @@
+/*
+ * 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.nsq.common;
+
+public final class NsqProperties {
+    public static final String PRODUCER_URL = "nsq.producer.url";
+    public static final String CONSUMER_URL = "nsq.consumer.url";
+
+    private NsqProperties() {
+
+    }
+}
diff --git 
a/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqLocalContainerService.java
 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqLocalContainerService.java
new file mode 100644
index 0000000..e4ceb75
--- /dev/null
+++ 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqLocalContainerService.java
@@ -0,0 +1,102 @@
+/*
+ * 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.nsq.services;
+
+import org.apache.camel.test.infra.common.services.ContainerService;
+import org.apache.camel.test.infra.nsq.common.NsqProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.FixedHostPortGenericContainer;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+import org.testcontainers.containers.wait.strategy.Wait;
+
+public class NsqLocalContainerService implements NsqService, 
ContainerService<GenericContainer> {
+    protected static final String CONTAINER_NSQLOOKUPD_IMAGE = 
"nsqio/nsq:v1.2.0";
+    protected static final String CONTAINER_NSQLOOKUPD_NAME = "nsqlookupd";
+
+    protected static final String CONTAINER_NSQD_IMAGE = "nsqio/nsq:v1.2.0";
+    protected static final String CONTAINER_NSQD_NAME = "nsqd";
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(NsqLocalContainerService.class);
+
+    private GenericContainer nsqContainer;
+    private GenericContainer nsqLookupContainer;
+    private Network network = Network.newNetwork();
+
+    public NsqLocalContainerService() {
+        initContainers();
+    }
+
+    protected void initContainers() {
+        nsqLookupContainer = new 
FixedHostPortGenericContainer<>(CONTAINER_NSQLOOKUPD_IMAGE)
+                .withFixedExposedPort(4160, 4160)
+                .withFixedExposedPort(4161, 4161)
+                .withNetworkAliases(CONTAINER_NSQLOOKUPD_NAME)
+                .withCommand("/nsqlookupd").withNetwork(network)
+                .waitingFor(Wait.forLogMessage(".*TCP: listening on.*", 1));
+
+        nsqContainer = new 
FixedHostPortGenericContainer<>(CONTAINER_NSQD_IMAGE)
+                .withFixedExposedPort(4150, 4150)
+                .withFixedExposedPort(4151, 4151)
+                .withNetworkAliases(CONTAINER_NSQD_NAME)
+                .withCommand(String.format("/nsqd --broadcast-address=%s 
--lookupd-tcp-address=%s:4160", "localhost",
+                        CONTAINER_NSQLOOKUPD_NAME))
+                .withNetwork(network)
+                .waitingFor(Wait.forLogMessage(".*TCP: listening on.*", 1));
+    }
+
+    @Override
+    public void registerProperties() {
+        System.getProperty(NsqProperties.PRODUCER_URL, getNsqProducerUrl());
+        System.getProperty(NsqProperties.CONSUMER_URL, getNsqConsumerUrl());
+    }
+
+    @Override
+    public void initialize() {
+        LOG.info("Trying to start the Nsq container");
+        nsqLookupContainer.start();
+        nsqContainer.start();
+
+        registerProperties();
+
+        LOG.info("Nsq producer accessible via {}", getNsqProducerUrl());
+        LOG.info("Nsq consumer accessible via {}", getNsqConsumerUrl());
+    }
+
+    @Override
+    public void shutdown() {
+        LOG.info("Stopping the Nsq container");
+        nsqContainer.stop();
+        nsqLookupContainer.stop();
+    }
+
+    @Override
+    public GenericContainer getContainer() {
+        return nsqContainer;
+    }
+
+    @Override
+    public String getNsqProducerUrl() {
+        return String.format("%s:%d", nsqContainer.getHost(), 
nsqContainer.getMappedPort(4150));
+    }
+
+    @Override
+    public String getNsqConsumerUrl() {
+        return String.format("%s:%d", nsqLookupContainer.getHost(), 
nsqLookupContainer.getMappedPort(4161));
+    }
+}
diff --git 
a/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqRemoteService.java
 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqRemoteService.java
new file mode 100644
index 0000000..611b452
--- /dev/null
+++ 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqRemoteService.java
@@ -0,0 +1,47 @@
+/*
+ * 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.nsq.services;
+
+import org.apache.camel.test.infra.nsq.common.NsqProperties;
+
+public class NsqRemoteService implements NsqService {
+
+    @Override
+    public void registerProperties() {
+        // NO-OP
+    }
+
+    @Override
+    public void initialize() {
+        registerProperties();
+    }
+
+    @Override
+    public void shutdown() {
+        // NO-OP
+    }
+
+    @Override
+    public String getNsqProducerUrl() {
+        return System.getProperty(NsqProperties.PRODUCER_URL);
+    }
+
+    @Override
+    public String getNsqConsumerUrl() {
+        return System.getProperty(NsqProperties.CONSUMER_URL);
+    }
+}
diff --git 
a/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqService.java
 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqService.java
new file mode 100644
index 0000000..38c2770
--- /dev/null
+++ 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqService.java
@@ -0,0 +1,41 @@
+/*
+ * 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.nsq.services;
+
+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;
+
+/**
+ * Test infra service for Nsq
+ */
+public interface NsqService extends BeforeAllCallback, AfterAllCallback, 
TestService {
+    String getNsqProducerUrl();
+
+    String getNsqConsumerUrl();
+
+    @Override
+    default void beforeAll(ExtensionContext extensionContext) throws Exception 
{
+        initialize();
+    }
+
+    @Override
+    default void afterAll(ExtensionContext extensionContext) throws Exception {
+        shutdown();
+    }
+}
diff --git 
a/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqServiceFactory.java
 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqServiceFactory.java
new file mode 100644
index 0000000..f163190
--- /dev/null
+++ 
b/test-infra/camel-test-infra-nsq/src/test/java/org/apache/camel/test/infra/nsq/services/NsqServiceFactory.java
@@ -0,0 +1,43 @@
+/*
+ * 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.nsq.services;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class NsqServiceFactory {
+    private static final Logger LOG = 
LoggerFactory.getLogger(NsqServiceFactory.class);
+
+    private NsqServiceFactory() {
+
+    }
+
+    public static NsqService createService() {
+        String instanceType = System.getProperty("nsq.instance.type");
+
+        if (instanceType == null || 
instanceType.equals("local-nsq-container")) {
+            return new NsqLocalContainerService();
+        }
+
+        if (instanceType.equals("remote")) {
+            return new NsqRemoteService();
+        }
+
+        LOG.error("Nsq instance must be one of 'local-nsq-container' or 
'remote");
+        throw new UnsupportedOperationException("Invalid Nsq instance type");
+    }
+}
diff --git a/test-infra/pom.xml b/test-infra/pom.xml
index 7d96ca6..81b5f83 100644
--- a/test-infra/pom.xml
+++ b/test-infra/pom.xml
@@ -60,5 +60,6 @@
         <module>camel-test-infra-infinispan</module>
         <module>camel-test-infra-minio</module>
         <module>camel-test-infra-nats</module>
+        <module>camel-test-infra-nsq</module>
     </modules>
 </project>

Reply via email to