This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit f7abb3e9827cd03da6f83bb403a0855ba494cd11 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Tue Mar 5 09:48:35 2024 +0000 Add additional Servlet test coverage --- .../quarkus/component/servlet/CamelRoute.java | 26 +++++- .../quarkus/component/servlet/CustomException.java | 28 +++++++ .../src/main/resources/application.properties | 6 ++ .../component/servlet/CamelServletTest.java | 97 ++++++++++++++++++++-- 4 files changed, 148 insertions(+), 9 deletions(-) diff --git a/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CamelRoute.java b/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CamelRoute.java index 6c8c117c35..2ca381f295 100644 --- a/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CamelRoute.java +++ b/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CamelRoute.java @@ -44,10 +44,34 @@ public class CamelRoute extends RouteBuilder { .to("direct:echoMethodPath") .post("/rest-post") + .to("direct:echoMethodPath") + + .put("/rest-put") + .to("direct:echoMethodPath") + + .patch("/rest-patch") + .to("direct:echoMethodPath") + + .delete("/rest-delete") + .to("direct:echoMethodPath") + + .head("/rest-head") .to("direct:echoMethodPath"); from("servlet://hello?matchOnUriPrefix=true") - .setBody(constant("GET: /hello")); + .to("direct:echoMethodPath"); + + from("servlet://options?servletName=options-method-servlet&optionsEnabled=true") + .to("direct:echoMethodPath"); + + from("servlet://trace?servletName=trace-method-servlet&traceEnabled=true") + .to("direct:echoMethodPath"); + + from("servlet://transfer/exception?transferException=true&muteException=false") + .throwException(new CustomException()); + + from("servlet://params") + .setBody().simple("${header.prefix} ${header.suffix}"); from("servlet://configuration") .process(servletConfigInfoProcessor); diff --git a/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CustomException.java b/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CustomException.java new file mode 100644 index 0000000000..33fb3db78d --- /dev/null +++ b/integration-tests/servlet/src/main/java/org/apache/camel/quarkus/component/servlet/CustomException.java @@ -0,0 +1,28 @@ +/* + * 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.servlet; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection(serialization = true) +public class CustomException extends Exception { + public static final String MESSAGE = "Something went wrong"; + + public CustomException() { + super(MESSAGE); + } +} diff --git a/integration-tests/servlet/src/main/resources/application.properties b/integration-tests/servlet/src/main/resources/application.properties index 06920af73f..76be5f65b3 100644 --- a/integration-tests/servlet/src/main/resources/application.properties +++ b/integration-tests/servlet/src/main/resources/application.properties @@ -15,6 +15,9 @@ ## limitations under the License. ## --------------------------------------------------------------------------- +# For transferException +quarkus.camel.native.reflection.serialization-enabled=true + # Default servlet configuration quarkus.camel.servlet.url-patterns=/folder-1/*,/folder-2/*,/debug/* @@ -51,3 +54,6 @@ quarkus.camel.servlet.custom-executor-servlet.url-patterns=/custom-executor/* quarkus.camel.servlet.custom-executor-servlet.async=true quarkus.camel.servlet.custom-executor-servlet.executor-ref=customServletExecutor +# Servlet to allow OPTIONS & TRACE +quarkus.camel.servlet.options-method-servlet.url-patterns=/method-options/* +quarkus.camel.servlet.trace-method-servlet.url-patterns=/method-trace/* diff --git a/integration-tests/servlet/src/test/java/org/apache/camel/quarkus/component/servlet/CamelServletTest.java b/integration-tests/servlet/src/test/java/org/apache/camel/quarkus/component/servlet/CamelServletTest.java index 73bdd78dbe..b87966872b 100644 --- a/integration-tests/servlet/src/test/java/org/apache/camel/quarkus/component/servlet/CamelServletTest.java +++ b/integration-tests/servlet/src/test/java/org/apache/camel/quarkus/component/servlet/CamelServletTest.java @@ -16,11 +16,18 @@ */ package org.apache.camel.quarkus.component.servlet; +import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; +import org.apache.camel.CamelContext; +import org.apache.camel.http.common.HttpHelper; +import org.apache.camel.impl.DefaultCamelContext; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import static org.hamcrest.Matchers.anEmptyMap; import static org.hamcrest.Matchers.is; @@ -28,6 +35,9 @@ import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.oneOf; import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; @QuarkusTest public class CamelServletTest { @@ -42,22 +52,72 @@ public class CamelServletTest { "loadOnStartup", nullValue()); } + @ParameterizedTest + @ValueSource(strings = { "GET", "POST", "PUT", "PATCH", "DELETE", "HEAD" }) + public void multiplePaths(String method) { + String lowercaseMethod = method.toLowerCase(); + String restResponse = method.equals("HEAD") ? "" : method + ": /rest-" + lowercaseMethod; + RestAssured.given() + .request(method, "/folder-1/rest-" + lowercaseMethod) + .then() + .statusCode(200) + .body(equalTo(restResponse)); + + RestAssured.given() + .request(method, "/folder-2/rest-" + lowercaseMethod) + .then() + .statusCode(200) + .body(equalTo(restResponse)); + + String helloResponse = method.equals("HEAD") ? "" : method + ": /hello"; + RestAssured.given() + .request(method, "/folder-1/hello") + .then() + .statusCode(200) + .body(equalTo(helloResponse)); + + RestAssured.given() + .request(method, "/folder-2/hello") + .then() + .statusCode(200) + .body(equalTo(helloResponse)); + } + @Test - public void multiplePaths() { - RestAssured.get("/folder-1/rest-get").then().body(equalTo("GET: /rest-get")); - RestAssured.get("/folder-2/rest-get").then().body(equalTo("GET: /rest-get")); - RestAssured.post("/folder-1/rest-post").then().body(equalTo("POST: /rest-post")); - RestAssured.post("/folder-2/rest-post").then().body(equalTo("POST: /rest-post")); - RestAssured.get("/folder-1/hello").then().body(equalTo("GET: /hello")); - RestAssured.get("/folder-2/hello").then().body(equalTo("GET: /hello")); + public void options() { + RestAssured.given() + .request("OPTIONS", "/method-options/options") + .then() + .statusCode(200) + .body(equalTo("OPTIONS: /options")); + } + + @Test + public void trace() { + RestAssured.given() + .request("TRACE", "/method-trace/trace") + .then() + .statusCode(200) + .body(equalTo("TRACE: /trace")); + } + + @Test + public void requestParameters() { + RestAssured.given() + .formParam("prefix", "Hello") + .queryParam("suffix", "World") + .post("/folder-1/params") + .then() + .statusCode(200) + .body(equalTo("Hello World")); } @Test public void namedWithServletClass() { RestAssured.get("/my-custom-folder/custom") .then() + .statusCode(200) .body(equalTo("GET: /custom")) - .and() .header("x-servlet-class-name", CustomServlet.class.getName()); } @@ -142,4 +202,25 @@ public class CamelServletTest { "initParams.async", equalTo("true"), "loadOnStartup", nullValue()); } + + @Test + public void transferException() throws IOException, ClassNotFoundException { + InputStream response = RestAssured.given() + .get("/folder-1/transfer/exception") + .then() + .statusCode(500) + .contentType("application/x-java-serialized-object") + .extract() + .body() + .asInputStream(); + + // The CamelContext instance is only needed to ensure the correct ClassLoader is used for deserialization + CamelContext context = new DefaultCamelContext(); + context.setApplicationContextClassLoader(Thread.currentThread().getContextClassLoader()); + Object exception = HttpHelper.deserializeJavaObjectFromStream(response, context); + assertNotNull(exception); + + CustomException cause = assertInstanceOf(CustomException.class, exception); + assertEquals(CustomException.MESSAGE, cause.getMessage()); + } }