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

ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/master by this push:
     new 7da7ce7  InfluxDB native support #1036
7da7ce7 is described below

commit 7da7ce71cfb6edd143820ef0324c80beac88013c
Author: JiriOndrusek <ondrusek.j...@gmail.com>
AuthorDate: Wed Apr 8 16:52:29 2020 +0200

    InfluxDB native support #1036
---
 .github/workflows/pr-build.yaml                    |   1 +
 .../pages/list-of-camel-quarkus-extensions.adoc    |   4 +-
 .../influxdb/deployment/InfluxdbProcessor.java     |  47 --------
 .../component/influxdb/it/InfluxdbResource.java    |  51 --------
 extensions-jvm/pom.xml                             |   1 -
 .../influxdb/deployment/pom.xml                    |   4 +
 .../influxdb/deployment/InfluxdbProcessor.java     |  71 +++++++++++
 {extensions-jvm => extensions}/influxdb/pom.xml    |   1 -
 .../influxdb/runtime/pom.xml                       |   4 +
 .../main/resources/META-INF/quarkus-extension.yaml |   6 +-
 extensions/pom.xml                                 |   1 +
 .../influxdb}/pom.xml                              |  64 +++++++++-
 .../component/influxdb/it/InfluxdbResource.java    | 134 +++++++++++++++++++++
 .../camel/quarkus/component/influxdb/it/Point.java |  65 ++++++++++
 .../quarkus/component/influxdb/it/Points.java      |  49 ++++++--
 .../quarkus/component/influxdb/it/InfluxdbIT.java  |  17 +--
 .../component/influxdb/it/InfluxdbTest.java        | 131 ++++++++++++++++++++
 .../influxdb/it/InfluxdbTestResource.java          |  67 +++++++++++
 integration-tests/pom.xml                          |   1 +
 19 files changed, 583 insertions(+), 136 deletions(-)

diff --git a/.github/workflows/pr-build.yaml b/.github/workflows/pr-build.yaml
index f7eda72..2472e4f 100644
--- a/.github/workflows/pr-build.yaml
+++ b/.github/workflows/pr-build.yaml
@@ -208,6 +208,7 @@ jobs:
           - category: SQL
             test-modules: >
               couchdb
+              influxdb
               jdbc
               mongodb
               sql
diff --git a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc 
b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc
index 5f801af..3a85d4c 100644
--- a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc
+++ b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc
@@ -330,8 +330,8 @@ Level | Since | Description
  Stable | 0.2.0 | For reading/writing from/to Infinispan distributed key/value 
store and data grid.
 
 | 
link:https://camel.apache.org/components/latest/influxdb-component.html[InfluxDB]
 (camel-quarkus-influxdb) +
-`influxdb:connectionBean` | JVM +
- Preview | 1.0.0-M6 | The influxdb component allows you to interact with 
InfluxDB, a time series database.
+`influxdb:connectionBean` | Native +
+ Stable | 1.0.0-M6 | The influxdb component allows you to interact with 
InfluxDB, a time series database.
 
 | xref:extensions/websocket-jsr356.adoc[Javax Websocket] 
(camel-quarkus-websocket-jsr356) +
 `websocket-jsr356:uri` | Native +
diff --git 
a/extensions-jvm/influxdb/deployment/src/main/java/org/apache/camel/quarkus/component/influxdb/deployment/InfluxdbProcessor.java
 
b/extensions-jvm/influxdb/deployment/src/main/java/org/apache/camel/quarkus/component/influxdb/deployment/InfluxdbProcessor.java
deleted file mode 100644
index 6af0084..0000000
--- 
a/extensions-jvm/influxdb/deployment/src/main/java/org/apache/camel/quarkus/component/influxdb/deployment/InfluxdbProcessor.java
+++ /dev/null
@@ -1,47 +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.quarkus.component.influxdb.deployment;
-
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.annotations.ExecutionTime;
-import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.pkg.steps.NativeBuild;
-import org.apache.camel.quarkus.core.JvmOnlyRecorder;
-import org.jboss.logging.Logger;
-
-class InfluxdbProcessor {
-    private static final Logger LOG = 
Logger.getLogger(InfluxdbProcessor.class);
-
-    private static final String FEATURE = "camel-influxdb";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-
-    /**
-     * Remove this once this extension starts supporting the native mode.
-     */
-    @BuildStep(onlyIf = NativeBuild.class)
-    @Record(value = ExecutionTime.RUNTIME_INIT)
-    void warnJvmInNative(JvmOnlyRecorder recorder) {
-        JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time
-        recorder.warnJvmInNative(FEATURE); // warn at runtime
-    }
-
-}
diff --git 
a/extensions-jvm/influxdb/integration-test/src/main/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbResource.java
 
