summaryrefslogtreecommitdiffstats
path: root/vespa-osgi-testrunner
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-08-04 09:04:35 +0200
committerjonmv <venstad@gmail.com>2022-08-04 09:04:35 +0200
commit3947ec4592b9af70996186ed605f680344ec8884 (patch)
tree038f680fc01d58d4e9b0da66cd8f9ea27fac9c89 /vespa-osgi-testrunner
parentd81217999dafb920998731532cfa8a140c2ed9c1 (diff)
Set TCCL after setting up JUnit, but around running the tests
Diffstat (limited to 'vespa-osgi-testrunner')
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java29
1 files changed, 20 insertions, 9 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 54f0941208d..d0e8663731a 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
@@ -4,28 +4,23 @@ package com.yahoo.vespa.testrunner;
import ai.vespa.cloud.Environment;
import ai.vespa.cloud.SystemInfo;
import ai.vespa.cloud.Zone;
-import ai.vespa.hosted.cd.InconclusiveTestException;
import ai.vespa.hosted.cd.internal.TestRuntimeProvider;
import com.yahoo.component.AbstractComponent;
import com.yahoo.component.annotation.Inject;
import com.yahoo.jdisc.application.OsgiFramework;
import com.yahoo.vespa.defaults.Defaults;
-import com.yahoo.vespa.testrunner.TestReport.ContainerNode;
-import com.yahoo.vespa.testrunner.TestReport.FailureNode;
-import com.yahoo.vespa.testrunner.TestReport.Status;
import org.junit.jupiter.engine.JupiterTestEngine;
+import org.junit.platform.engine.discovery.ClassSelector;
import org.junit.platform.engine.discovery.DiscoverySelectors;
import org.junit.platform.launcher.LauncherDiscoveryRequest;
import org.junit.platform.launcher.TestExecutionListener;
import org.junit.platform.launcher.core.LauncherConfig;
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
import org.junit.platform.launcher.core.LauncherFactory;
-import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
import java.time.Clock;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.SortedMap;
import java.util.concurrent.CompletableFuture;
@@ -64,9 +59,7 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
this(Clock.systemUTC(),
testRuntimeProvider,
new TestBundleLoader(osgiFramework)::loadTestClasses,
- (discoveryRequest, listeners) -> LauncherFactory.create(LauncherConfig.builder()
- .addTestEngines(new JupiterTestEngine())
- .build()).execute(discoveryRequest, listeners));
+ JunitRunner::executeTests);
uglyHackSetCredentialsRootSystemProperty(config, systemInfo.zone());
@@ -82,6 +75,24 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
this.testRuntimeProvider = testRuntimeProvider;
}
+ private static void executeTests(LauncherDiscoveryRequest discoveryRequest, TestExecutionListener[] listeners) {
+ var launcher = LauncherFactory.create(LauncherConfig.builder()
+ .addTestEngines(new JupiterTestEngine())
+ .build());
+ ClassLoader context = Thread.currentThread().getContextClassLoader();
+ try {
+ // Pick the bundle class loader of the first user test class, from the test class selector.
+ discoveryRequest.getSelectorsByType(ClassSelector.class).stream()
+ .map(selector -> selector.getJavaClass().getClassLoader())
+ .findAny().ifPresent(Thread.currentThread()::setContextClassLoader);
+
+ launcher.execute(discoveryRequest, listeners);
+ }
+ finally {
+ Thread.currentThread().setContextClassLoader(context);
+ }
+ }
+
@Override
public CompletableFuture<?> test(Suite suite, byte[] testConfig) {
if (execution != null && ! execution.isDone()) {