summaryrefslogtreecommitdiff
path: root/opendc-harness/opendc-harness-engine
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-harness/opendc-harness-engine')
-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
-rw-r--r--opendc-harness/opendc-harness-engine/src/test/kotlin/org/opendc/harness/EngineTest.kt2
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)