From a9a7f54a96d12c0be6c6b819c5d41f4dcb7a95af Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 25 Jun 2020 16:43:57 +0100 Subject: [PATCH 1/4] Handle trailing slash on status and health_check --- .../server/HealthCheckHandler.java | 6 ++++- .../ic/wlgitbridge/server/StatusHandler.java | 6 ++++- .../WLGitBridgeIntegrationTest.java | 23 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java index 120b2d6163..d251bd9ae5 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java @@ -28,7 +28,11 @@ public class HealthCheckHandler extends AbstractHandler { HttpServletRequest request, HttpServletResponse response ) throws IOException { - if ("GET".equals(baseRequest.getMethod()) && "/health_check".equals(target)) { + if ( + "GET".equals(baseRequest.getMethod()) + && target != null + && target.matches("^\\/health_check\\/?$") + ) { Log.info("GET <- /health_check"); baseRequest.setHandled(true); response.setContentType("text/plain"); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java index 802db35bd1..b205fa46ca 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java @@ -28,7 +28,11 @@ public class StatusHandler extends AbstractHandler { HttpServletRequest request, HttpServletResponse response ) throws IOException { - if ("GET".equals(baseRequest.getMethod()) && "/status".equals(target)) { + if ( + "GET".equals(baseRequest.getMethod()) + && target != null + && target.matches("^\\/status\\/?$") + ) { Log.info("GET <- /status"); baseRequest.setHandled(true); response.setContentType("text/plain"); diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java index 482fe8de8d..29356de856 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java @@ -921,6 +921,29 @@ public class WLGitBridgeIntegrationTest { assertEquals(200, healthCheckResponse.getStatusLine().getStatusCode()); } + @Test + public void testStatusAndHealthCheckEndpointsWithTrailingSlash() throws ClientProtocolException, IOException { + int gitBridgePort = 33888; + int mockServerPort = 3888; + server = new MockSnapshotServer(mockServerPort, getResource("/canCloneARepository").toFile()); + server.start(); + server.setState(states.get("canCloneARepository").get("state")); + wlgb = new GitBridgeApp(new String[] { + makeConfigFile(gitBridgePort, mockServerPort) + }); + wlgb.run(); + HttpClient client = HttpClients.createDefault(); + String urlBase = "http://127.0.0.1:" + gitBridgePort; + // Status + HttpGet statusRequest = new HttpGet(urlBase+"/status/"); + HttpResponse statusResponse = client.execute(statusRequest); + assertEquals(200, statusResponse.getStatusLine().getStatusCode()); + // Health Check + HttpGet healthCheckRequest = new HttpGet(urlBase+"/health_check/"); + HttpResponse healthCheckResponse = client.execute(healthCheckRequest); + assertEquals(200, healthCheckResponse.getStatusLine().getStatusCode()); + } + private String makeConfigFile( int port, int apiPort From 5e31a11938205543de1503bace7594dc85c8cd0d Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 26 Jun 2020 11:54:18 +0100 Subject: [PATCH 2/4] Respond to HEAD request in /status, /health_check --- .../server/HealthCheckHandler.java | 5 ++-- .../ic/wlgitbridge/server/StatusHandler.java | 6 +++-- .../WLGitBridgeIntegrationTest.java | 24 +++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java index d251bd9ae5..819217befa 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java @@ -28,12 +28,13 @@ public class HealthCheckHandler extends AbstractHandler { HttpServletRequest request, HttpServletResponse response ) throws IOException { + String method = baseRequest.getMethod(); if ( - "GET".equals(baseRequest.getMethod()) + ("GET".equals(method) || "HEAD".equals(method)) && target != null && target.matches("^\\/health_check\\/?$") ) { - Log.info("GET <- /health_check"); + Log.info(method + " <- /health_check"); baseRequest.setHandled(true); response.setContentType("text/plain"); if (bridge.healthCheck()) { diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java index b205fa46ca..50f44724d0 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java @@ -12,6 +12,7 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.Arrays; public class StatusHandler extends AbstractHandler { @@ -28,12 +29,13 @@ public class StatusHandler extends AbstractHandler { HttpServletRequest request, HttpServletResponse response ) throws IOException { + String method = baseRequest.getMethod(); if ( - "GET".equals(baseRequest.getMethod()) + ("GET".equals(method) || "HEAD".equals(method)) && target != null && target.matches("^\\/status\\/?$") ) { - Log.info("GET <- /status"); + Log.info(method + " <- /status"); baseRequest.setHandled(true); response.setContentType("text/plain"); response.setStatus(200); diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java index 29356de856..d60e5df995 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java @@ -9,6 +9,7 @@ import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpHead; import org.apache.http.impl.client.HttpClients; import org.asynchttpclient.*; import org.eclipse.jgit.api.errors.GitAPIException; @@ -944,6 +945,29 @@ public class WLGitBridgeIntegrationTest { assertEquals(200, healthCheckResponse.getStatusLine().getStatusCode()); } + @Test + public void testStatusAndHealthCheckEndpointsWithHead() throws ClientProtocolException, IOException { + int gitBridgePort = 33889; + int mockServerPort = 3889; + server = new MockSnapshotServer(mockServerPort, getResource("/canCloneARepository").toFile()); + server.start(); + server.setState(states.get("canCloneARepository").get("state")); + wlgb = new GitBridgeApp(new String[] { + makeConfigFile(gitBridgePort, mockServerPort) + }); + wlgb.run(); + HttpClient client = HttpClients.createDefault(); + String urlBase = "http://127.0.0.1:" + gitBridgePort; + // Status + HttpHead statusRequest = new HttpHead(urlBase+"/status"); + HttpResponse statusResponse = client.execute(statusRequest); + assertEquals(200, statusResponse.getStatusLine().getStatusCode()); + // Health Check + HttpHead healthCheckRequest = new HttpHead(urlBase+"/health_check"); + HttpResponse healthCheckResponse = client.execute(healthCheckRequest); + assertEquals(200, healthCheckResponse.getStatusLine().getStatusCode()); + } + private String makeConfigFile( int port, int apiPort From 41614166598da411a4fe4bf7edd23cf4bccfba46 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 26 Jun 2020 13:37:09 +0100 Subject: [PATCH 3/4] Update src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java Co-authored-by: John Lees-Miller --- .../java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java index 819217befa..226fb259fe 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/HealthCheckHandler.java @@ -32,7 +32,7 @@ public class HealthCheckHandler extends AbstractHandler { if ( ("GET".equals(method) || "HEAD".equals(method)) && target != null - && target.matches("^\\/health_check\\/?$") + && target.matches("^/health_check/?$") ) { Log.info(method + " <- /health_check"); baseRequest.setHandled(true); From e7b19ea4a04ca48ae01344c4662a971129e28cf3 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 26 Jun 2020 13:37:18 +0100 Subject: [PATCH 4/4] Update src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java Co-authored-by: John Lees-Miller --- .../main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java index 50f44724d0..45acfe12f0 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/StatusHandler.java @@ -33,7 +33,7 @@ public class StatusHandler extends AbstractHandler { if ( ("GET".equals(method) || "HEAD".equals(method)) && target != null - && target.matches("^\\/status\\/?$") + && target.matches("^/status/?$") ) { Log.info(method + " <- /status"); baseRequest.setHandled(true);