summaryrefslogtreecommitdiff
path: root/opendc-harness/opendc-harness-engine/src/main
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-05-04 20:31:48 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-05-05 10:03:18 +0200
commit6466d5e1b8da4582434f02dff2ab56e8f736ef85 (patch)
treee8c8e6b96c7abdd80fa0a3198da5776488cd06fe /opendc-harness/opendc-harness-engine/src/main
parent4a8b32d288ba3ee986ecef7933fa77554d34e762 (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/main')
-rw-r--r--opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/discovery/DiscoveryProvider.kt6
-rw-r--r--opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/CompositeDiscovery.kt4
-rw-r--r--opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscovery.kt3
-rw-r--r--opendc-harness/opendc-harness-engine/src/main/kotlin/org/opendc/harness/engine/internal/DslDiscoveryProvider.kt2
4 files changed, 8 insertions, 7 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)
}