From c9af34109b06aa90154ee1692717a0fed555ec61 Mon Sep 17 00:00:00 2001 From: Morten Tokle Date: Fri, 28 Aug 2020 15:33:47 +0200 Subject: Add API to get test report on config server --- .../com/yahoo/vespa/config/server/ApplicationRepository.java | 4 ++++ .../java/com/yahoo/vespa/config/server/http/TesterClient.java | 7 ++++++- .../yahoo/vespa/config/server/http/v2/ApplicationHandler.java | 2 ++ .../java/com/yahoo/vespa/config/server/MockTesterClient.java | 10 ++++++++++ .../vespa/config/server/http/v2/ApplicationHandlerTest.java | 11 +++++++++++ 5 files changed, 33 insertions(+), 1 deletion(-) (limited to 'configserver') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 73120e90a3e..6a3a715e58d 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -722,6 +722,10 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye return testerClient.isTesterReady(getTesterHostname(applicationId), getTesterPort(applicationId)); } + public HttpResponse getTestReport(ApplicationId applicationId) { + return testerClient.getReport(getTesterHostname(applicationId), getTesterPort(applicationId)); + } + private String getTesterHostname(ApplicationId applicationId) { return getTesterServiceInfo(applicationId).getHostName(); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java index 514e0c1c8ae..163d26036a9 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.config.server.http; import ai.vespa.util.http.VespaHttpClientBuilder; import com.yahoo.container.jdisc.HttpResponse; -import java.util.logging.Level; import com.yahoo.yolean.Exceptions; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; @@ -15,6 +14,7 @@ import org.apache.http.entity.ByteArrayEntity; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -58,6 +58,11 @@ public class TesterClient { return execute(new HttpGet(testerUri), "/status.html did not return 200 OK"); } + public HttpResponse getReport(String testerHostname, int port) { + URI testerUri = createURI(testerHostname, port, "/tester/v1/report"); + return execute(new HttpGet(testerUri), "Failed to get test report"); + } + private HttpResponse execute(HttpUriRequest request, String messageIfRequestFails) { logger.log(Level.FINE, "Sending request to tester container " + request.getURI().toString()); try { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java index 0a805cc6b21..168f8e3ddbb 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java @@ -152,6 +152,8 @@ public class ApplicationHandler extends HttpHandler { return applicationRepository.getTesterLog(applicationId, after); case "ready": return applicationRepository.isTesterReady(applicationId); + case "report": + return applicationRepository.getTestReport(applicationId); default: throw new IllegalArgumentException("Unknown tester command in request " + request.getUri().toString()); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/MockTesterClient.java b/configserver/src/test/java/com/yahoo/vespa/config/server/MockTesterClient.java index c835bb29ec0..1279bf70578 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/MockTesterClient.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/MockTesterClient.java @@ -51,4 +51,14 @@ public class MockTesterClient extends TesterClient { }; } + @Override + public HttpResponse getReport(String testerHostname, int port) { + return new HttpResponse(200) { + @Override + public void render(OutputStream outputStream) throws IOException { + outputStream.write("report".getBytes(StandardCharsets.UTF_8)); + } + }; + } + } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java index f43154242fb..8d353130542 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java @@ -285,6 +285,17 @@ public class ApplicationHandlerTest { assertEquals(200, response.getStatus()); } + @Test + public void testGetTestReport() throws IOException { + applicationRepository.deploy(testApp, prepareParams(applicationId)); + String url = toUrlPath(applicationId, Zone.defaultZone(), true) + "/tester/report"; + ApplicationHandler mockHandler = createApplicationHandler(); + HttpRequest testRequest = HttpRequest.createTestRequest(url, GET); + HttpResponse response = mockHandler.handle(testRequest); + assertEquals(200, response.getStatus()); + assertEquals("report", getRenderedString(response)); + } + private void assertNotAllowed(com.yahoo.jdisc.http.HttpRequest.Method method) throws IOException { String url = "http://myhost:14000/application/v2/tenant/" + mytenantName + "/application/default"; deleteAndAssertResponse(url, Response.Status.METHOD_NOT_ALLOWED, HttpErrorResponse.errorCodes.METHOD_NOT_ALLOWED, "{\"error-code\":\"METHOD_NOT_ALLOWED\",\"message\":\"Method '" + method + "' is not supported\"}", -- cgit v1.2.3