summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt54
-rw-r--r--simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt10
-rw-r--r--simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt2
3 files changed, 43 insertions, 23 deletions
diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt
index 65a0604d..a36f1f9b 100644
--- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt
+++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt
@@ -51,38 +51,48 @@ public class ExperimentEngine(
*
* @param root The experiment to execute.
*/
- @OptIn(InternalCoroutinesApi::class)
- public suspend fun execute(root: ExperimentDefinition): Unit = supervisorScope {
+ public suspend fun execute(root: ExperimentDefinition) {
listener.experimentStarted(root)
try {
- strategy.generate(root)
- .asFlow()
- .map { scenario ->
- listener.scenarioStarted(scenario)
- scenario
- }
- .buffer(100)
- .collect { scenario ->
- val jobs = (0 until repeats).map { repeat ->
- val worker = scheduler.allocate()
+ supervisorScope {
+ strategy.generate(root)
+ .asFlow()
+ .map { scenario ->
+ listener.scenarioStarted(scenario)
+ scenario
+ }
+ .buffer(100)
+ .collect { scenario ->
launch {
- val trial = Trial(scenario, repeat)
+ val jobs = (0 until repeats).map { repeat ->
+ val worker = scheduler.allocate()
+ launch {
+ val trial = Trial(scenario, repeat)
+ try {
+ listener.trialStarted(trial)
+ worker.dispatch(trial)
+ listener.trialFinished(trial, null)
+ } catch (e: Throwable) {
+ listener.trialFinished(trial, e)
+ throw e
+ }
+ }
+ }
+
try {
- listener.trialStarted(trial)
- worker.dispatch(trial)
- listener.trialFinished(trial, null)
+ jobs.joinAll()
+ listener.scenarioFinished(scenario, null)
+ } catch (e: CancellationException) {
+ listener.scenarioFinished(scenario, null)
+ throw e
} catch (e: Throwable) {
- listener.trialFinished(trial, e)
+ listener.scenarioFinished(scenario, e)
}
}
}
+ }
- launch {
- jobs.joinAll()
- listener.scenarioFinished(scenario, null)
- }
- }
listener.experimentFinished(root, null)
} catch (e: Throwable) {
listener.experimentFinished(root, e)
diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt
index 58791549..9e2b629d 100644
--- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt
+++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt
@@ -24,11 +24,13 @@ package org.opendc.harness.runner.junit5
import org.junit.platform.engine.*
import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor
+import org.junit.platform.engine.support.descriptor.ClassSource
import org.junit.platform.engine.support.descriptor.EngineDescriptor
import org.opendc.harness.api.ExperimentDefinition
import org.opendc.harness.api.Scenario
import org.opendc.harness.api.Trial
import org.opendc.harness.engine.ExperimentExecutionListener
+import java.util.*
/**
* An [ExperimentExecutionListener] that notifies JUnit platform of the progress of the experiment trials.
@@ -121,6 +123,14 @@ public class JUnitExperimentExecutionListener(
override fun mayRegisterTests(): Boolean = true
override fun toString(): String = "ExperimentDescriptor"
+
+ override fun getSource(): Optional<TestSource> {
+ val cls = meta["class.name"] as? String
+ return if (cls != null)
+ Optional.of(ClassSource.from(cls))
+ else
+ Optional.empty()
+ }
}
}
diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt
index 0a420405..ab7367b8 100644
--- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt
+++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt
@@ -47,7 +47,7 @@ public class OpenDCTestEngine : TestEngine {
*/
private val logger = KotlinLogging.logger {}
- override fun getId(): String = "opendc"
+ override fun getId(): String = "opendc-harness"
override fun getGroupId(): Optional<String> = Optional.of("org.opendc")