You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2020/09/22 10:48:47 UTC

[camel-quarkus] 03/03: feat(mongodb): add test for named client connection

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

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

commit 4e464708a5b646cbfc2817cd922f6b2d11a63068
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Tue Sep 22 11:24:00 2020 +0200

    feat(mongodb): add test for named client connection
    
    * Included parameterized test to test with either a named or a default MongoDB client connection
    
    Ref #1608
---
 .../component/mongodb/it/MongoDbResource.java      | 25 +++++++++++++++----
 .../mongodb/it/MongodbGridfsResource.java          | 29 +++++++++++++++++-----
 .../quarkus/component/mongodb/it/MongoDbTest.java  | 19 ++++++++++----
 .../component/mongodb/it/MongoDbTestResource.java  |  2 ++
 .../component/mongodb/it/MongodbGridfsTest.java    | 23 +++++++++++------
 5 files changed, 74 insertions(+), 24 deletions(-)

diff --git a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
index c859969..43abfe3 100644
--- a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
+++ b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
@@ -27,6 +27,7 @@ import javax.json.JsonArrayBuilder;
 import javax.json.JsonObjectBuilder;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -34,25 +35,37 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoCursor;
 import com.mongodb.client.MongoIterable;
+import io.quarkus.mongodb.MongoClientName;
 import org.apache.camel.ProducerTemplate;
 import org.bson.Document;
 
 @Path("/mongodb")
 @ApplicationScoped
 public class MongoDbResource {
+
+    static final String DEFAULT_MONGO_CLIENT_NAME = "camelMongoClient";
+    static final String NAMED_MONGO_CLIENT_NAME = "myMongoClient";
+
+    @Inject
+    @MongoClientName(value = NAMED_MONGO_CLIENT_NAME)
+    MongoClient namedMongoClient;
+
     @Inject
     ProducerTemplate producerTemplate;
 
     @POST
     @Path("/collection/{collectionName}")
     @Consumes(MediaType.APPLICATION_JSON)
-    public Response writeToCollection(@PathParam("collectionName") String collectionName, String content)
+    public Response writeToCollection(@PathParam("collectionName") String collectionName, String content,
+            @HeaderParam("mongoClientName") String mongoClientName)
             throws URISyntaxException {
 
         producerTemplate.sendBody(
-                "mongodb:camelMongoClient?database=test&collection=" + collectionName + "&operation=insert&dynamicity=true",
+                String.format("mongodb:%s?database=test&collection=%s&operation=insert&dynamicity=true",
+                        mongoClientName, collectionName),
                 content);
 
         return Response
@@ -64,12 +77,14 @@ public class MongoDbResource {
     @Path("/collection/{collectionName}")
     @Produces(MediaType.APPLICATION_JSON)
     @SuppressWarnings("unchecked")
-    public JsonArray getCollection(@PathParam("collectionName") String collectionName) {
+    public JsonArray getCollection(@PathParam("collectionName") String collectionName,
+            @HeaderParam("mongoClientName") String mongoClientName) {
         JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
 
         MongoIterable<Document> iterable = producerTemplate.requestBody(
-                "mongodb:camelMongoClient?database=test&collection=" + collectionName
-                        + "&operation=findAll&dynamicity=true&outputType=MongoIterable",
+                String.format(
+                        "mongodb:%s?database=test&collection=%s&operation=findAll&dynamicity=true&outputType=MongoIterable",
+                        mongoClientName, collectionName),
                 null, MongoIterable.class);
 
         MongoCursor<Document> iterator = iterable.iterator();
diff --git a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java
index 00a06d5..2156141 100644
--- a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java
+++ b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -31,6 +32,8 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import com.mongodb.MongoGridFSException;
+import com.mongodb.client.MongoClient;
+import io.quarkus.mongodb.MongoClientName;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mongodb.gridfs.GridFsEndpoint;
@@ -38,18 +41,27 @@ import org.apache.camel.component.mongodb.gridfs.GridFsEndpoint;
 @Path("/mongodb-gridfs")
 public class MongodbGridfsResource {
 
+    static final String DEFAULT_MONGO_CLIENT_NAME = "camelMongoClient";
+    static final String NAMED_MONGO_CLIENT_NAME = "myMongoClient";
+
+    @Inject
+    @MongoClientName(value = NAMED_MONGO_CLIENT_NAME)
+    MongoClient namedMongoClient;
+
     @Inject
     ProducerTemplate producerTemplate;
 
     @Path("/upload/{fileName}")
     @POST
     @Produces(MediaType.TEXT_PLAIN)
-    public Response uploadFile(@PathParam("fileName") String fileName, String content) throws Exception {
+    public Response uploadFile(@PathParam("fileName") String fileName, String content,
+            @HeaderParam("mongoClientName") String mongoClientName) throws Exception {
         Map<String, Object> headers = new HashMap<>();
         headers.put(Exchange.FILE_NAME, fileName);
         headers.put(Exchange.CONTENT_TYPE, "text/plain");
 
-        Exchange result = producerTemplate.request("mongodb-gridfs:camelMongoClient?database=test&operation=create",
+        Exchange result = producerTemplate.request(
+                String.format("mongodb-gridfs:%s?database=test&operation=create", mongoClientName),
                 exchange -> {
                     exchange.getMessage().setHeaders(headers);
                     exchange.getMessage().setBody(content);
@@ -64,10 +76,12 @@ public class MongodbGridfsResource {
     @Path("/get/{fileName}")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
-    public Response retrieveFile(@PathParam("fileName") String fileName) {
+    public Response retrieveFile(@PathParam("fileName") String fileName,
+            @HeaderParam("mongoClientName") String mongoClientName) {
         String result = null;
         try {
-            result = producerTemplate.requestBodyAndHeader("mongodb-gridfs:camelMongoClient?database=test&operation=findOne",
+            result = producerTemplate.requestBodyAndHeader(
+                    String.format("mongodb-gridfs:%s?database=test&operation=findOne", mongoClientName),
                     null,
                     Exchange.FILE_NAME, fileName, String.class);
         } catch (Exception e) {
@@ -80,8 +94,11 @@ public class MongodbGridfsResource {
 
     @Path("/delete/{fileName}")
     @DELETE
-    public Response deleteFile(@PathParam("fileName") String fileName) {
-        producerTemplate.requestBodyAndHeader("mongodb-gridfs:camelMongoClient?database=test&operation=remove", null,
+    public Response deleteFile(@PathParam("fileName") String fileName,
+            @HeaderParam("mongoClientName") String mongoClientName) {
+        producerTemplate.requestBodyAndHeader(
+                String.format("mongodb-gridfs:camelMongoClient?database=test&operation=remove", mongoClientName),
+                null,
                 Exchange.FILE_NAME,
                 fileName);
         return Response.noContent().build();
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
index 4ed13a7..d30e40e 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
@@ -24,25 +24,34 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import io.restassured.path.json.JsonPath;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @QuarkusTest
 @QuarkusTestResource(MongoDbTestResource.class)
 class MongoDbTest {
-    @Test
-    public void testMongoDbComponent() {
+    @ParameterizedTest
+    @ValueSource(strings = { MongoDbResource.DEFAULT_MONGO_CLIENT_NAME, MongoDbResource.NAMED_MONGO_CLIENT_NAME })
+    public void testMongoDbComponent(String namedClient) {
+        // As we will create a route for each client, we use a different collection for each route
+        String collectionName = String.format("%sCamelTest", namedClient);
+
         // Write to collection
         RestAssured.given()
                 .contentType(ContentType.JSON)
                 .body("{message:\"Hello Camel Quarkus Mongo DB\"}")
-                .post("/mongodb/collection/camelTest")
+                .header("mongoClientName", namedClient)
+                .post("/mongodb/collection/" + collectionName)
                 .then()
                 .statusCode(201);
 
         // Retrieve from collection
-        JsonPath jsonPath = RestAssured.get("/mongodb/collection/camelTest")
+        JsonPath jsonPath = RestAssured
+                .given()
+                .header("mongoClientName", namedClient)
+                .get("/mongodb/collection/" + collectionName)
                 .then()
                 .contentType(ContentType.JSON)
                 .statusCode(200)
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
index cbbf45d..729ac8c 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
@@ -47,6 +47,8 @@ public class MongoDbTestResource implements ContainerResourceLifecycleManager {
 
             return CollectionHelper.mapOf(
                     "quarkus.mongodb.hosts",
+                    container.getContainerIpAddress() + ":" + container.getMappedPort(MONGODB_PORT).toString(),
+                    "quarkus.mongodb." + MongoDbResource.NAMED_MONGO_CLIENT_NAME + ".hosts",
                     container.getContainerIpAddress() + ":" + container.getMappedPort(MONGODB_PORT).toString());
         } catch (Exception e) {
             throw new RuntimeException(e);
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java
index 4aef1e9..0f7bea9 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java
@@ -21,7 +21,8 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.hamcrest.Matchers.is;
 
@@ -29,15 +30,18 @@ import static org.hamcrest.Matchers.is;
 @QuarkusTestResource(MongoDbTestResource.class)
 class MongodbGridfsTest {
 
-    @Test
-    public void testMongodbGridfsComponent() {
-        final String fileContent = "Hello Camel Quarkus MongoDB GridFS";
+    @ParameterizedTest
+    @ValueSource(strings = { MongodbGridfsResource.DEFAULT_MONGO_CLIENT_NAME, MongodbGridfsResource.NAMED_MONGO_CLIENT_NAME })
+    public void testMongodbGridfsComponent(String namedClient) {
+        final String fileContent = "Hello Camel Quarkus MongoDB GridFS [" + namedClient + "]";
+        final String fileName = namedClient + "-test.txt";
 
         // Upload file
         String objectId = RestAssured.given()
                 .contentType(ContentType.TEXT)
                 .body(fileContent)
-                .post("/mongodb-gridfs/upload/test.txt")
+                .header("mongoClientName", namedClient)
+                .post("/mongodb-gridfs/upload/" + fileName)
                 .then()
                 .statusCode(201)
                 .extract()
@@ -48,20 +52,23 @@ class MongodbGridfsTest {
 
         // Retrieve file
         RestAssured.given()
-                .get("/mongodb-gridfs/get/test.txt")
+                .header("mongoClientName", namedClient)
+                .get("/mongodb-gridfs/get/" + fileName)
                 .then()
                 .statusCode(200)
                 .body(is(fileContent));
 
         // Delete file
         RestAssured.given()
-                .delete("/mongodb-gridfs/delete/test.txt")
+                .header("mongoClientName", namedClient)
+                .delete("/mongodb-gridfs/delete/" + fileName)
                 .then()
                 .statusCode(204);
 
         // Verify file deletion
         RestAssured.given()
-                .get("/mongodb-gridfs/get/test.txt")
+                .header("mongoClientName", namedClient)
+                .get("/mongodb-gridfs/get/" + fileName)
                 .then()
                 .statusCode(404);
     }