aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java30
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunner.java22
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/TestRunnerHandler.java59
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java26
-rw-r--r--vespa-osgi-testrunner/src/test/java/com/yahoo/vespa/testrunner/TestRunnerHandlerTest.java18
-rw-r--r--vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunner.java3
-rw-r--r--vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java8
-rw-r--r--vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerTest.java5
8 files changed, 61 insertions, 110 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 4e287afa97a..d1acc4faf0f 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
@@ -11,7 +11,6 @@ import com.yahoo.component.AbstractComponent;
import com.yahoo.io.IOUtils;
import com.yahoo.jdisc.application.OsgiFramework;
import com.yahoo.vespa.defaults.Defaults;
-import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
import org.junit.jupiter.engine.JupiterTestEngine;
import org.junit.platform.engine.discovery.DiscoverySelectors;
import org.junit.platform.launcher.Launcher;
@@ -26,14 +25,11 @@ import org.osgi.framework.BundleContext;
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;
@@ -90,8 +86,18 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
credentialsRoot.ifPresent(root -> System.setProperty("vespa.test.credentials.root", root));
}
+ private static TestDescriptor.TestCategory toCategory(TestRunner.Suite testProfile) {
+ switch(testProfile) {
+ case SYSTEM_TEST: return TestDescriptor.TestCategory.systemtest;
+ case STAGING_SETUP_TEST: return TestDescriptor.TestCategory.stagingsetuptest;
+ case STAGING_TEST: return TestDescriptor.TestCategory.stagingtest;
+ case PRODUCTION_TEST: return TestDescriptor.TestCategory.productiontest;
+ default: throw new RuntimeException("Unknown test profile: " + testProfile.name());
+ }
+ }
+
@Override
- public void executeTests(TestDescriptor.TestCategory category, byte[] testConfig) {
+ public void test(TestRunner.Suite suite, byte[] testConfig) {
if (execution != null && ! execution.isDone()) {
throw new IllegalStateException("Test execution already in progress");
}
@@ -107,7 +113,7 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
if (testDescriptor.isEmpty()) {
throw new RuntimeException("Could not find test descriptor");
}
- execution = CompletableFuture.supplyAsync(() -> launchJunit(loadClasses(testBundle.get(), testDescriptor.get(), category)));
+ execution = CompletableFuture.supplyAsync(() -> launchJunit(loadClasses(testBundle.get(), testDescriptor.get(), toCategory(suite))));
} catch (Exception e) {
execution = CompletableFuture.completedFuture(createReportWithFailedInitialization(e));
}
@@ -220,20 +226,20 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
}
@Override
- public LegacyTestRunner.Status getStatus() {
- if (execution == null) return LegacyTestRunner.Status.NOT_STARTED;
- if (!execution.isDone()) return LegacyTestRunner.Status.RUNNING;
+ public TestRunner.Status getStatus() {
+ if (execution == null) return TestRunner.Status.NOT_STARTED;
+ if (!execution.isDone()) return TestRunner.Status.RUNNING;
try {
TestReport report = execution.get();
if (report.isSuccess()) {
- return LegacyTestRunner.Status.SUCCESS;
+ return TestRunner.Status.SUCCESS;
} else {
- return LegacyTestRunner.Status.FAILURE;
+ return TestRunner.Status.FAILURE;
}
} catch (InterruptedException|ExecutionException e) {
logger.log(Level.WARNING, "Error while getting test report", e);
// Return FAILURE to enforce getting the test report from the caller.
- return LegacyTestRunner.Status.FAILURE;
+ return TestRunner.Status.FAILURE;
}
}
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 76a2be85d4d..db489f5aa3d 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
@@ -1,25 +1,31 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
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 jonmv
* @author mortent
*/
public interface TestRunner {
- void executeTests(TestDescriptor.TestCategory category, byte[] testConfig);
-
Collection<LogRecord> getLog(long after);
- boolean isSupported();
+ Status getStatus();
+
+ void test(Suite suite, byte[] config);
+
+ default boolean isSupported() { return true; }
+
+ default TestReport getReport() { return null; }
- LegacyTestRunner.Status getStatus();
+ enum Status {
+ NOT_STARTED, RUNNING, FAILURE, ERROR, SUCCESS
+ }
- TestReport getReport();
+ enum Suite {
+ SYSTEM_TEST, STAGING_SETUP_TEST, STAGING_TEST, PRODUCTION_TEST
+ }
} \ No newline at end of file
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 5c7bb1ccbd3..f3104ee2e0c 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
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.testrunner;
-import ai.vespa.hosted.api.TestDescriptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.inject.Inject;
@@ -13,7 +12,6 @@ import com.yahoo.exception.ExceptionUtils;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.JsonFormat;
import com.yahoo.slime.Slime;
-import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
import com.yahoo.yolean.Exceptions;
import java.io.ByteArrayOutputStream;
@@ -37,16 +35,12 @@ public class TestRunnerHandler extends LoggingRequestHandler {
private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json";
- private final TestRunner junitRunner;
- private final LegacyTestRunner testRunner;
- private final boolean useOsgiMode;
+ private final TestRunner testRunner;
@Inject
- public TestRunnerHandler(Executor executor, TestRunner junitRunner, LegacyTestRunner testRunner) {
+ public TestRunnerHandler(Executor executor, TestRunner junitRunner, TestRunner testRunner) {
super(executor);
- this.junitRunner = junitRunner;
- this.testRunner = testRunner;
- this.useOsgiMode = junitRunner.isSupported();
+ this.testRunner = junitRunner.isSupported() ? junitRunner : testRunner;
}
@Override
@@ -72,25 +66,16 @@ public class TestRunnerHandler extends LoggingRequestHandler {
long fetchRecordsAfter = Optional.ofNullable(request.getProperty("after"))
.map(Long::parseLong)
.orElse(-1L);
- if (useOsgiMode) {
- return new SlimeJsonResponse(logToSlime(junitRunner.getLog(fetchRecordsAfter)));
- } else {
- return new SlimeJsonResponse(logToSlime(testRunner.getLog(fetchRecordsAfter)));
- }
+ return new SlimeJsonResponse(logToSlime(testRunner.getLog(fetchRecordsAfter)));
} else if (path.equals("/tester/v1/status")) {
- if (useOsgiMode) {
- log.info("Responding with status " + junitRunner.getStatus());
- return new Response(junitRunner.getStatus().name());
- } else {
- log.info("Responding with status " + testRunner.getStatus());
- return new Response(testRunner.getStatus().name());
- }
+ log.info("Responding with status " + testRunner.getStatus());
+ return new Response(testRunner.getStatus().name());
} else if (path.equals("/tester/v1/report")) {
- if (useOsgiMode) {
- return new SlimeJsonResponse(toSlime(junitRunner.getReport()));
- } else {
+ TestReport report = testRunner.getReport();
+ if (report == null)
return new EmptyResponse(200);
- }
+
+ return new SlimeJsonResponse(toSlime(report));
}
return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath());
}
@@ -99,31 +84,15 @@ public class TestRunnerHandler extends LoggingRequestHandler {
final String path = request.getUri().getPath();
if (path.startsWith("/tester/v1/run/")) {
String type = lastElement(path);
- LegacyTestRunner.Suite testSuite = LegacyTestRunner.Suite.valueOf(type.toUpperCase() + "_TEST");
+ TestRunner.Suite testSuite = TestRunner.Suite.valueOf(type.toUpperCase() + "_TEST");
byte[] config = request.getData().readAllBytes();
- if (useOsgiMode) {
- junitRunner.executeTests(categoryFromProfile(testSuite), config);
- log.info("Started tests of type " + type + " and status is " + junitRunner.getStatus());
- return new Response("Successfully started " + type + " tests");
- } else {
- testRunner.test(testSuite, config);
- log.info("Started tests of type " + type + " and status is " + testRunner.getStatus());
- return new Response("Successfully started " + type + " tests");
- }
+ testRunner.test(testSuite, config);
+ log.info("Started tests of type " + type + " and status is " + testRunner.getStatus());
+ return new Response("Successfully started " + type + " tests");
}
return new Response(Status.NOT_FOUND, "Not found: " + request.getUri().getPath());
}
- TestDescriptor.TestCategory categoryFromProfile(LegacyTestRunner.Suite testProfile) {
- switch(testProfile) {
- case SYSTEM_TEST: return TestDescriptor.TestCategory.systemtest;
- case STAGING_SETUP_TEST: return TestDescriptor.TestCategory.stagingsetuptest;
- case STAGING_TEST: return TestDescriptor.TestCategory.stagingtest;
- case PRODUCTION_TEST: return TestDescriptor.TestCategory.productiontest;
- default: throw new RuntimeException("Unknown test profile: " + testProfile.name());
- }
- }
-
private static String lastElement(String path) {
if (path.endsWith("/"))
path = path.substring(0, path.length() - 1);
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
deleted file mode 100644
index fc25f7de6e5..00000000000
--- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/legacy/LegacyTestRunner.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.testrunner.legacy;
-
-import java.util.Collection;
-import java.util.logging.LogRecord;
-
-/**
- * @author mortent
- */
-public interface LegacyTestRunner {
-
- Collection<LogRecord> getLog(long after);
-
- Status getStatus();
-
- void test(Suite suite, byte[] config);
-
- enum Status {
- NOT_STARTED, RUNNING, FAILURE, ERROR, SUCCESS
- }
-
- enum Suite {
- SYSTEM_TEST, STAGING_SETUP_TEST, STAGING_TEST, PRODUCTION_TEST
- }
-
-} \ No newline at end of file
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 ff8adc70806..a78dc077446 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
@@ -1,11 +1,9 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.testrunner;
-import ai.vespa.hosted.api.TestDescriptor;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.test.json.JsonTestHelper;
-import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -50,7 +48,7 @@ public class TestRunnerHandlerTest {
testRunnerHandler = new TestRunnerHandler(
Executors.newSingleThreadExecutor(),
- new MockJunitRunner(LegacyTestRunner.Status.SUCCESS, testReport),
+ new MockJunitRunner(TestRunner.Status.SUCCESS, testReport),
null);
}
@@ -98,7 +96,7 @@ public class TestRunnerHandlerTest {
HttpResponse response = testRunnerHandler.handle(HttpRequest.createTestRequest("http://localhost:1234/tester/v1/report", GET));
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.render(out);
- assertEquals("{}", out.toString(UTF_8));
+ assertEquals("", out.toString(UTF_8));
}
}
@@ -106,7 +104,7 @@ public class TestRunnerHandlerTest {
public void usesLegacyTestRunnerWhenNotSupported() throws IOException {
TestRunner testRunner = mock(TestRunner.class);
when(testRunner.isSupported()).thenReturn(false);
- LegacyTestRunner legacyTestRunner = mock(LegacyTestRunner.class);
+ TestRunner legacyTestRunner = mock(TestRunner.class);
when(legacyTestRunner.getLog(anyLong())).thenReturn(List.of(logRecord("Legacy log message")));
testRunnerHandler = new TestRunnerHandler(
@@ -129,18 +127,17 @@ public class TestRunnerHandlerTest {
private static class MockJunitRunner implements TestRunner {
- private final LegacyTestRunner.Status status;
+ private final TestRunner.Status status;
private final TestReport testReport;
- public MockJunitRunner(LegacyTestRunner.Status status, TestReport testReport) {
+ public MockJunitRunner(TestRunner.Status status, TestReport testReport) {
this.status = status;
this.testReport = testReport;
}
@Override
- public void executeTests(TestDescriptor.TestCategory category, byte[] testConfig) {
- }
+ public void test(Suite suite, byte[] testConfig) { }
@Override
public Collection<LogRecord> getLog(long after) {
@@ -155,7 +152,7 @@ public class TestRunnerHandlerTest {
}
@Override
- public LegacyTestRunner.Status getStatus() {
+ public TestRunner.Status getStatus() {
return status;
}
@@ -165,4 +162,5 @@ public class TestRunnerHandlerTest {
}
}
+
}
diff --git a/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunner.java b/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunner.java
index f31390e9933..8aa2cd7bc72 100644
--- a/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunner.java
+++ b/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunner.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.testrunner;
import com.google.inject.Inject;
import com.yahoo.vespa.defaults.Defaults;
-import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
import org.fusesource.jansi.AnsiOutputStream;
import org.fusesource.jansi.HtmlAnsiOutputStream;
@@ -37,7 +36,7 @@ import static java.util.logging.Level.SEVERE;
* @author valerijf
* @author jvenstad
*/
-public class TestRunner implements LegacyTestRunner {
+public class TestRunner implements com.yahoo.vespa.testrunner.TestRunner {
private static final Logger logger = Logger.getLogger(TestRunner.class.getName());
private static final Level HTML = new Level("html", 1) { };
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 842fc5078c1..f9deef0bfd2 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
@@ -11,7 +11,7 @@ import com.yahoo.io.IOUtils;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.JsonFormat;
import com.yahoo.slime.Slime;
-import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
+import com.yahoo.vespa.testrunner.TestRunner;
import com.yahoo.yolean.Exceptions;
import java.io.ByteArrayOutputStream;
@@ -33,10 +33,10 @@ public class TestRunnerHandler extends LoggingRequestHandler {
private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json";
- private final TestRunner testRunner;
+ private final com.yahoo.vespa.hosted.testrunner.TestRunner testRunner;
@Inject
- public TestRunnerHandler(Executor executor, TestRunner testRunner) {
+ public TestRunnerHandler(Executor executor, com.yahoo.vespa.hosted.testrunner.TestRunner testRunner) {
super(executor);
this.testRunner = testRunner;
}
@@ -75,7 +75,7 @@ public class TestRunnerHandler extends LoggingRequestHandler {
final String path = request.getUri().getPath();
if (path.startsWith("/tester/v1/run/")) {
String type = lastElement(path);
- LegacyTestRunner.Suite suite = LegacyTestRunner.Suite.valueOf(type.toUpperCase() + "_TEST");
+ TestRunner.Suite suite = TestRunner.Suite.valueOf(type.toUpperCase() + "_TEST");
byte[] config = IOUtils.readBytes(request.getData(), 1 << 16);
testRunner.test(suite, config);
log.info("Started tests of type " + type + " and status is " + testRunner.getStatus());
diff --git a/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerTest.java b/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerTest.java
index 68fa5427492..b513dfba8b5 100644
--- a/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerTest.java
+++ b/vespa-testrunner-components/src/test/java/com/yahoo/vespa/hosted/testrunner/TestRunnerTest.java
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.testrunner;
-import com.yahoo.vespa.testrunner.legacy.LegacyTestRunner;
import org.fusesource.jansi.Ansi;
import org.junit.Before;
import org.junit.Rule;
@@ -14,8 +13,8 @@ import java.nio.file.Path;
import java.util.Iterator;
import java.util.logging.LogRecord;
-import static com.yahoo.vespa.testrunner.legacy.LegacyTestRunner.Suite.STAGING_TEST;
-import static com.yahoo.vespa.testrunner.legacy.LegacyTestRunner.Suite.SYSTEM_TEST;
+import static com.yahoo.vespa.testrunner.TestRunner.Suite.STAGING_TEST;
+import static com.yahoo.vespa.testrunner.TestRunner.Suite.SYSTEM_TEST;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;