This is an automated email from the ASF dual-hosted git repository. aldettinger pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 6f54d09c5c Ref #4596: Create jdbc tests for generated keys and other headers 6f54d09c5c is described below commit 6f54d09c5c6a344c69495138cffc30935dd86a12 Author: Lucia Drozdova <ldro...@redhat.com> AuthorDate: Mon Mar 13 09:09:55 2023 +0100 Ref #4596: Create jdbc tests for generated keys and other headers --- integration-tests/jdbc/pom.xml | 11 +++- .../quarkus/component/jdbc/CamelResource.java | 28 ++++++++++ .../camel/quarkus/component/jdbc/JdbcRoutes.java | 48 ++++++++++++++++ .../quarkus/component/jdbc/CamelJdbcTest.java | 65 ++++++++++++++++++++++ 4 files changed, 151 insertions(+), 1 deletion(-) diff --git a/integration-tests/jdbc/pom.xml b/integration-tests/jdbc/pom.xml index d52f85c4a9..209c724663 100644 --- a/integration-tests/jdbc/pom.xml +++ b/integration-tests/jdbc/pom.xml @@ -17,7 +17,8 @@ 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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" + 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> @@ -47,6 +48,14 @@ <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-h2</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-direct</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy-jsonb</artifactId> + </dependency> <!-- test dependencies --> <dependency> diff --git a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java index b54e0a7adf..84ead295cb 100644 --- a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java +++ b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java @@ -19,6 +19,7 @@ package org.apache.camel.quarkus.component.jdbc; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -53,9 +54,11 @@ public class CamelResource { try (Statement statement = con.createStatement()) { try { statement.execute("drop table camels"); + statement.execute("drop table camelsGenerated"); } catch (Exception ignored) { } statement.execute("create table camels (id int primary key, species varchar(255))"); + statement.execute("create table camelsGenerated (id int primary key auto_increment, species varchar(255))"); statement.execute("insert into camels (id, species) values (1, 'Camelus dromedarius')"); statement.execute("insert into camels (id, species) values (2, 'Camelus bactrianus')"); statement.execute("insert into camels (id, species) values (3, 'Camelus ferus')"); @@ -109,4 +112,29 @@ public class CamelResource { public String executeStatement(String statement) throws Exception { return template.requestBody("jdbc:camel-ds", statement, String.class); } + + @Path("/generated-keys/rows") + @GET + @Produces(MediaType.APPLICATION_JSON) + public List generatedKeysRows() throws Exception { + return template.requestBodyAndHeader("direct://get-generated-keys", + "insert into camelsGenerated (species) values ('Camelus testus'), ('Camelus legendarius')", + "CamelRetrieveGeneratedKeys", "true", ArrayList.class); + } + + @Path("/headers/insert") + @GET + @Produces(MediaType.APPLICATION_JSON) + public String headersFromInsertOrUpdate() throws Exception { + return template.requestBodyAndHeader("direct://get-headers", + "insert into camelsGenerated (species) values ('Camelus status'), ('Camelus linus')", + "CamelRetrieveGeneratedKeys", "true", String.class); + } + + @Path("/headers/select") + @GET + @Produces(MediaType.APPLICATION_JSON) + public String headersFromSelect() throws Exception { + return template.requestBody("direct://get-headers", "select * from camelsGenerated", String.class); + } } diff --git a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java new file mode 100644 index 0000000000..843ef19fae --- /dev/null +++ b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java @@ -0,0 +1,48 @@ +/* + * 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.jdbc; + +import jakarta.enterprise.context.ApplicationScoped; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; + +@ApplicationScoped +public class JdbcRoutes extends RouteBuilder { + @Override + public void configure() { + from("direct://get-generated-keys") + .to("jdbc:camel-ds") + .process(new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + Object in = exchange.getIn().getHeader("CamelGeneratedKeysRows"); + exchange.getIn().setBody(in); + } + }); + + from("direct://get-headers") + .to("jdbc:camel-ds") + .process(new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + Object in = exchange.getIn().getHeaders(); + exchange.getIn().setBody(in); + } + }); + } +} diff --git a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java b/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java index f29fefe0f4..45e7255c31 100644 --- a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java +++ b/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java @@ -16,6 +16,8 @@ */ package org.apache.camel.quarkus.component.jdbc; +import java.util.List; + import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.h2.H2DatabaseTestResource; import io.quarkus.test.junit.QuarkusTest; @@ -23,7 +25,10 @@ import io.restassured.RestAssured; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; +import static org.junit.jupiter.api.Assertions.assertTrue; @QuarkusTest @QuarkusTestResource(H2DatabaseTestResource.class) @@ -53,4 +58,64 @@ public class CamelJdbcTest { .post("/test/execute") .then().body(is("[{ID=3}, {ID=2}, {ID=1}]")); } + + @Test + void testCamelRetrieveGeneratedKeysHeader() { + List generatedIDs = RestAssured.given() + .get("test/generated-keys/rows") + .then().extract().body() + .jsonPath().getList("ID"); + + String selectResult = RestAssured.given() + .contentType(ContentType.TEXT).body("select id from camelsGenerated") + .post("/test/execute") + .then().extract().body().asString(); + + generatedIDs.forEach(generatedID -> assertTrue(selectResult.contains(generatedID.toString()))); + } + + @Test + void testHeadersFromInsertOrUpdateQuery() { + RestAssured.given() + .get("test/headers/insert") + .then() + .body(containsString("CamelGeneratedKeysRowCount=2")) + .and() + .body(containsString("CamelJdbcUpdateCount=2")) + .and() + .body(containsString("CamelRetrieveGeneratedKeys=true")) + .and() + .body(not(containsString("CamelJdbcRowCount"))) + .and() + .body(not(containsString("CamelJdbcColumnNames"))) + .and() + .body(not(containsString("CamelJdbcParameters"))) + .and() + .body(not(containsString("CamelGeneratedColumns"))); + } + + @Test + void testHeadersFromSelectQuery() { + RestAssured.given() + .contentType(ContentType.TEXT) + .body("insert into camelsGenerated (species) values ('Camelus status'), ('Camelus linus')") + .post("/test/execute"); + + RestAssured.given() + .get("test/headers/select") + .then() + .body(not(containsString("CamelGeneratedKeysRowCount"))) + .and() + .body(not(containsString("CamelJdbcUpdateCount"))) + .and() + .body(not(containsString("CamelRetrieveGeneratedKeys"))) + .and() + .body(not(containsString("CamelJdbcParameters"))) + .and() + .body(not(containsString("CamelGeneratedColumns"))) + .and() + .body(containsString("CamelJdbcRowCount=2")) + .and() + .body(containsString("CamelJdbcColumnNames=[ID, SPECIES]")); + } }