aboutsummaryrefslogtreecommitdiffstats
path: root/clustercontroller-utils
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2019-10-11 17:09:35 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-10-11 17:10:04 +0200
commit85bbfcba3fe9cfdd886839e6180ba0cdaea2fbc9 (patch)
treef8fd91091f56cdd58cbd88646ced20e1f3efa8d2 /clustercontroller-utils
parent82241ec5eb67ac74b0909c264060f4f519006227 (diff)
Use scheme from request in master location redirect url
Diffstat (limited to 'clustercontroller-utils')
-rw-r--r--clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequest.java6
-rw-r--r--clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/server/RestApiHandler.java2
-rw-r--r--clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/communication/http/HttpRequestTest.java3
-rw-r--r--clustercontroller-utils/src/test/java/com/yahoo/vespa/clustercontroller/utils/staterestapi/StateRestAPITest.java6
4 files changed, 12 insertions, 5 deletions
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<HttpRequest> {
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<HttpRequest> {
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<HttpRequest> {
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<HttpRequest> {
/** 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<HttpRequest> {
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"));