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);
}