aboutsummaryrefslogtreecommitdiffstats
path: root/vespa-osgi-testrunner
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-12-03 10:07:05 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-12-03 10:07:05 +0100
commit68847a31fd792ce7c1df90d4552980d8fd43253f (patch)
tree745d9cf9a5d7c4eca1058ba562f4e936801615cd /vespa-osgi-testrunner
parent7cc3980cf2b38da62f06444e2785cc752eacf75c (diff)
Move ANSI to HTML to separate class, and simplify
Diffstat (limited to 'vespa-osgi-testrunner')
-rw-r--r--vespa-osgi-testrunner/pom.xml6
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/HtmlLogger.java35
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/VespaCliTestRunner.java13
-rw-r--r--vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/HtmlLoggerTest.java24
4 files changed, 72 insertions, 6 deletions
diff --git a/vespa-osgi-testrunner/pom.xml b/vespa-osgi-testrunner/pom.xml
index 045ac050e4b..de1b5b4024b 100644
--- a/vespa-osgi-testrunner/pom.xml
+++ b/vespa-osgi-testrunner/pom.xml
@@ -58,6 +58,12 @@
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
+ <version>1.18</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>com.yahoo.vespa</groupId>
<artifactId>config-provisioning</artifactId>
<version>${project.version}</version>
diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/HtmlLogger.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/HtmlLogger.java
new file mode 100644
index 00000000000..7a05cbf74fd
--- /dev/null
+++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/HtmlLogger.java
@@ -0,0 +1,35 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.testrunner;
+
+import org.fusesource.jansi.HtmlAnsiOutputStream;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+/**
+ * Converts ANSI output to HTML-safe log records
+ *
+ * @author jonmv
+ */
+public class HtmlLogger {
+
+ public static final Level HTML = new Level("html", 1) { };
+
+ private final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ private final PrintStream formatter = new PrintStream(new HtmlAnsiOutputStream(buffer));
+
+ public LogRecord toLog(String line) {
+ if (line.length() > 1 << 13)
+ line = line.substring(0, 1 << 13) + " ... (this log entry was truncated due to size)";
+
+ buffer.reset();
+ formatter.print(line);
+ formatter.flush();
+ return new LogRecord(HTML, buffer.toString(UTF_8)); //.replaceAll(" ", "&nbsp;"));
+ }
+
+}
diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/VespaCliTestRunner.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/VespaCliTestRunner.java
index 6405904cd91..f131292597c 100644
--- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/VespaCliTestRunner.java
+++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/VespaCliTestRunner.java
@@ -84,13 +84,10 @@ public class VespaCliTestRunner implements TestRunner {
try {
TestConfig testConfig = TestConfig.fromJson(config);
process = testRunProcessBuilder(suite, testConfig).start();
- BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
- in.lines().forEach(line -> {
- if (line.length() > 1 << 13)
- line = line.substring(0, 1 << 13) + " ... (this log entry was truncated due to size)";
- log(Level.INFO, line, null);
- });
+ HtmlLogger htmlLogger = new HtmlLogger();
+ BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ in.lines().forEach(line -> log(htmlLogger.toLog(line)));
status.set(process.waitFor() == 0 ? SUCCESS : process.waitFor() == 3 ? FAILURE : ERROR);
}
catch (Exception e) {
@@ -139,6 +136,10 @@ public class VespaCliTestRunner implements TestRunner {
private void log(Level level, String message, Throwable thrown) {
LogRecord record = new LogRecord(level, message);
record.setThrown(thrown);
+ log(record);
+ }
+
+ private void log(LogRecord record) {
logger.log(record);
log.put(record.getSequenceNumber(), record);
}
diff --git a/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/HtmlLoggerTest.java b/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/HtmlLoggerTest.java
new file mode 100644
index 00000000000..c230bac9dce
--- /dev/null
+++ b/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/HtmlLoggerTest.java
@@ -0,0 +1,24 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.testrunner;
+
+import org.fusesource.jansi.Ansi;
+import org.junit.jupiter.api.Test;
+
+import java.util.logging.LogRecord;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * @author jonmv
+ */
+class HtmlLoggerTest {
+
+ @Test
+ void testConversionToHtml() {
+ LogRecord html = new HtmlLogger().toLog(Ansi.ansi().fg(Ansi.Color.RED).a("</body>Hello!").reset().toString());
+ assertEquals("html", html.getLevel().getName());
+ assertEquals("<span style=\"color: red;\">&lt;/body&gt;Hello!</span>",
+ html.getMessage());
+ }
+
+}