You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/11/29 15:47:21 UTC

[camel] branch master updated: Migrates camel-hbase to the new test infra (#4700)

This is an automated email from the ASF dual-hosted git repository.

davsclaus 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 0778b5d  Migrates camel-hbase to the new test infra (#4700)
0778b5d is described below

commit 0778b5da220d1502e2e46f84e6cce0d773dc49da
Author: Otavio Rodolfo Piske <or...@users.noreply.github.com>
AuthorDate: Sun Nov 29 16:46:58 2020 +0100

    Migrates camel-hbase to the new test infra (#4700)
---
 components/camel-hbase/pom.xml                     | 50 +++++--------
 .../component/hbase/CamelHBaseTestSupport.java     | 35 ++-------
 .../idempotent/HBaseIdempotentRepositoryTest.java  |  2 +-
 test-infra/camel-test-infra-hbase/pom.xml          | 85 ++++++++++++++++++++++
 .../src/main/resources/META-INF/MANIFEST.MF        |  0
 .../test/infra/hbase/common/HBaseProperties.java   | 25 +++++++
 .../test/infra/hbase/services}/HBaseContainer.java |  2 +-
 .../hbase/services/HBaseLocalContainerService.java | 61 ++++++++++++++++
 .../test/infra/hbase/services/HBaseService.java    | 41 +++++++++++
 .../infra/hbase/services/HBaseServiceFactory.java  | 39 ++++++++++
 test-infra/pom.xml                                 |  1 +
 11 files changed, 279 insertions(+), 62 deletions(-)

diff --git a/components/camel-hbase/pom.xml b/components/camel-hbase/pom.xml
index fe09ec3..09831f9 100644
--- a/components/camel-hbase/pom.xml
+++ b/components/camel-hbase/pom.xml
@@ -58,45 +58,29 @@
         <!-- testing -->
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-testcontainers-junit5</artifactId>
+            <artifactId>camel-test-junit5</artifactId>
             <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
+
+        <!-- test infra -->
         <dependency>
-            <groupId>org.apache.hbase</groupId>
-            <artifactId>hbase-testing-util</artifactId>
-            <version>${hbase-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-common</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
             <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>junit</artifactId>
-                </exclusion>
-                <!-- has SNAPSHOT in its pom.xml that causes maven problems -->
-                <exclusion>
-                    <groupId>org.glassfish</groupId>
-                    <artifactId>javax.el</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-hbase</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
+
+
         <!-- logging -->
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
diff --git a/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/CamelHBaseTestSupport.java b/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/CamelHBaseTestSupport.java
index 2154349..1dd954f 100644
--- a/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/CamelHBaseTestSupport.java
+++ b/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/CamelHBaseTestSupport.java
@@ -17,11 +17,11 @@
 package org.apache.camel.component.hbase;
 
 import java.io.IOException;
-import java.util.concurrent.TimeUnit;
 
-import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport;
+import org.apache.camel.test.infra.hbase.services.HBaseService;
+import org.apache.camel.test.infra.hbase.services.HBaseServiceFactory;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.apache.camel.util.IOHelper;
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.TableExistsException;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.TableNotFoundException;
@@ -34,9 +34,11 @@ import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
-import org.testcontainers.containers.GenericContainer;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-public abstract class CamelHBaseTestSupport extends ContainerAwareTestSupport {
+public abstract class CamelHBaseTestSupport extends CamelTestSupport {
+    @RegisterExtension
+    public static HBaseService service = HBaseServiceFactory.createService();
 
     protected static final String PERSON_TABLE = "person";
     protected static final String INFO_FAMILY = "info";
@@ -61,9 +63,6 @@ public abstract class CamelHBaseTestSupport extends ContainerAwareTestSupport {
             family[1].getBytes(),
             family[2].getBytes() };
 
-    // init container once for a class
-    private GenericContainer cont;
-
     @Override
     @BeforeEach
     public void setUp() throws Exception {
@@ -86,20 +85,6 @@ public abstract class CamelHBaseTestSupport extends ContainerAwareTestSupport {
         super.tearDown();
     }
 
-    @Override
-    protected GenericContainer<?> createContainer() {
-        if (cont == null) {
-            cont = new HBaseContainer();
-        }
-        return cont;
-    }
-
-    @Override
-    protected long containersStartupTimeout() {
-        // on my laptop it takes around 30-60 seconds to start the cluster.
-        return TimeUnit.MINUTES.toSeconds(5);
-    }
-
     protected void putMultipleRows() throws IOException {
         Table table = connectHBase().getTable(TableName.valueOf(PERSON_TABLE.getBytes()));
         for (int r = 0; r < key.length; r++) {
@@ -110,12 +95,8 @@ public abstract class CamelHBaseTestSupport extends ContainerAwareTestSupport {
         IOHelper.close(table);
     }
 
-    protected Configuration getHBaseConfig() {
-        return HBaseContainer.defaultConf();
-    }
-
     protected Connection connectHBase() throws IOException {
-        Connection connection = ConnectionFactory.createConnection(getHBaseConfig());
+        Connection connection = ConnectionFactory.createConnection(service.getConfiguration());
         return connection;
     }
 
diff --git a/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/processor/idempotent/HBaseIdempotentRepositoryTest.java b/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/processor/idempotent/HBaseIdempotentRepositoryTest.java
index e8e3304..799091c 100644
--- a/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/processor/idempotent/HBaseIdempotentRepositoryTest.java
+++ b/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/processor/idempotent/HBaseIdempotentRepositoryTest.java
@@ -38,7 +38,7 @@ public class HBaseIdempotentRepositoryTest extends CamelHBaseTestSupport {
     @Override
     @BeforeEach
     public void setUp() throws Exception {
-        this.repository = new HBaseIdempotentRepository(getHBaseConfig(), PERSON_TABLE, INFO_FAMILY, "mycolumn");
+        this.repository = new HBaseIdempotentRepository(service.getConfiguration(), PERSON_TABLE, INFO_FAMILY, "mycolumn");
         super.setUp();
         try {
             createTable(PERSON_TABLE, INFO_FAMILY);
diff --git a/test-infra/camel-test-infra-hbase/pom.xml b/test-infra/camel-test-infra-hbase/pom.xml
new file mode 100644
index 0000000..76bbb40
--- /dev/null
+++ b/test-infra/camel-test-infra-hbase/pom.xml
@@ -0,0 +1,85 @@
+<?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-hbase</artifactId>
+    <name>Camel :: Test Infra :: HBase</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>
+
+        <dependency>
+            <groupId>org.apache.hbase</groupId>
+            <artifactId>hbase-testing-util</artifactId>
+            <version>${hbase-version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>junit</groupId>
+                    <artifactId>junit</artifactId>
+                </exclusion>
+                <!-- has SNAPSHOT in its pom.xml that causes maven problems -->
+                <exclusion>
+                    <groupId>org.glassfish</groupId>
+                    <artifactId>javax.el</artifactId>
+                </exclusion>
+            </exclusions>
+        </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-hbase/src/main/resources/META-INF/MANIFEST.MF b/test-infra/camel-test-infra-hbase/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e69de29
diff --git a/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/common/HBaseProperties.java b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/common/HBaseProperties.java
new file mode 100644
index 0000000..93a0440
--- /dev/null
+++ b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/common/HBaseProperties.java
@@ -0,0 +1,25 @@
+/*
+ * 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.hbase.common;
+
+public final class HBaseProperties {
+
+    private HBaseProperties() {
+
+    }
+}
diff --git a/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/HBaseContainer.java b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseContainer.java
similarity index 97%
rename from components/camel-hbase/src/test/java/org/apache/camel/component/hbase/HBaseContainer.java
rename to test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseContainer.java
index c567773..934c22f 100644
--- a/components/camel-hbase/src/test/java/org/apache/camel/component/hbase/HBaseContainer.java
+++ b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseContainer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.hbase;
+package org.apache.camel.test.infra.hbase.services;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
diff --git a/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseLocalContainerService.java b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseLocalContainerService.java
new file mode 100644
index 0000000..42e1454
--- /dev/null
+++ b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseLocalContainerService.java
@@ -0,0 +1,61 @@
+/*
+ * 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.hbase.services;
+
+import org.apache.camel.test.infra.common.services.ContainerService;
+import org.apache.hadoop.conf.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HBaseLocalContainerService implements HBaseService, ContainerService<HBaseContainer> {
+    private static final Logger LOG = LoggerFactory.getLogger(HBaseLocalContainerService.class);
+
+    private HBaseContainer container;
+
+    public HBaseLocalContainerService() {
+        container = new HBaseContainer();
+    }
+
+    @Override
+    public void registerProperties() {
+        // NO-OP
+    }
+
+    @Override
+    public void initialize() {
+        LOG.info("Trying to start the HBase container");
+        container.start();
+
+        registerProperties();
+    }
+
+    @Override
+    public void shutdown() {
+        LOG.info("Stopping the HBase container");
+        container.stop();
+    }
+
+    @Override
+    public HBaseContainer getContainer() {
+        return container;
+    }
+
+    @Override
+    public Configuration getConfiguration() {
+        return HBaseContainer.defaultConf();
+    }
+}
diff --git a/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseService.java b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseService.java
new file mode 100644
index 0000000..858efb1
--- /dev/null
+++ b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseService.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.hbase.services;
+
+import org.apache.camel.test.infra.common.services.TestService;
+import org.apache.hadoop.conf.Configuration;
+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 HBase
+ */
+public interface HBaseService extends BeforeAllCallback, AfterAllCallback, TestService {
+
+    Configuration getConfiguration();
+
+    @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-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseServiceFactory.java b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseServiceFactory.java
new file mode 100644
index 0000000..954140c
--- /dev/null
+++ b/test-infra/camel-test-infra-hbase/src/test/java/org/apache/camel/test/infra/hbase/services/HBaseServiceFactory.java
@@ -0,0 +1,39 @@
+/*
+ * 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.hbase.services;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class HBaseServiceFactory {
+    private static final Logger LOG = LoggerFactory.getLogger(HBaseServiceFactory.class);
+
+    private HBaseServiceFactory() {
+
+    }
+
+    public static HBaseService createService() {
+        String instanceType = System.getProperty("hbase.instance.type");
+
+        if (instanceType == null || instanceType.equals("local-hbase-container")) {
+            return new HBaseLocalContainerService();
+        }
+
+        LOG.error("HBase instance must be one of 'local-hbase-container' or 'remote");
+        throw new UnsupportedOperationException("Invalid HBase instance type");
+    }
+}
diff --git a/test-infra/pom.xml b/test-infra/pom.xml
index 919b88d..7a88e8f 100644
--- a/test-infra/pom.xml
+++ b/test-infra/pom.xml
@@ -56,5 +56,6 @@
         <module>camel-test-infra-consul</module>
         <module>camel-test-infra-google-pubsub</module>
         <module>camel-test-infra-etcd</module>
+        <module>camel-test-infra-hbase</module>
     </modules>
 </project>