diff options
Diffstat (limited to 'opendc-harness/opendc-harness-engine')
5 files changed, 9 insertions, 8 deletions
diff --git a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/discovery/DiscoveryProvider.kt b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/discovery/DiscoveryProvider.kt index 204de3fc..c4b420c5 100644 --- a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/discovery/DiscoveryProvider.kt +++ b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/discovery/DiscoveryProvider.kt @@ -40,7 +40,7 @@ public interface DiscoveryProvider { /** * Factory method for creating a new [Discovery] instance. */ - public fun create(): Discovery + public fun create(classLoader: ClassLoader): Discovery public companion object { /** @@ -58,8 +58,8 @@ public interface DiscoveryProvider { /** * Obtain a composite [Discovery] that combines the results of all available providers. */ - public fun createComposite(): Discovery { - return CompositeDiscovery(providers) + public fun createComposite(classLoader: ClassLoader): Discovery { + return CompositeDiscovery(classLoader, providers) } } } diff --git a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/CompositeDiscovery.kt b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/CompositeDiscovery.kt index 8ebc485a..726125a8 100644 --- a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/CompositeDiscovery.kt +++ b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/CompositeDiscovery.kt @@ -32,11 +32,11 @@ import org.opendc.harness.engine.discovery.DiscoveryRequest /** * A composite [Discovery] instance that combines the results of multiple delegate instances. */ -internal class CompositeDiscovery(providers: Iterable<DiscoveryProvider>) : Discovery { +internal class CompositeDiscovery(classLoader: ClassLoader, providers: Iterable<DiscoveryProvider>) : Discovery { /** * The [Discovery] instances to delegate to. */ - private val delegates = providers.map { it.create() } + private val delegates = providers.map { it.create(classLoader) } @OptIn(FlowPreview::class) override fun discover(request: DiscoveryRequest): Flow<ExperimentDefinition> { diff --git a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscovery.kt b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscovery.kt index 20708230..3fa3fe35 100644 --- a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscovery.kt +++ b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscovery.kt @@ -36,7 +36,7 @@ import org.opendc.harness.engine.discovery.DiscoverySelector /** * A [Discovery] implementation that discovers [Experiment] instances on the classpath. */ -internal class DslDiscovery : Discovery { +internal class DslDiscovery(private val classLoader: ClassLoader) : Discovery { /* * Lazily memoize the results of the classpath scan. */ @@ -84,6 +84,7 @@ internal class DslDiscovery : Discovery { */ private fun scan(): ScanResult { return ClassGraph() + .addClassLoader(classLoader) .enableClassInfo() .enableExternalClasses() .ignoreClassVisibility() diff --git a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscoveryProvider.kt b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscoveryProvider.kt index 987bc889..6a9bd599 100644 --- a/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscoveryProvider.kt +++ b/opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscoveryProvider.kt @@ -32,5 +32,5 @@ import org.opendc.harness.engine.discovery.DiscoveryProvider public class DslDiscoveryProvider : DiscoveryProvider { override val id: String = "dsl" - override fun create(): Discovery = DslDiscovery() + override fun create(classLoader: ClassLoader): Discovery = DslDiscovery(classLoader) } diff --git a/opendc-harness/opendc-harness-engine/src/test/kotlin/org/opendc/harness/EngineTest.kt b/opendc-harness/opendc-harness-engine/src/test/kotlin/org/opendc/harness/EngineTest.kt index 6f2989db..6955f7c5 100644 --- a/opendc-harness/opendc-harness-engine/src/test/kotlin/org/opendc/harness/EngineTest.kt +++ b/opendc-harness/opendc-harness-engine/src/test/kotlin/org/opendc/harness/EngineTest.kt @@ -50,7 +50,7 @@ internal class EngineTest { @Test fun discovery() { runBlocking { - val discovery = DiscoveryProvider.findById("dsl")?.create() + val discovery = DiscoveryProvider.findById("dsl")?.create(Thread.currentThread().contextClassLoader) assertNotNull(discovery) val res = mutableListOf<ExperimentDefinition>() discovery?.discover(DiscoveryRequest())?.toList(res) |
