From e2dace4bc4f72e86a671664cb1b32eea48361cfb Mon Sep 17 00:00:00 2001 From: Morten Tokle Date: Mon, 22 Jun 2020 08:55:36 +0200 Subject: Execute Junit tests in container --- .../main/java/ai/vespa/hosted/cd/TestRuntime.java | 19 ++++++++++++-- .../hosted/cd/internal/TestRuntimeProvider.java | 29 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 tenant-cd-api/src/main/java/ai/vespa/hosted/cd/internal/TestRuntimeProvider.java (limited to 'tenant-cd-api/src/main/java') diff --git a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/TestRuntime.java b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/TestRuntime.java index 08cc0467b71..7aebbc7b7e7 100644 --- a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/TestRuntime.java +++ b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/TestRuntime.java @@ -2,7 +2,10 @@ package ai.vespa.hosted.cd; import ai.vespa.cloud.Zone; +import ai.vespa.hosted.cd.internal.TestRuntimeProvider; +import org.osgi.framework.BundleReference; +import java.util.Optional; import java.util.ServiceLoader; /** @@ -13,8 +16,20 @@ import java.util.ServiceLoader; */ public interface TestRuntime { static TestRuntime get() { - ServiceLoader serviceLoader = ServiceLoader.load(TestRuntime.class); - return serviceLoader.findFirst().orElseThrow(() -> new RuntimeException("No TestRuntime implementation found")); + var classloader = TestRuntime.class.getClassLoader(); + + System.out.println("classloader.toString() = " + classloader.toString()); + System.out.println("classloader.getClass().toString() = " + classloader.getClass().toString()); + + if (classloader instanceof BundleReference) { + System.out.println("Loading Test runtime from osgi component"); + return Optional.ofNullable(TestRuntimeProvider.getTestRuntime()) + .orElseThrow(() -> new RuntimeException("Component graph not ready, retrying")); + } else { + System.out.println("Loading Test runtime from service loader"); + ServiceLoader serviceLoader = ServiceLoader.load(TestRuntime.class, TestRuntime.class.getClassLoader()); + return serviceLoader.findFirst().orElseThrow(() -> new RuntimeException("No TestRuntime implementation found")); + } } Deployment deploymentToTest(); diff --git a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/internal/TestRuntimeProvider.java b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/internal/TestRuntimeProvider.java new file mode 100644 index 00000000000..e97fa5faf85 --- /dev/null +++ b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/internal/TestRuntimeProvider.java @@ -0,0 +1,29 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package ai.vespa.hosted.cd.internal; + +import ai.vespa.hosted.cd.TestRuntime; +import com.yahoo.component.AbstractComponent; + +import java.util.concurrent.atomic.AtomicReference; + +/** + * @author mortent + */ +public class TestRuntimeProvider extends AbstractComponent { + + private static final AtomicReference testRuntime = new AtomicReference<>(); + + public TestRuntimeProvider(TestRuntime testRuntime) { + TestRuntimeProvider.testRuntime.set(testRuntime); + } + + public static TestRuntime getTestRuntime() { + return testRuntime.get(); + } + + @Override + public void deconstruct() { + super.deconstruct(); + testRuntime.set(null); + } +} -- cgit v1.2.3