aboutsummaryrefslogtreecommitdiffstats
path: root/vespa-osgi-testrunner
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-11-17 13:47:38 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-11-17 13:47:38 +0100
commit2e228e6836ac35522d517d4218f5e81c23362768 (patch)
tree8c4f179fa89d3bdb6d5deab5ba2b9e7e59f3c761 /vespa-osgi-testrunner
parent2839357dea3b20ea4a77c8f41eaca021de8d5fbe (diff)
Make log available as it comes for JUnit runner
Diffstat (limited to 'vespa-osgi-testrunner')
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java21
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunner.java5
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunnerHandler.java7
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java1
-rw-r--r--vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/TestRunnerHandlerTest.java9
5 files changed, 31 insertions, 12 deletions
diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java
index 5cc4d8336f2..4e287afa97a 100644
--- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java
+++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java
@@ -27,9 +27,14 @@ import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Optional;
+import java.util.Queue;
+import java.util.SortedMap;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.logging.Level;
@@ -44,6 +49,7 @@ import java.util.stream.Stream;
public class JunitRunner extends AbstractComponent implements TestRunner {
private static final Logger logger = Logger.getLogger(JunitRunner.class.getName());
+ private final SortedMap<Long, LogRecord> logRecords = new ConcurrentSkipListMap<>();
private final BundleContext bundleContext;
private final TestRuntimeProvider testRuntimeProvider;
private volatile Future<TestReport> execution;
@@ -90,6 +96,7 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
throw new IllegalStateException("Test execution already in progress");
}
try {
+ logRecords.clear();
testRuntimeProvider.initialize(testConfig);
Optional<Bundle> testBundle = findTestBundle();
if (testBundle.isEmpty()) {
@@ -106,6 +113,11 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
}
}
+ @Override
+ public Collection<LogRecord> getLog(long after) {
+ return logRecords.tailMap(after + 1).values();
+ }
+
private static TestReport createReportWithFailedInitialization(Exception exception) {
TestReport.Failure failure = new TestReport.Failure("init", exception);
return new TestReport.Builder()
@@ -175,8 +187,7 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
Launcher launcher = LauncherFactory.create(launcherConfig);
// Create log listener:
- var logLines = new ArrayList<LogRecord>();
- var logListener = VespaJunitLogListener.forBiConsumer((t, m) -> log(logLines, m.get(), t));
+ var logListener = VespaJunitLogListener.forBiConsumer((t, m) -> log(logRecords, m.get(), t));
// Create a summary listener:
var summaryListener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(logListener, summaryListener);
@@ -193,14 +204,14 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
.withIgnoredCount(report.getTestsSkippedCount())
.withFailedCount(report.getTestsFailedCount())
.withFailures(failures)
- .withLogs(logLines)
+ .withLogs(logRecords.values())
.build();
}
- private void log(List<LogRecord> logs, String message, Throwable t) {
+ private void log(SortedMap<Long, LogRecord> logs, String message, Throwable t) {
LogRecord logRecord = new LogRecord(Level.INFO, message);
Optional.ofNullable(t).ifPresent(logRecord::setThrown);
- logs.add(logRecord);
+ logs.put(logRecord.getSequenceNumber(), logRecord);
}
@Override
diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunner.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunner.java
index 5ac6a87a89c..76a2be85d4d 100644
--- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunner.java
+++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunner.java
@@ -4,6 +4,9 @@ package com.yahoo.vespa.testrunner;
import ai.vespa.hosted.api.TestDescriptor;
import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
+import java.util.Collection;
+import java.util.logging.LogRecord;
+
/**
* @author mortent
*/
@@ -11,6 +14,8 @@ public interface TestRunner {
void executeTests(TestDescriptor.TestCategory category, byte[] testConfig);
+ Collection<LogRecord> getLog(long after);
+
boolean isSupported();
LegacyTestRunner.Status getStatus();
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 227b2fde44e..a0437f14c98 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
@@ -79,12 +79,7 @@ public class TestRunnerHandler extends LoggingRequestHandler {
.map(Long::parseLong)
.orElse(-1L);
if (useOsgiMode) {
- List<LogRecord> logRecords = Optional.ofNullable(junitRunner.getReport())
- .map(TestReport::logLines)
- .orElse(Collections.emptyList()).stream()
- .filter(record -> record.getSequenceNumber() > fetchRecordsAfter)
- .collect(Collectors.toList());
- return new SlimeJsonResponse(logToSlime(logRecords));
+ return new SlimeJsonResponse(logToSlime(junitRunner.getLog(fetchRecordsAfter)));
} else {
return new SlimeJsonResponse(logToSlime(testRunner.getLog(fetchRecordsAfter)));
}
diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java
index 33bfd4bd7c2..80122302d2c 100644
--- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java
+++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java
@@ -15,7 +15,6 @@ public interface LegacyTestRunner {
void test(TestProfile testProfile, byte[] config);
- // TODO (mortent) : This seems to be duplicated in TesterCloud.Status and expects to have the same values
enum Status {
NOT_STARTED, RUNNING, FAILURE, ERROR, SUCCESS
}
diff --git a/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/TestRunnerHandlerTest.java b/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/TestRunnerHandlerTest.java
index 70a67edb0b1..ff8adc70806 100644
--- a/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/TestRunnerHandlerTest.java
+++ b/vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/TestRunnerHandlerTest.java
@@ -12,10 +12,12 @@ import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.time.Instant;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.LogRecord;
+import java.util.stream.Collectors;
import static com.yahoo.jdisc.http.HttpRequest.Method.GET;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -141,6 +143,13 @@ public class TestRunnerHandlerTest {
}
@Override
+ public Collection<LogRecord> getLog(long after) {
+ return getReport().logLines().stream()
+ .filter(entry -> entry.getSequenceNumber() > after)
+ .collect(Collectors.toList());
+ }
+
+ @Override
public boolean isSupported() {
return true;
}