summaryrefslogtreecommitdiffstats
path: root/vespa-testrunner-components
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-01-29 09:24:07 +0100
committerHarald Musum <musum@verizonmedia.com>2020-01-29 09:24:07 +0100
commit8bfa335db55ddac585719d81540ef477691c776c (patch)
tree0407c78bb9d611d6b86cb08629fb35d033f034ff /vespa-testrunner-components
parent4fd41b6dab70a98c60f3c8602bfbecb2cf2e7c02 (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')
-rw-r--r--vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java30
-rw-r--r--vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandlerTest.java56
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;
+ }
}
}