b/extensions-jvm/influxdb/integration-test/src/main/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbResource.java
deleted file mode 100644
index 23d07fa..0000000
--- 
a/extensions-jvm/influxdb/integration-test/src/main/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbResource.java
+++ /dev/null
@@ -1,51 +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.quarkus.component.influxdb.it;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.apache.camel.CamelContext;
-import org.jboss.logging.Logger;
-
-@Path("/influxdb")
-@ApplicationScoped
-public class InfluxdbResource {
-
-    private static final Logger LOG = Logger.getLogger(InfluxdbResource.class);
-
-    private static final String COMPONENT_INFLUXDB = "influxdb";
-    @Inject
-    CamelContext context;
-
-    @Path("/load/component/influxdb")
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public Response loadComponentInfluxdb() throws Exception {
-        /* This is an autogenerated test */
-        if (context.getComponent(COMPONENT_INFLUXDB) != null) {
-            return Response.ok().build();
-        }
-        LOG.warnf("Could not load [%s] from the Camel context", 
COMPONENT_INFLUXDB);
-        return Response.status(500, COMPONENT_INFLUXDB + " could not be loaded 
from the Camel context").build();
-    }
-}
diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml
index 0dc9b5f..baf3a27 100644
--- a/extensions-jvm/pom.xml
+++ b/extensions-jvm/pom.xml
@@ -59,7 +59,6 @@
         <module>google-pubsub</module>
         <module>groovy</module>
         <module>grpc</module>
-        <module>influxdb</module>
         <module>kubernetes</module>
         <module>kudu</module>
         <module>mongodb-gridfs</module>
diff --git a/extensions-jvm/influxdb/deployment/pom.xml 
b/extensions/influxdb/deployment/pom.xml
similarity index 94%
rename from extensions-jvm/influxdb/deployment/pom.xml
rename to extensions/influxdb/deployment/pom.xml
index 2d8fcd0..2559e0f 100644
--- a/extensions-jvm/influxdb/deployment/pom.xml
+++ b/extensions/influxdb/deployment/pom.xml
@@ -50,6 +50,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-influxdb</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-support-retrofit-deployment</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/extensions/influxdb/deployment/src/main/java/org/apache/camel/quarkus/component/influxdb/deployment/InfluxdbProcessor.java
 
b/extensions/influxdb/deployment/src/main/java/org/apache/camel/quarkus/component/influxdb/deployment/InfluxdbProcessor.java
new file mode 100644
index 0000000..8df98a7
--- /dev/null
+++ 
b/extensions/influxdb/deployment/src/main/java/org/apache/camel/quarkus/component/influxdb/deployment/InfluxdbProcessor.java
@@ -0,0 +1,71 @@
+/*
+ * 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.quarkus.component.influxdb.deployment;
+
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
+import 
io.quarkus.deployment.builditem.nativeimage.NativeImageProxyDefinitionBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.jboss.jandex.IndexView;
+
+class InfluxdbProcessor {
+
+    private static String INFLUXDB_DTO_PACKAGE = "org.influxdb.dto";
+
+    private static final String FEATURE = "camel-influxdb";
+
+    @BuildStep
+    FeatureBuildItem feature() {
+
+        return new FeatureBuildItem(FEATURE);
+    }
+
+    @BuildStep
+    void sslSupport(BuildProducer<ExtensionSslNativeSupportBuildItem> 
extensionSslNativeSupport) {
+
+        // Indicates that this extension would like the SSL support to be 
enabled
+        extensionSslNativeSupport.produce(new 
ExtensionSslNativeSupportBuildItem(FEATURE));
+    }
+
+    @BuildStep
+    void clientProxies(BuildProducer<NativeImageProxyDefinitionBuildItem> 
proxies) {
+        proxies.produce(new 
NativeImageProxyDefinitionBuildItem("org.influxdb.impl.InfluxDBService"));
+    }
+
+    @BuildStep
+    ReflectiveClassBuildItem registerForReflection(CombinedIndexBuildItem 
combinedIndex) {
+        IndexView index = combinedIndex.getIndex();
+
+        String[] dtos = index.getKnownClasses().stream()
+                .map(ci -> ci.name().toString())
+                .filter(n -> n.startsWith(INFLUXDB_DTO_PACKAGE))
+                .sorted()
+                .toArray(String[]::new);
+
+        return new ReflectiveClassBuildItem(false, true, dtos);
+    }
+
+    @BuildStep
+    IndexDependencyBuildItem registerDependencyForIndex() {
+        return new IndexDependencyBuildItem("org.influxdb", "influxdb-java");
+    }
+
+}
diff --git a/extensions-jvm/influxdb/pom.xml b/extensions/influxdb/pom.xml
similarity index 97%
rename from extensions-jvm/influxdb/pom.xml
rename to extensions/influxdb/pom.xml
index 0582139..0bdfad8 100644
--- a/extensions-jvm/influxdb/pom.xml
+++ b/extensions/influxdb/pom.xml
@@ -33,6 +33,5 @@
     <modules>
         <module>deployment</module>
         <module>runtime</module>
-        <module>integration-test</module>
     </modules>
 </project>
diff --git a/extensions-jvm/influxdb/runtime/pom.xml 
b/extensions/influxdb/runtime/pom.xml
similarity index 95%
rename from extensions-jvm/influxdb/runtime/pom.xml
rename to extensions/influxdb/runtime/pom.xml
index cd6c7d0..fa98fce 100644
--- a/extensions-jvm/influxdb/runtime/pom.xml
+++ b/extensions/influxdb/runtime/pom.xml
@@ -55,6 +55,10 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-influxdb</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-support-retrofit</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/extensions-jvm/influxdb/runtime/src/main/resources/META-INF/quarkus-extension.yaml
 
b/extensions/influxdb/runtime/src/main/resources/META-INF/quarkus-extension.yaml
similarity index 89%
rename from 
extensions-jvm/influxdb/runtime/src/main/resources/META-INF/quarkus-extension.yaml
rename to 
extensions/influxdb/runtime/src/main/resources/META-INF/quarkus-extension.yaml
index d198b0d..157b167 100644
--- 
a/extensions-jvm/influxdb/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ 
b/extensions/influxdb/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -19,10 +19,10 @@
 name: "InfluxDB"
 description: "The influxdb component allows you to interact with InfluxDB, a 
time series database."
 metadata:
-  unlisted: true
   keywords:
+  - "camel"
   - "database"
-  guide: "https://camel.apache.org/components/latest/influxdb-component.html";
+  guide: "https://quarkus.io/guides/camel";
   categories:
   - "integration"
-  status: "preview"
+  status: "stable"
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 5e7598e..031bd6d 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -85,6 +85,7 @@
         <module>hystrix</module>
         <module>ical</module>
         <module>infinispan</module>
+        <module>influxdb</module>
         <module>jackson</module>
         <module>jacksonxml</module>
         <module>jaxb</module>
diff --git a/extensions-jvm/influxdb/integration-test/pom.xml 
b/integration-tests/influxdb/pom.xml
similarity index 57%
rename from extensions-jvm/influxdb/integration-test/pom.xml
rename to integration-tests/influxdb/pom.xml
index 7e4990e..debf42f 100644
--- a/extensions-jvm/influxdb/integration-test/pom.xml
+++ b/integration-tests/influxdb/pom.xml
@@ -17,16 +17,18 @@
     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";>
+<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";>
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-influxdb-parent</artifactId>
+        <artifactId>camel-quarkus-integration-tests</artifactId>
         <version>1.1.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>camel-quarkus-influxdb-integration-test</artifactId>
-    <name>Camel Quarkus :: InfluxDB :: Integration Test</name>
+    <artifactId>camel-quarkus-integration-test-influxdb</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: InfluxDB</name>
     <description>Integration tests for Camel Quarkus InfluxDB 
extension</description>
 
     <properties>
@@ -39,6 +41,18 @@
         
<mvnd.builder.rule>camel-quarkus-influxdb-deployment,camel-quarkus-support-policy-deployment</mvnd.builder.rule>
     </properties>
 
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-bom-test</artifactId>
+                <version>${project.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -48,6 +62,10 @@
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-resteasy-jackson</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
@@ -60,6 +78,13 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            
<artifactId>camel-quarkus-integration-testcontainers-support</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -77,4 +102,35 @@
             </plugin>
         </plugins>
     </build>
+
+    <profiles>
+        <profile>
+            <id>native</id>
+            <activation>
+                <property>
+                    <name>native</name>
+                </property>
+            </activation>
+            <properties>
+                <quarkus.package.type>native</quarkus.package.type>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
 </project>
diff --git 
a/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbResource.java
 
b/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbResource.java
new file mode 100644
index 0000000..ad53101
--- /dev/null
+++ 
b/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbResource.java
@@ -0,0 +1,134 @@
+/*
+ * 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.quarkus.component.influxdb.it;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.influxdb.InfluxDbConstants;
+import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBFactory;
+import org.influxdb.dto.BatchPoints;
+import org.influxdb.dto.Pong;
+import org.influxdb.dto.Query;
+import org.influxdb.dto.QueryResult;
+import org.jboss.logging.Logger;
+
+@Path("/influxdb")
+@ApplicationScoped
+public class InfluxdbResource {
+
+    private static final Logger LOG = Logger.getLogger(InfluxdbResource.class);
+
+    public static final String DB_NAME = "myTestTimeSeries";
+
+    public static final String INFLUXDB_CONNECTION_PROPERTY = 
"quarkus.influxdb.connection.url";
+    public static final String INFLUXDB_VERSION = "1.7.10";
+
+    private static final String INFLUXDB_CONNECTION = "http://{{"; + 
INFLUXDB_CONNECTION_PROPERTY + "}}/";
+    private static final String INFLUXDB_CONNECTION_NAME = 
"influxDb_connection";
+    private static final String INFLUXDB_ENDPOINT_URL = "influxdb:" + 
INFLUXDB_CONNECTION_NAME;
+
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Inject
+    CamelContext context;
+
+    private InfluxDB influxDB;
+
+    void onStart(@Observes 
org.apache.camel.quarkus.core.CamelMainEvents.BeforeConfigure ev) {
+        influxDB = 
InfluxDBFactory.connect(context.getPropertiesComponent().parseUri(INFLUXDB_CONNECTION));
+
+        influxDB.query(new Query("CREATE DATABASE " + DB_NAME));
+
+        context.getRegistry().bind(INFLUXDB_CONNECTION_NAME, influxDB);
+    }
+
+    void beforeStop(@Observes 
org.apache.camel.quarkus.core.CamelMainEvents.BeforeStop ev) {
+        if (influxDB != null) {
+            influxDB.query(new Query("DROP DATABASE " + DB_NAME, ""));
+            influxDB.close();
+        }
+    }
+
+    @Path("/ping")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String ping() {
+        Pong pong = producerTemplate.requestBody(INFLUXDB_ENDPOINT_URL + 
"?operation=ping", null, Pong.class);
+
+        return pong.getVersion();
+    }
+
+    @Path("/insert")
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.TEXT_PLAIN)
+    public boolean insert(Point point) {
+        org.influxdb.dto.Point p = point.toPoint();
+
+        org.influxdb.dto.Point result = producerTemplate.requestBody(
+                INFLUXDB_ENDPOINT_URL + "?databaseName=" + DB_NAME + 
"&operation=insert&retentionPolicy=autogen", p,
+                org.influxdb.dto.Point.class);
+
+        return result != null;
+    }
+
+    @Path("/batch")
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.TEXT_PLAIN)
+    public String batch(Points points) {
+        BatchPoints p = points.toBatchPoints();
+
+        BatchPoints result = 
producerTemplate.requestBody(INFLUXDB_ENDPOINT_URL + "?batch=true", p,
+                BatchPoints.class);
+
+        return String.valueOf(result.getPoints().size());
+    }
+
+    @Path("/query")
+    @POST
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.TEXT_PLAIN)
+    public String query(String query) throws Exception {
+        Exchange exchange = producerTemplate.request(
+                INFLUXDB_ENDPOINT_URL + "?databaseName=" + DB_NAME + 
"&operation=query&retentionPolicy=autogen",
+                e -> e.getIn().setHeader(InfluxDbConstants.INFLUXDB_QUERY, 
query));
+        List<QueryResult.Result> results = 
exchange.getMessage().getBody(QueryResult.class).getResults();
+        return results.stream()
+                .flatMap(r -> r.getSeries() != null ? r.getSeries().stream() : 
null)
+                .map(s -> s.getName())
+                .collect(Collectors.joining(", "));
+
+    }
+
+}
diff --git 
a/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/Point.java
 
b/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/Point.java
new file mode 100644
index 0000000..87b343d
--- /dev/null
+++ 
b/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/Point.java
@@ -0,0 +1,65 @@
+/*
+ * 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.quarkus.component.influxdb.it;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+public class Point {
+
+    private String measurement;
+    private Long time;
+    private Map<String, Long> fields = new HashMap<>();
+
+    public String getMeasurement() {
+        return measurement;
+    }
+
+    public void setMeasurement(String measurement) {
+        this.measurement = measurement;
+    }
+
+    public Long getTime() {
+        return time;
+    }
+
+    public void setTime(Long time) {
+        this.time = time;
+    }
+
+    public Map<String, Long> getFields() {
+        return fields;
+    }
+
+    public void addField(String key, Long value) {
+        this.fields.put(key, value);
+    }
+
+    public void setFields(Map<String, Long> fields) {
+        this.fields = fields;
+    }
+
+    public org.influxdb.dto.Point toPoint() {
+        org.influxdb.dto.Point.Builder pointBuilder = 
org.influxdb.dto.Point.measurement(this.measurement)
+                .time(this.time, TimeUnit.MILLISECONDS);
+
+        this.fields.entrySet().stream().forEach(e -> 
pointBuilder.addField(e.getKey(), e.getValue()));
+
+        return pointBuilder.build();
+    }
+}
diff --git 
a/extensions-jvm/influxdb/integration-test/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
 
b/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/Points.java
similarity index 52%
copy from 
extensions-jvm/influxdb/integration-test/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
copy to 
integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/Points.java
index d5b458c..821e11d 100644
--- 
a/extensions-jvm/influxdb/integration-test/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
+++ 
b/integration-tests/influxdb/src/main/java/org/apache/camel/quarkus/component/influxdb/it/Points.java
@@ -16,19 +16,42 @@
  */
 package org.apache.camel.quarkus.component.influxdb.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class InfluxdbTest {
-
-    @Test
-    public void loadComponentInfluxdb() {
-        /* A simple autogenerated test */
-        RestAssured.get("/influxdb/load/component/influxdb")
-                .then()
-                .statusCode(200);
+import java.util.ArrayList;
+import java.util.List;
+
+import org.influxdb.dto.BatchPoints;
+
+public class Points {
+
+    private String database;
+
+    private List<Point> points = new ArrayList<>();
+
+    public String getDatabase() {
+        return database;
+    }
+
+    public void setDatabase(String database) {
+        this.database = database;
+    }
+
+    public void addPoint(Point point) {
+        this.points.add(point);
+    }
+
+    public List<Point> getPoints() {
+        return points;
+    }
+
+    public void setPoints(List<Point> points) {
+        this.points = points;
     }
 
+    public BatchPoints toBatchPoints() {
+        BatchPoints.Builder batchPoints = BatchPoints.database(this.database);
+
+        points.forEach(p -> batchPoints.point(p.toPoint()));
+
+        return batchPoints.build();
+    }
 }
diff --git 
a/extensions-jvm/influxdb/integration-test/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
 
b/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbIT.java
similarity index 70%
rename from 
extensions-jvm/influxdb/integration-test/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
rename to 
integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbIT.java
index d5b458c..a7a1e21 100644
--- 
a/extensions-jvm/influxdb/integration-test/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
+++ 
b/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbIT.java
@@ -16,19 +16,8 @@
  */
 package org.apache.camel.quarkus.component.influxdb.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class InfluxdbTest {
-
-    @Test
-    public void loadComponentInfluxdb() {
-        /* A simple autogenerated test */
-        RestAssured.get("/influxdb/load/component/influxdb")
-                .then()
-                .statusCode(200);
-    }
+import io.quarkus.test.junit.NativeImageTest;
 
+@NativeImageTest
+class InfluxdbIT extends InfluxdbTest {
 }
diff --git 
a/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
 
b/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
new file mode 100644
index 0000000..86190f7
--- /dev/null
+++ 
b/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTest.java
@@ -0,0 +1,131 @@
+/*
+ * 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.quarkus.component.influxdb.it;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import org.apache.camel.component.influxdb.InfluxDbConstants;
+import org.apache.camel.component.influxdb.converters.CamelInfluxDbConverters;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+@QuarkusTest
+@QuarkusTestResource(InfluxdbTestResource.class)
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+class InfluxdbTest {
+
+    @Test
+    @Order(1)
+    public void pingTest() {
+        
RestAssured.given().get("/influxdb/ping").then().body(is(InfluxdbResource.INFLUXDB_VERSION));
+    }
+
+    @Test
+    @Order(2)
+    public void insertTest() {
+
+        Point point = createBatchPoints().getPoints().get(0);
+        RestAssured.given() //
+                .contentType(ContentType.JSON)
+                .body(point)
+                .post("/influxdb/insert")
+                .then()
+                .statusCode(200)
+                .body(is("true"));
+
+    }
+
+    @Test
+    @Order(3)
+    public void batchInsertTest() {
+
+        Points points = createBatchPoints();
+        RestAssured.given() //
+                .contentType(ContentType.JSON)
+                .body(points)
+                .post("/influxdb/batch")
+                .then()
+                .statusCode(200)
+                .body(is("2"));
+    }
+
+    @Test
+    @Order(4)
+    public void queryTest() {
+        // result should contain only 1 result with name 'cpu', because 'cpu' 
is only part of batchInsert, which was executed before
+        RestAssured.given() //
+                .contentType(ContentType.TEXT)
+                .body("select * from cpu")
+                .post("/influxdb/query")
+                .then()
+                .statusCode(200)
+                .body(is("cpu"));
+    }
+
+    @Test
+    @Order(5)
+    public void doesNotAddCamelHeaders() {
+        Map<String, Object> pointInMapFormat = new HashMap<>();
+        pointInMapFormat.put(InfluxDbConstants.MEASUREMENT_NAME, "testCPU");
+        double value = 99.999999d;
+        pointInMapFormat.put("busy", value);
+
+        org.influxdb.dto.Point p = 
CamelInfluxDbConverters.fromMapToPoint(pointInMapFormat);
+        assertNotNull(p);
+
+        String line = p.lineProtocol();
+
+        assertNotNull(line);
+
+        assertTrue(!line.contains(InfluxDbConstants.MEASUREMENT_NAME));
+
+    }
+
+    private Points createBatchPoints() {
+        Points points = new Points();
+        points.setDatabase(InfluxdbResource.DB_NAME);
+
+        Point point1 = new Point();
+        point1.setMeasurement("disk");
+        point1.setTime(System.currentTimeMillis());
+        point1.addField("idle", 90L);
+        point1.addField("user", 9L);
+        point1.addField("system", 1L);
+
+        Point point2 = new Point();
+        point2.setMeasurement("cpu");
+        point2.setTime(System.currentTimeMillis());
+        point2.addField("used", 8L);
+        point2.addField("free", 1L);
+
+        points.addPoint(point1);
+        points.addPoint(point2);
+
+        return points;
+    }
+}
diff --git 
a/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTestResource.java
 
b/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTestResource.java
new file mode 100644
index 0000000..710de83
--- /dev/null
+++ 
b/integration-tests/influxdb/src/test/java/org/apache/camel/quarkus/component/influxdb/it/InfluxdbTestResource.java
@@ -0,0 +1,67 @@
+/*
+ * 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.quarkus.component.influxdb.it;
+
+import java.util.Map;
+
+import 
org.apache.camel.quarkus.testcontainers.ContainerResourceLifecycleManager;
+import org.apache.camel.util.CollectionHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.utility.TestcontainersConfiguration;
+
+public class InfluxdbTestResource implements ContainerResourceLifecycleManager 
{
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(InfluxdbTestResource.class);
+    private static final int INFLUXDB_PORT = 8086;
+    private static final String INFLUXDB_IMAGE = "influxdb:" + 
InfluxdbResource.INFLUXDB_VERSION;
+
+    private GenericContainer container;
+
+    @Override
+    public Map<String, String> start() {
+        LOGGER.info(TestcontainersConfiguration.getInstance().toString());
+
+        try {
+            container = new GenericContainer(INFLUXDB_IMAGE)
+                    .withExposedPorts(INFLUXDB_PORT)
+                    .waitingFor(Wait.forListeningPort());
+
+            container.start();
+
+            return CollectionHelper.mapOf(
+                    InfluxdbResource.INFLUXDB_CONNECTION_PROPERTY,
+                    container.getContainerIpAddress() + ":" + 
container.getMappedPort(INFLUXDB_PORT));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public void stop() {
+        try {
+            if (container != null) {
+                container.stop();
+            }
+        } catch (Exception e) {
+            // ignored
+        }
+    }
+}
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index f520f90..b116deb 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -84,6 +84,7 @@
         <module>http</module>
         <module>hystrix</module>
         <module>infinispan</module>
+        <module>influxdb</module>
         <module>jaxb</module>
         <module>jdbc</module>
         <module>jira</module>

Reply via email to