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 <pasquale.congiu...@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); }