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..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 @@ -28,8 +28,13 @@ public class HealthCheckHandler extends AbstractHandler { HttpServletRequest request, HttpServletResponse response ) throws IOException { - if ("GET".equals(baseRequest.getMethod()) && "/health_check".equals(target)) { - Log.info("GET <- /health_check"); + String method = baseRequest.getMethod(); + if ( + ("GET".equals(method) || "HEAD".equals(method)) + && target != null + && target.matches("^/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 802db35bd1..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 @@ -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,8 +29,13 @@ public class StatusHandler extends AbstractHandler { HttpServletRequest request, HttpServletResponse response ) throws IOException { - if ("GET".equals(baseRequest.getMethod()) && "/status".equals(target)) { - Log.info("GET <- /status"); + String method = baseRequest.getMethod(); + if ( + ("GET".equals(method) || "HEAD".equals(method)) + && target != null + && target.matches("^/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 482fe8de8d..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; @@ -921,6 +922,52 @@ 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()); + } + + @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