diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-12-03 10:07:05 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-12-03 10:07:05 +0100 |
commit | 68847a31fd792ce7c1df90d4552980d8fd43253f (patch) | |
tree | 745d9cf9a5d7c4eca1058ba562f4e936801615cd /vespa-osgi-testrunner | |
parent | 7cc3980cf2b38da62f06444e2785cc752eacf75c (diff) |
Move ANSI to HTML to separate class, and simplify
Diffstat (limited to 'vespa-osgi-testrunner')
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(" ", " ")); + } + +} 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;\"></body>Hello!</span>", + html.getMessage()); + } + +} |