diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-01-29 09:24:07 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-01-29 09:24:07 +0100 |
commit | 8bfa335db55ddac585719d81540ef477691c776c (patch) | |
tree | 0407c78bb9d611d6b86cb08629fb35d033f034ff /vespa-testrunner-components | |
parent | 4fd41b6dab70a98c60f3c8602bfbecb2cf2e7c02 (diff) |
Add /tester/v1/log2 with extended response
Will return logs in a named array inside a Json object. Easier to
handle deserialization with Jackson and makes it possible to extend
response in the future if needed
Diffstat (limited to 'vespa-testrunner-components')
2 files changed, 68 insertions, 18 deletions
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 275d9f97dcf..ec8a78467ca 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 @@ -62,9 +62,13 @@ public class TestRunnerHandler extends LoggingRequestHandler { private HttpResponse handleGET(HttpRequest request) { String path = request.getUri().getPath(); if (path.equals("/tester/v1/log")) { - return new SlimeJsonResponse(toSlime(testRunner.getLog(request.hasProperty("after") - ? Long.parseLong(request.getProperty("after")) - : -1))); + return new SlimeJsonResponse(logToSlime(testRunner.getLog(request.hasProperty("after") + ? Long.parseLong(request.getProperty("after")) + : -1))); + } else if (path.equals("/tester/v1/log2")) { // TODO: Migrate to /tester/v1/log when the above is not in use anymore + return new SlimeJsonResponse(log2ToSlime(testRunner.getLog(request.hasProperty("after") + ? Long.parseLong(request.getProperty("after")) + : -1))); } else if (path.equals("/tester/v1/status")) { log.info("Responding with status " + testRunner.getStatus()); return new Response(testRunner.getStatus().name()); @@ -72,7 +76,7 @@ public class TestRunnerHandler extends LoggingRequestHandler { return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); } - private HttpResponse handlePOST(HttpRequest request) throws IOException, InterruptedException { + private HttpResponse handlePOST(HttpRequest request) throws IOException { final String path = request.getUri().getPath(); if (path.startsWith("/tester/v1/run/")) { String type = lastElement(path); @@ -93,9 +97,22 @@ public class TestRunnerHandler extends LoggingRequestHandler { return path.substring(lastSlash + 1, path.length()); } - static Slime toSlime(Collection<LogRecord> log) { + static Slime logToSlime(Collection<LogRecord> log) { Slime root = new Slime(); Cursor recordArray = root.setArray(); + logArrayToSlime(recordArray, log); + return root; + } + + static Slime log2ToSlime(Collection<LogRecord> log) { + Slime slime = new Slime(); + Cursor root = slime.setObject(); + Cursor recordArray = root.setArray("logRecords"); + logArrayToSlime(recordArray, log); + return slime; + } + + static void logArrayToSlime(Cursor recordArray, Collection<LogRecord> log) { log.forEach(record -> { Cursor recordObject = recordArray.addObject(); recordObject.setLong("id", record.getSequenceNumber()); @@ -109,7 +126,6 @@ public class TestRunnerHandler extends LoggingRequestHandler { } recordObject.setString("message", message); }); - return root; } public static String typeOf(Level level) { @@ -120,7 +136,7 @@ public class TestRunnerHandler extends LoggingRequestHandler { : "error"; } - private class SlimeJsonResponse extends HttpResponse { + private static class SlimeJsonResponse extends HttpResponse { private final Slime slime; private SlimeJsonResponse(Slime slime) { diff --git a/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandlerTest.java b/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandlerTest.java index 3f6fecc8249..a40af0fd3be 100644 --- a/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandlerTest.java +++ b/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandlerTest.java @@ -21,18 +21,52 @@ public class TestRunnerHandlerTest { @Test public void logSerialization() throws IOException { - LogRecord record = new LogRecord(Level.INFO, "Hello."); - record.setSequenceNumber(1); - record.setInstant(Instant.ofEpochMilli(2)); - Exception exception = new RuntimeException(); - record.setThrown(exception); - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - exception.printStackTrace(new PrintStream(buffer)); - String trace = buffer.toString() - .replaceAll("\n", "\\\\n") - .replaceAll("\t", "\\\\t"); + Log log = new Log(); + LogRecord record = log.getLogRecord(); + String trace = log.getTrace(); assertEquals("[{\"id\":1,\"at\":2,\"type\":\"info\",\"message\":\"Hello.\\n" + trace + "\"}]", - new String(SlimeUtils.toJsonBytes(TestRunnerHandler.toSlime(Collections.singletonList(record))))); + new String(SlimeUtils.toJsonBytes(TestRunnerHandler.logToSlime(Collections.singletonList(record))))); + } + + @Test + public void log2Serialization() throws IOException { + Log log = new Log(); + LogRecord record = log.getLogRecord(); + String trace = log.getTrace(); + assertEquals("{\"logRecords\":[{\"id\":1,\"at\":2,\"type\":\"info\",\"message\":\"Hello.\\n" + trace + "\"}]}", + new String(SlimeUtils.toJsonBytes(TestRunnerHandler.log2ToSlime(Collections.singletonList(record))))); + } + + private static class Log { + + private final LogRecord record; + private final String trace; + + public Log() { + Exception exception = new RuntimeException(); + record = createRecord(exception); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + exception.printStackTrace(new PrintStream(buffer)); + trace = buffer.toString() + .replaceAll("\n", "\\\\n") + .replaceAll("\t", "\\\\t"); + } + + LogRecord getLogRecord() { + return record; + } + + String getTrace() { + return trace; + } + + private static LogRecord createRecord(Exception exception) { + LogRecord record = new LogRecord(Level.INFO, "Hello."); + record.setSequenceNumber(1); + record.setInstant(Instant.ofEpochMilli(2)); + record.setThrown(exception); + return record; + } } } |