diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-05-04 20:31:48 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-05-05 10:03:18 +0200 |
| commit | 6466d5e1b8da4582434f02dff2ab56e8f736ef85 (patch) | |
| tree | e8c8e6b96c7abdd80fa0a3198da5776488cd06fe /opendc-harness/opendc-harness-engine/src | |
| parent | 4a8b32d288ba3ee986ecef7933fa77554d34e762 (diff) | |
harness: Extend Harness CLI with classpath options
This change adds support for appending libraries to the classpath when
searching for experiments to run using the OpenDC Harness command line
interface.
Diffstat (limited to 'opendc-harness/opendc-harness-engine/src')
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) |
