Skip to content

Commit

Permalink
Merge pull request quarkusio#26954 from geoand/quarkusio#26828
Browse files Browse the repository at this point in the history
Ensure that HTTP OPTIONS handling involves the proper handler chain
  • Loading branch information
geoand authored Aug 24, 2022
2 parents 7ebfc26 + c8380a0 commit 0eadc21
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package io.quarkus.resteasy.reactive.server.test.customproviders;

import static io.restassured.RestAssured.when;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.emptyOrNullString;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;

import java.util.function.Supplier;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.container.ContainerResponseContext;

import org.assertj.core.api.Assertions;
import org.jboss.resteasy.reactive.server.ServerResponseFilter;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.QuarkusUnitTest;

public class OptionsRequestTest {

@RegisterExtension
static QuarkusUnitTest test = new QuarkusUnitTest()
.setArchiveProducer(new Supplier<>() {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class)
.addClasses(Resource.class, Filters.class);
}
});

@Test
public void testJsonHeaderAdded() {
String allowValue = when()
.options("/test")
.then()
.statusCode(200)
.header("Foo", equalTo("Bar"))
.body(is(emptyOrNullString()))
.extract().header("Allow");

Assertions.assertThat(allowValue).contains("GET", "HEAD", "OPTIONS");
}

@Path("test")
public static class Resource {

@GET
public String hello() {
return "hello";
}
}

public static class Filters {
@ServerResponseFilter
public void preMatchingFilter(ContainerResponseContext context) {
context.getHeaders().putSingle("Foo", "Bar");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void handle(ResteasyReactiveRequestContext requestContext) throws Excepti
if (requestMethod.equals(HttpMethod.HEAD)) {
mapper = mappers.get(HttpMethod.GET);
} else if (requestMethod.equals(HttpMethod.OPTIONS)) {
Set<CharSequence> allowedMethods = new HashSet<>();
Set<String> allowedMethods = new HashSet<>();
for (String method : mappers.keySet()) {
if (method == null) {
continue;
Expand All @@ -53,7 +53,7 @@ public void handle(ResteasyReactiveRequestContext requestContext) throws Excepti
}
allowedMethods.add(HttpMethod.OPTIONS);
allowedMethods.add(HttpMethod.HEAD);
requestContext.serverResponse().setResponseHeader(HttpHeaders.ALLOW, allowedMethods).end();
requestContext.abortWith(Response.ok().allow(allowedMethods).build());
return;
}
if (mapper == null) {
Expand Down

0 comments on commit 0eadc21

Please sign in to comment.