summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-04-12 18:54:22 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-04-12 20:57:24 +0200
commit8cf392f9573d4061bef71e426c4940426dd121a7 (patch)
treeb02fff7cd23764f9ed631766d49ff5bc2280c462 /container-core
parent01892669e2becfc0999e75332394f8496583c425 (diff)
Create valid builder when URI has implicit port
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java5
-rw-r--r--container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java24
2 files changed, 22 insertions, 7 deletions
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
index 0a31151921d..084aa01ec40 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
@@ -349,7 +349,10 @@ class RestApiImpl implements RestApi {
@Override public ObjectMapper jacksonJsonMapper() { return jacksonJsonMapper; }
@Override public UriBuilder uriBuilder() {
URI uri = request.getUri();
- return new UriBuilder(uri.getScheme() + "://" + uri.getHost() + ':' + uri.getPort());
+ int uriPort = uri.getPort();
+ return uriPort != -1
+ ? new UriBuilder(uri.getScheme() + "://" + uri.getHost() + ':' + uriPort)
+ : new UriBuilder(uri.getScheme() + "://" + uri.getHost());
}
private class PathParametersImpl implements RestApi.RequestContext.PathParameters {
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 1de8184ce22..06fc6d80741 100644
--- a/container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java
+++ b/container-core/src/test/java/com/yahoo/restapi/RestApiImplTest.java
@@ -102,13 +102,25 @@ class RestApiImplTest {
verifyJsonResponse(restApi, Method.POST, "/api", rawJson, 200, rawJson);
}
+ @Test
+ public void uri_builder_creates_valid_uri_prefix() {
+ RestApi restApi = RestApi.builder()
+ .addRoute(route("/test").get(ctx -> new MessageResponse(ctx.uriBuilder().toString())))
+ .build();
+ verifyJsonResponse(restApi, Method.GET, "/test", null, 200, "{\"message\":\"http://localhost\"}");
+ }
+
private static void verifyJsonResponse(RestApi restApi, Method method, String path, String requestContent, int expectedStatusCode, String expectedJson) {
- HttpRequest testRequest = requestContent != null ?
- HttpRequest.createTestRequest(
- path, method,
- new ByteArrayInputStream(requestContent.getBytes(StandardCharsets.UTF_8)),
- Map.of("Content-Type", "application/json")) :
- HttpRequest.createTestRequest(path, method);
+ HttpRequest testRequest;
+ String uri = "http://localhost" + path;
+ if (requestContent != null) {
+ testRequest = HttpRequest.createTestRequest(
+ uri, method,
+ new ByteArrayInputStream(requestContent.getBytes(StandardCharsets.UTF_8)),
+ Map.of("Content-Type", "application/json"));
+ } else {
+ testRequest = HttpRequest.createTestRequest(uri, method);
+ }
HttpResponse response = restApi.handleRequest(testRequest);
assertEquals(expectedStatusCode, response.getStatus());
if (expectedJson != null) {