From 85bbfcba3fe9cfdd886839e6180ba0cdaea2fbc9 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Fri, 11 Oct 2019 17:09:35 +0200 Subject: Use scheme from request in master location redirect url --- .../clustercontroller/utils/communication/http/HttpRequest.java | 6 +++++- .../clustercontroller/utils/staterestapi/server/RestApiHandler.java | 2 +- .../clustercontroller/utils/communication/http/HttpRequestTest.java | 3 +++ .../clustercontroller/utils/staterestapi/StateRestAPITest.java | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) (limited to 'clustercontroller-utils') diff --git a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequest.java b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequest.java index b4de05b0588..2cb717cc104 100644 --- a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequest.java +++ b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequest.java @@ -25,6 +25,7 @@ public class HttpRequest extends CertainlyCloneable { public enum HttpOp { GET, POST, PUT, DELETE } + private String scheme; private String host; private int port; private String path; @@ -36,6 +37,7 @@ public class HttpRequest extends CertainlyCloneable { public HttpRequest() {} + public String getScheme() { return scheme; } public String getHost() { return host; } public int getPort() { return port; } public String getPath() { return path; } @@ -58,6 +60,7 @@ public class HttpRequest extends CertainlyCloneable { public Object getPostContent() { return postContent; } public HttpOp getHttpOperation() { return httpOperation; } + public HttpRequest setScheme(String scheme) { this.scheme = scheme; return this; } public HttpRequest setHost(String hostname) { this.host = hostname; return this; } public HttpRequest setPort(int port) { this.port = port; return this; } public HttpRequest setPath(String path) { @@ -73,6 +76,7 @@ public class HttpRequest extends CertainlyCloneable { /** Create a copy of this request, and override what is specified in the input in the new request. */ public HttpRequest merge(HttpRequest r) { HttpRequest copy = clone(); + if (r.scheme != null) copy.scheme = r.scheme; if (r.host != null) copy.host = r.host; if (r.port != 0) copy.port = r.port; if (r.path != null) copy.path = r.path; @@ -105,7 +109,7 @@ public class HttpRequest extends CertainlyCloneable { public String toString(boolean verbose) { String httpOp = (httpOperation != null ? httpOperation.toString() : (postContent == null ? "GET?" : "POST?")); - StringBuilder sb = new StringBuilder().append(httpOp).append(" http:"); + StringBuilder sb = new StringBuilder().append(httpOp).append(" ").append(scheme).append(':'); if (host != null) { sb.append("//").append(host); if (port != 0) sb.append(':').append(port); diff --git a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/server/RestApiHandler.java b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/server/RestApiHandler.java index 46f5d964245..acc4782e5eb 100644 --- a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/server/RestApiHandler.java +++ b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/server/RestApiHandler.java @@ -160,7 +160,7 @@ public class RestApiHandler implements HttpRequestHandler { private String getMasterLocationUrl(HttpRequest request, String host, int port) { StringBuilder sb = new StringBuilder(); - sb.append("http://").append(host).append(':').append(port) + sb.append(request.getScheme()).append("://").append(host).append(':').append(port) .append(request.getPath()); if (!request.getUrlOptions().isEmpty()) { boolean first = true; diff --git a/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequestTest.java b/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequestTest.java index 7baff0453b0..88db20d1ff5 100644 --- a/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequestTest.java +++ b/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequestTest.java @@ -107,16 +107,19 @@ public class HttpRequestTest { public void testToString() { assertEquals("GET? http://localhost:8080/", new HttpRequest() + .setScheme("http") .setHost("localhost") .setPort(8080) .toString(true)); assertEquals("POST http://localhost/", new HttpRequest() + .setScheme("http") .setHttpOperation(HttpRequest.HttpOp.POST) .setHost("localhost") .toString(true)); assertEquals("GET http://localhost/?foo=bar", new HttpRequest() + .setScheme("http") .setHttpOperation(HttpRequest.HttpOp.GET) .addUrlOption("foo", "bar") .setHost("localhost") diff --git a/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/StateRestAPITest.java b/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/StateRestAPITest.java index 3492c632e60..249fcb3ab04 100644 --- a/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/StateRestAPITest.java +++ b/clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/StateRestAPITest.java @@ -338,17 +338,17 @@ public class StateRestAPITest { setupDummyStateApi(); { stateApi.induceException(new OtherMasterException("example.com", 80)); - HttpResult result = execute(new HttpRequest().setPath("/cluster/v2").addUrlOption(" %=?&", "&?%=").addUrlOption("foo", "bar")); + HttpResult result = execute(new HttpRequest().setScheme("https").setPath("/cluster/v2").addUrlOption(" %=?&", "&?%=").addUrlOption("foo", "bar")); assertEquals(result.toString(true), 307, result.getHttpReturnCode()); assertEquals(result.toString(true), "Temporary Redirect", result.getHttpReturnCodeDescription()); - assertEquals(result.toString(true), "http://example.com:80/cluster/v2?%20%25%3D%3F%26=%26%3F%25%3D&foo=bar", result.getHeader("Location")); + assertEquals(result.toString(true), "https://example.com:80/cluster/v2?%20%25%3D%3F%26=%26%3F%25%3D&foo=bar", result.getHeader("Location")); assertEquals(result.toString(true), "application/json", result.getHeader("Content-Type")); String expected = "{\"message\":\"Cluster controller not master. Use master at example.com:80.\"}"; assertEquals(expected, result.getContent().toString()); } { stateApi.induceException(new OtherMasterException("example.com", 80)); - HttpResult result = execute(new HttpRequest().setPath("/cluster/v2/foo")); + HttpResult result = execute(new HttpRequest().setScheme("http").setPath("/cluster/v2/foo")); assertEquals(result.toString(true), 307, result.getHttpReturnCode()); assertEquals(result.toString(true), "Temporary Redirect", result.getHttpReturnCodeDescription()); assertEquals(result.toString(true), "http://example.com:80/cluster/v2/foo", result.getHeader("Location")); -- cgit v1.2.3