diff options
Diffstat (limited to 'container-core/src/test')
-rw-r--r-- | container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java | 14 | ||||
-rw-r--r-- | container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java | 36 |
2 files changed, 50 insertions, 0 deletions
diff --git a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java index 6e218a6ab66..adb35db8ebf 100644 --- a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java +++ b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java @@ -160,6 +160,20 @@ public class HttpServerTest { } @Test + void requireThatTooLargePayloadFailsWith413() throws Exception { + final JettyTestDriver driver = JettyTestDriver.newConfiguredInstance( + new EchoRequestHandler(), + new ServerConfig.Builder(), + new ConnectorConfig.Builder() + .maxContentSize(100)); + driver.client().newPost("/status.html") + .setBinaryContent(new byte[200]) + .execute() + .expectStatusCode(is(REQUEST_TOO_LONG)); + assertTrue(driver.close()); + } + + @Test void requireThatMultipleHostHeadersReturns400() throws Exception { var metricConsumer = new MetricConsumerMock(); JettyTestDriver driver = JettyTestDriver.newConfiguredInstance( diff --git a/container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java b/container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java index bf0ccb95887..d27e04bbd7a 100644 --- a/container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java +++ b/container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java @@ -158,6 +158,42 @@ class RestApiImplTest { assertRequiredCapability(restApi, Method.POST, "/api2", Capability.CONTENT__DOCUMENT_API); } + @Test + void maps_exception_for_filter_throwing() { + RestApi.Filter throwingFilter = (ctx) -> { + throw new RestApiException.Forbidden("forbidden"); + }; + var restApi = RestApi.builder() + .setDefaultRoute(route("{*}").defaultHandler(ctx -> "hello world")) + .addFilter(throwingFilter) + .build(); + verifyJsonResponse(restApi, Method.GET, "/", null, 403, "{\"error-code\":\"FORBIDDEN\",\"message\":\"forbidden\"}"); + } + + @Test + void missing_parameters_are_mapped_to_4xx_response() { + var restApi = RestApi.builder() + .addRoute(route("/missing-path-param").get(ctx -> ctx.pathParameters().getStringOrThrow("missing"))) + .addRoute(route("/missing-query-param").get(ctx -> ctx.queryParameters().getStringOrThrow("missing"))) + .build(); + verifyJsonResponse(restApi, Method.GET, "/missing-path-param", null, 404, + "{\"error-code\":\"NOT_FOUND\",\"message\":\"Path parameter 'missing' is missing\"}"); + verifyJsonResponse(restApi, Method.GET, "/missing-query-param", null, 400, + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Query parameter 'missing' is missing\"}"); + } + + @Test + void principal_from_filter_is_visible_to_handler() { + var restApi = RestApi.builder() + .addRoute(route("/api1").get(ctx -> ctx.userPrincipalOrThrow().getName())) + .addFilter(ctx -> { + ctx.setPrincipal(() -> "my-principal-name"); + return ctx.executeNext(); + }) + .build(); + verifyJsonResponse(restApi, Method.GET, "/api1", null, 200, "{\"message\":\"my-principal-name\"}"); + } + private static void verifyJsonResponse( RestApi restApi, Method method, String path, String requestContent, int expectedStatusCode, String expectedJson) { |