From 808a13aa626a83e775a052c8e6571c37f3694b4b Mon Sep 17 00:00:00 2001 From: Josef Smrcka Date: Sun, 1 Aug 2021 08:25:39 +0200 Subject: [PATCH] Add RESTEasy Reactive JAX-RS scenario Add `http/jaxrs-reactive`, which is a RESTEasy reactive equivalent of `http/jaxrs`. Notable differenes and limitations: - In a multipart POJO, Java type for `image` and `octet-stream` were changed from `InputStream` to `File` - `InputStream` is not supported by `resteasy-reactive`. - Test of a functionality provided by the `quarkus.resteasy.multipart.input-part.default-charset` property has been disabled for now - it is unsupported in `resteasy-reactive`. https://github.com/quarkusio/quarkus/issues/19527 - [FIXED] Possible bug in `resteasy-reactive` - endpoints consuming `MULTIPART_FORM_DATA` cause build failure. https://github.com/quarkusio/quarkus/issues/19404. - Tests dealing with `text/plain` request/response have been disabled on Windows due to a bug. https://github.com/quarkusio/quarkus/issues/19535 --- http/jaxrs-reactive/pom.xml | 23 ++++ .../ts/security/core/GreetingResource.java | 17 +++ .../ts/security/core/MultipartBody.java | 23 ++++ .../ts/security/core/MultipartResource.java | 55 +++++++++ .../src/main/resources/application.properties | 0 .../core/AsciiMultipartResourceIT.java | 46 +++++++ .../ts/security/core/BaseQuarkusBundleIT.java | 22 ++++ .../ts/security/core/MultipartResourceIT.java | 113 ++++++++++++++++++ .../core/OpenShiftMultipartResourceIT.java | 7 ++ .../src/test/resources/quarkus.png | Bin 0 -> 3884 bytes .../src/test/resources/us-asscii.properties | 2 + pom.xml | 1 + 12 files changed, 309 insertions(+) create mode 100644 http/jaxrs-reactive/pom.xml create mode 100644 http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/GreetingResource.java create mode 100644 http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartBody.java create mode 100644 http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartResource.java create mode 100644 http/jaxrs-reactive/src/main/resources/application.properties create mode 100644 http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/AsciiMultipartResourceIT.java create mode 100644 http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/BaseQuarkusBundleIT.java create mode 100644 http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/MultipartResourceIT.java create mode 100644 http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/OpenShiftMultipartResourceIT.java create mode 100644 http/jaxrs-reactive/src/test/resources/quarkus.png create mode 100644 http/jaxrs-reactive/src/test/resources/us-asscii.properties diff --git a/http/jaxrs-reactive/pom.xml b/http/jaxrs-reactive/pom.xml new file mode 100644 index 0000000000..8f2dfb510f --- /dev/null +++ b/http/jaxrs-reactive/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + io.quarkus.ts.qe + parent + 1.0.0-SNAPSHOT + ../.. + + jaxrs-reactive + jar + Quarkus QE TS: HTTP: jaxrs-reactive + + + io.quarkus + quarkus-resteasy-reactive + + + commons-io + commons-io + + + diff --git a/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/GreetingResource.java b/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/GreetingResource.java new file mode 100644 index 0000000000..50d494a58b --- /dev/null +++ b/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/GreetingResource.java @@ -0,0 +1,17 @@ +package io.quarkus.ts.security.core; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Deprecated +@Path("/hello") +public class GreetingResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "hello"; + } +} \ No newline at end of file diff --git a/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartBody.java b/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartBody.java new file mode 100644 index 0000000000..4b03d305b1 --- /dev/null +++ b/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartBody.java @@ -0,0 +1,23 @@ +package io.quarkus.ts.security.core; + +import java.io.File; + +import javax.ws.rs.core.MediaType; + +import org.jboss.resteasy.reactive.PartType; +import org.jboss.resteasy.reactive.RestForm; + +public class MultipartBody { + + @RestForm("text") + @PartType(MediaType.TEXT_PLAIN) + public String text; + + @RestForm("image") + @PartType("image/png") + public File image; + + @RestForm("data") + @PartType(MediaType.APPLICATION_OCTET_STREAM) + public File data; +} diff --git a/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartResource.java b/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartResource.java new file mode 100644 index 0000000000..87286ca158 --- /dev/null +++ b/http/jaxrs-reactive/src/main/java/io/quarkus/ts/security/core/MultipartResource.java @@ -0,0 +1,55 @@ +package io.quarkus.ts.security.core; + +import java.io.IOException; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.apache.commons.io.IOUtils; +import org.jboss.resteasy.reactive.MultipartForm; + +@Path("/multipart") +public class MultipartResource { + + @POST + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.MULTIPART_FORM_DATA) + public MultipartBody postForm(@MultipartForm MultipartBody multipartBody) { + return multipartBody; + } + + @POST + @Path("/text") + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.TEXT_PLAIN) + public String postFormReturnText(@MultipartForm MultipartBody multipartBody) { + return multipartBody.text; + } + + @POST + @Path("/image") + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public byte[] postFormReturnFile(@MultipartForm MultipartBody multipartBody) throws IOException { + return IOUtils.toByteArray(multipartBody.image.toURI()); + } + + @POST + @Path("/data") + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public byte[] postFormReturnData(@MultipartForm MultipartBody multipartBody) throws IOException { + return IOUtils.toByteArray(multipartBody.data.toURI()); + } + + @POST + @Path("/echo") + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.TEXT_PLAIN) + public String echo(String requestBody) { + return requestBody; + } +} diff --git a/http/jaxrs-reactive/src/main/resources/application.properties b/http/jaxrs-reactive/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/AsciiMultipartResourceIT.java b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/AsciiMultipartResourceIT.java new file mode 100644 index 0000000000..44116f6a3c --- /dev/null +++ b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/AsciiMultipartResourceIT.java @@ -0,0 +1,46 @@ +package io.quarkus.ts.security.core; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; + +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import io.quarkus.test.bootstrap.RestService; +import io.quarkus.test.scenarios.QuarkusScenario; +import io.quarkus.test.services.QuarkusApplication; +import io.restassured.builder.MultiPartSpecBuilder; +import io.restassured.http.ContentType; +import io.restassured.specification.MultiPartSpecification; + +// TODO: There is no resteasy-reactive equivalent so far. See https://github.com/quarkusio/quarkus/issues/19527 +@Disabled +@QuarkusScenario +public class AsciiMultipartResourceIT { + + public static final String TEXT_WITH_DIACRITICS = "Přikrášlený žloťoučký kůň úpěl ďábelské ódy."; + private static final String EXPECTED_ASCII_TEXT = new String(TEXT_WITH_DIACRITICS.getBytes(StandardCharsets.UTF_8), + StandardCharsets.US_ASCII); + + @QuarkusApplication + static RestService app = new RestService().withProperties("us-asscii.properties"); + + @Test + public void testMultipartText() { + MultiPartSpecification multiPartSpecification = new MultiPartSpecBuilder(TEXT_WITH_DIACRITICS) + .controlName("text") + .header("Content-Type", "text/plain") + .charset(StandardCharsets.UTF_8) + .build(); + + app.given().multiPart(multiPartSpecification) + .post("/multipart/text") + .then() + .statusCode(200) + .contentType(ContentType.TEXT) + .body(not(equalTo(TEXT_WITH_DIACRITICS))) + .body(equalTo(EXPECTED_ASCII_TEXT)); + } +} diff --git a/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/BaseQuarkusBundleIT.java b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/BaseQuarkusBundleIT.java new file mode 100644 index 0000000000..b03b4680f5 --- /dev/null +++ b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/BaseQuarkusBundleIT.java @@ -0,0 +1,22 @@ +package io.quarkus.ts.security.core; + +import static org.hamcrest.CoreMatchers.is; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.scenarios.QuarkusScenario; +import io.restassured.RestAssured; + +@QuarkusScenario +public class BaseQuarkusBundleIT { + + @Test + public void testQuarkusEndpoint() { + RestAssured.given() + .when().get("/hello") + .then() + .statusCode(200) + .body(is("hello")); + } + +} diff --git a/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/MultipartResourceIT.java b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/MultipartResourceIT.java new file mode 100644 index 0000000000..d94dd38d4a --- /dev/null +++ b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/MultipartResourceIT.java @@ -0,0 +1,113 @@ +package io.quarkus.ts.security.core; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Random; + +import javax.ws.rs.core.MediaType; + +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.OS; + +import io.quarkus.test.scenarios.QuarkusScenario; +import io.restassured.RestAssured; +import io.restassured.builder.MultiPartSpecBuilder; +import io.restassured.http.ContentType; +import io.restassured.response.ValidatableResponse; +import io.restassured.specification.MultiPartSpecification; + +@QuarkusScenario +public class MultipartResourceIT { + + private static final String IMAGE_FILE_NAME = "/quarkus.png"; + private static final String TEXT_WITH_DIACRITICS = "Přikrášlený žloťoučký kůň úpěl ďábelské ódy."; + private static byte[] randomBytes = new byte[120]; + private static File imageFile; + private static byte[] imageBytes; + + @BeforeAll + public static void beforeAll() throws IOException { + imageFile = new File(MultipartResourceIT.class.getResource(IMAGE_FILE_NAME).getFile()); + imageBytes = IOUtils.toByteArray(MultipartResourceIT.class.getResourceAsStream(IMAGE_FILE_NAME)); + new Random().nextBytes(randomBytes); + } + + @Test + public void testMultipartIsSendAndReceived() { + whenSendMultipartData("/multipart") + .contentType("multipart/form-data"); + } + + // TODO: https://github.com/quarkusio/quarkus/issues/19535 + @DisabledOnOs(OS.WINDOWS) + @Test + public void testTextVersionOfMultipart() { + whenSendMultipartData("/multipart/echo") + .contentType(ContentType.TEXT) + .body( + containsString("Content-Disposition: form-data; name=\"text\""), + containsString("Content-Disposition: form-data; name=\"data\"; filename=\"random.dat\""), + containsString("Content-Disposition: form-data; name=\"image\"; filename=\"quarkus.png\""), + containsString(TEXT_WITH_DIACRITICS)); + } + + // TODO: https://github.com/quarkusio/quarkus/issues/19535 + @DisabledOnOs(OS.WINDOWS) + @Test + public void testTextPartFromMultipart() { + whenSendMultipartData("/multipart/text") + .contentType(ContentType.TEXT) + .body(equalTo(TEXT_WITH_DIACRITICS)); + } + + @Test + public void testImagePartFromMultipart() { + byte[] receivedBytes = whenSendMultipartData("/multipart/image") + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .extract().asByteArray(); + assertThat(receivedBytes, equalTo(imageBytes)); + } + + @Test + public void testDataPartFromMultipart() { + byte[] receivedBytes = whenSendMultipartData("/multipart/data") + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .extract().asByteArray(); + assertThat(receivedBytes, equalTo(randomBytes)); + } + + private ValidatableResponse whenSendMultipartData(String path) { + MultiPartSpecification textSpec = new MultiPartSpecBuilder(TEXT_WITH_DIACRITICS) + .controlName("text") + .mimeType("text/plain") + .charset(StandardCharsets.UTF_8) + .build(); + MultiPartSpecification dataSpec = new MultiPartSpecBuilder(randomBytes) + .controlName("data") + .fileName("random.dat") + .header("Content-Type", "application/octet-stream") + .build(); + MultiPartSpecification imageSpec = new MultiPartSpecBuilder(imageFile) + .controlName("image") + .fileName("quarkus.png") + .mimeType("image/png") + .build(); + + return RestAssured.given() + .contentType("multipart/form-data") + .multiPart(textSpec) + .multiPart(imageSpec) + .multiPart(dataSpec) + .post(path) + .then() + .statusCode(200); + } +} diff --git a/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/OpenShiftMultipartResourceIT.java b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/OpenShiftMultipartResourceIT.java new file mode 100644 index 0000000000..79e780a82b --- /dev/null +++ b/http/jaxrs-reactive/src/test/java/io/quarkus/ts/security/core/OpenShiftMultipartResourceIT.java @@ -0,0 +1,7 @@ +package io.quarkus.ts.security.core; + +import io.quarkus.test.scenarios.OpenShiftScenario; + +@OpenShiftScenario +public class OpenShiftMultipartResourceIT extends MultipartResourceIT { +} diff --git a/http/jaxrs-reactive/src/test/resources/quarkus.png b/http/jaxrs-reactive/src/test/resources/quarkus.png new file mode 100644 index 0000000000000000000000000000000000000000..35e03eb53a2b14964b041fbfa8c41fcab65de261 GIT binary patch literal 3884 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 literal 0 HcmV?d00001 diff --git a/http/jaxrs-reactive/src/test/resources/us-asscii.properties b/http/jaxrs-reactive/src/test/resources/us-asscii.properties new file mode 100644 index 0000000000..0c0938b431 --- /dev/null +++ b/http/jaxrs-reactive/src/test/resources/us-asscii.properties @@ -0,0 +1,2 @@ +# TODO: There is no resteasy-reactive equivalent so far. See https://github.com/quarkusio/quarkus/issues/19527 +#quarkus.resteasy.multipart.input-part.default-charset=us-ascii \ No newline at end of file diff --git a/pom.xml b/pom.xml index 955826ee78..57b7b2515e 100644 --- a/pom.xml +++ b/pom.xml @@ -375,6 +375,7 @@ http/http-advanced http/http-static http/jaxrs + http/jaxrs-reactive http/reactive-routes http/rest-client http/servlet-undertow