From eeb6f7854d8aba397b9b3ee76c33a1526a18a8b9 Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Wed, 17 Nov 2021 14:18:57 +0100 Subject: Reuse existing classes --- .../yahoo/vespa/testrunner/TestRunnerHandler.java | 94 ++++++---------------- .../vespa/hosted/testrunner/TestRunnerHandler.java | 62 +++----------- 2 files changed, 32 insertions(+), 124 deletions(-) diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunnerHandler.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunnerHandler.java index f3104ee2e0c..da2db3798c2 100644 --- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunnerHandler.java +++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunnerHandler.java @@ -1,22 +1,20 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.testrunner; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.inject.Inject; import com.yahoo.container.jdisc.EmptyResponse; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; import com.yahoo.exception.ExceptionUtils; +import com.yahoo.restapi.MessageResponse; +import com.yahoo.restapi.SlimeJsonResponse; import com.yahoo.slime.Cursor; -import com.yahoo.slime.JsonFormat; import com.yahoo.slime.Slime; import com.yahoo.yolean.Exceptions; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.OutputStream; import java.io.PrintStream; import java.util.Collection; import java.util.Optional; @@ -33,8 +31,6 @@ import static com.yahoo.jdisc.Response.Status; */ public class TestRunnerHandler extends LoggingRequestHandler { - private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json"; - private final TestRunner testRunner; @Inject @@ -50,34 +46,35 @@ public class TestRunnerHandler extends LoggingRequestHandler { case GET: return handleGET(request); case POST: return handlePOST(request); - default: return new Response(Status.METHOD_NOT_ALLOWED, "Method '" + request.getMethod() + "' is not supported"); + default: return new MessageResponse(Status.METHOD_NOT_ALLOWED, "Method '" + request.getMethod() + "' is not supported"); } } catch (IllegalArgumentException e) { - return new Response(Status.BAD_REQUEST, Exceptions.toMessageString(e)); + return new MessageResponse(Status.BAD_REQUEST, Exceptions.toMessageString(e)); } catch (Exception e) { log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return new Response(Status.INTERNAL_SERVER_ERROR, Exceptions.toMessageString(e)); + return new MessageResponse(Status.INTERNAL_SERVER_ERROR, Exceptions.toMessageString(e)); } } private HttpResponse handleGET(HttpRequest request) { String path = request.getUri().getPath(); - if (path.equals("/tester/v1/log")) { - long fetchRecordsAfter = Optional.ofNullable(request.getProperty("after")) - .map(Long::parseLong) - .orElse(-1L); - return new SlimeJsonResponse(logToSlime(testRunner.getLog(fetchRecordsAfter))); - } else if (path.equals("/tester/v1/status")) { - log.info("Responding with status " + testRunner.getStatus()); - return new Response(testRunner.getStatus().name()); - } else if (path.equals("/tester/v1/report")) { - TestReport report = testRunner.getReport(); - if (report == null) - return new EmptyResponse(200); - - return new SlimeJsonResponse(toSlime(report)); + switch (path) { + case "/tester/v1/log": + long fetchRecordsAfter = Optional.ofNullable(request.getProperty("after")) + .map(Long::parseLong) + .orElse(-1L); + return new SlimeJsonResponse(logToSlime(testRunner.getLog(fetchRecordsAfter))); + case "/tester/v1/status": + log.info("Responding with status " + testRunner.getStatus()); + return new MessageResponse(testRunner.getStatus().name()); + case "/tester/v1/report": + TestReport report = testRunner.getReport(); + if (report == null) + return new EmptyResponse(200); + + return new SlimeJsonResponse(toSlime(report)); } - return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); + return new MessageResponse(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); } private HttpResponse handlePOST(HttpRequest request) throws IOException { @@ -88,9 +85,9 @@ public class TestRunnerHandler extends LoggingRequestHandler { byte[] config = request.getData().readAllBytes(); testRunner.test(testSuite, config); log.info("Started tests of type " + type + " and status is " + testRunner.getStatus()); - return new Response("Successfully started " + type + " tests"); + return new MessageResponse("Successfully started " + type + " tests"); } - return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); + return new MessageResponse(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); } private static String lastElement(String path) { @@ -133,51 +130,6 @@ public class TestRunnerHandler extends LoggingRequestHandler { : "error"; } - private static class SlimeJsonResponse extends HttpResponse { - private final Slime slime; - - private SlimeJsonResponse(Slime slime) { - super(200); - this.slime = slime; - } - - @Override - public void render(OutputStream outputStream) throws IOException { - new JsonFormat(true).encode(outputStream, slime); - } - - @Override - public String getContentType() { - return CONTENT_TYPE_APPLICATION_JSON; - } - } - - private static class Response extends HttpResponse { - private static final ObjectMapper objectMapper = new ObjectMapper(); - private final String message; - - private Response(String response) { - this(200, response); - } - - private Response(int statusCode, String message) { - super(statusCode); - this.message = message; - } - - @Override - public void render(OutputStream outputStream) throws IOException { - ObjectNode objectNode = objectMapper.createObjectNode(); - objectNode.put("message", message); - objectMapper.writeValue(outputStream, objectNode); - } - - @Override - public String getContentType() { - return CONTENT_TYPE_APPLICATION_JSON; - } - } - private static Slime toSlime(TestReport testReport) { var slime = new Slime(); var root = slime.setObject(); diff --git a/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java b/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java index f9deef0bfd2..c10ee5416db 100644 --- a/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java +++ b/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java @@ -8,6 +8,8 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; import com.yahoo.io.IOUtils; +import com.yahoo.restapi.MessageResponse; +import com.yahoo.restapi.SlimeJsonResponse; import com.yahoo.slime.Cursor; import com.yahoo.slime.JsonFormat; import com.yahoo.slime.Slime; @@ -31,8 +33,6 @@ import static com.yahoo.jdisc.Response.Status; */ public class TestRunnerHandler extends LoggingRequestHandler { - private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json"; - private final com.yahoo.vespa.hosted.testrunner.TestRunner testRunner; @Inject @@ -48,13 +48,13 @@ public class TestRunnerHandler extends LoggingRequestHandler { case GET: return handleGET(request); case POST: return handlePOST(request); - default: return new Response(Status.METHOD_NOT_ALLOWED, "Method '" + request.getMethod() + "' is not supported"); + default: return new MessageResponse(Status.METHOD_NOT_ALLOWED, "Method '" + request.getMethod() + "' is not supported"); } } catch (IllegalArgumentException e) { - return new Response(Status.BAD_REQUEST, Exceptions.toMessageString(e)); + return new MessageResponse(Status.BAD_REQUEST, Exceptions.toMessageString(e)); } catch (Exception e) { log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return new Response(Status.INTERNAL_SERVER_ERROR, Exceptions.toMessageString(e)); + return new MessageResponse(Status.INTERNAL_SERVER_ERROR, Exceptions.toMessageString(e)); } } @@ -66,9 +66,9 @@ public class TestRunnerHandler extends LoggingRequestHandler { : -1))); } else if (path.equals("/tester/v1/status")) { log.info("Responding with status " + testRunner.getStatus()); - return new Response(testRunner.getStatus().name()); + return new MessageResponse(testRunner.getStatus().name()); } - return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); + return new MessageResponse(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); } private HttpResponse handlePOST(HttpRequest request) throws IOException { @@ -79,9 +79,9 @@ public class TestRunnerHandler extends LoggingRequestHandler { byte[] config = IOUtils.readBytes(request.getData(), 1 << 16); testRunner.test(suite, config); log.info("Started tests of type " + type + " and status is " + testRunner.getStatus()); - return new Response("Successfully started " + type + " tests"); + return new MessageResponse("Successfully started " + type + " tests"); } - return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); + return new MessageResponse(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); } private static String lastElement(String path) { @@ -124,48 +124,4 @@ public class TestRunnerHandler extends LoggingRequestHandler { : "error"; } - private static class SlimeJsonResponse extends HttpResponse { - private final Slime slime; - - private SlimeJsonResponse(Slime slime) { - super(200); - this.slime = slime; - } - - @Override - public void render(OutputStream outputStream) throws IOException { - new JsonFormat(true).encode(outputStream, slime); - } - - @Override - public String getContentType() { - return CONTENT_TYPE_APPLICATION_JSON; - } - } - - private static class Response extends HttpResponse { - private static final ObjectMapper objectMapper = new ObjectMapper(); - private final String message; - - private Response(String response) { - this(200, response); - } - - private Response(int statusCode, String message) { - super(statusCode); - this.message = message; - } - - @Override - public void render(OutputStream outputStream) throws IOException { - ObjectNode objectNode = objectMapper.createObjectNode(); - objectNode.put("message", message); - objectMapper.writeValue(outputStream, objectNode); - } - - @Override - public String getContentType() { - return CONTENT_TYPE_APPLICATION_JSON; - } - } } -- cgit v1.2.3