diff options
author | HÃ¥kon Hallingstad <hakon.hallingstad@gmail.com> | 2022-08-04 09:35:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-04 09:35:57 +0200 |
commit | 8dfa210ae195fba3969b45705c2b7402bd0f1809 (patch) | |
tree | d84a0a8ce3eb8385d1b15c3f3ce13adf81e5d7ad /vespa-osgi-testrunner/src | |
parent | 8844e681bc04385bde449db144e3306529460265 (diff) | |
parent | 3947ec4592b9af70996186ed605f680344ec8884 (diff) |
Merge pull request #23576 from vespa-engine/jonmv/set-tccl-after-setting-up-JUnit-services
Set TCCL after setting up JUnit, but around running the tests
Diffstat (limited to 'vespa-osgi-testrunner/src')
-rw-r--r-- | vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java | 29 |
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()) { |