diff --git a/theodolite/src/main/kotlin/theodolite/execution/operator/TheodoliteController.kt b/theodolite/src/main/kotlin/theodolite/execution/operator/TheodoliteController.kt index e5fbf578bc46af6bca5b4f545cdbc62ec58e21fa..a6a429a32d4234ec02ff94e9f4e8f8774aa634e2 100644 --- a/theodolite/src/main/kotlin/theodolite/execution/operator/TheodoliteController.kt +++ b/theodolite/src/main/kotlin/theodolite/execution/operator/TheodoliteController.kt @@ -8,7 +8,7 @@ import theodolite.benchmark.KubernetesBenchmark import theodolite.execution.TheodoliteExecutor import theodolite.model.crd.* import theodolite.patcher.ConfigOverrideModifier -import theodolite.util.ExecutionComparator +import theodolite.util.ExecutionStateComparator import java.lang.Thread.sleep private val logger = KotlinLogging.logger {} @@ -133,7 +133,7 @@ class TheodoliteController( * @return the next execution or null */ private fun getNextExecution(): BenchmarkExecution? { - val comparator = ExecutionComparator().compareByState(States.RESTART) + val comparator = ExecutionStateComparator(States.RESTART) val availableBenchmarkNames = getBenchmarks() .map { it.name } diff --git a/theodolite/src/main/kotlin/theodolite/util/ExecutionComparator.kt b/theodolite/src/main/kotlin/theodolite/util/ExecutionStateComparator.kt similarity index 52% rename from theodolite/src/main/kotlin/theodolite/util/ExecutionComparator.kt rename to theodolite/src/main/kotlin/theodolite/util/ExecutionStateComparator.kt index ab3b80768533a9de4826503cfebcce22fcf835ac..66ebe12d6505296682744c10c69f182f07d1a16e 100644 --- a/theodolite/src/main/kotlin/theodolite/util/ExecutionComparator.kt +++ b/theodolite/src/main/kotlin/theodolite/util/ExecutionStateComparator.kt @@ -3,16 +3,16 @@ package theodolite.util import theodolite.model.crd.ExecutionCRD import theodolite.model.crd.States -class ExecutionComparator { +class ExecutionStateComparator(private val preferredState: States): Comparator<ExecutionCRD> { /** * Simple comparator which can be used to order a list of [ExecutionCRD] such that executions with * status [States.RESTART] are before all other executions. */ - fun compareByState(preferredState: States) = Comparator<ExecutionCRD> { a, b -> - when { - (a == null && b == null) -> 0 - (a.status.executionState == preferredState.value) -> -1 + override fun compare(p0: ExecutionCRD, p1: ExecutionCRD): Int { + return when { + (p0 == null && p1 == null) -> 0 + (p0.status.executionState == preferredState.value) -> -1 else -> 1 } } diff --git a/theodolite/src/test/kotlin/theodolite/execution/operator/ExecutionCRDummy.kt b/theodolite/src/test/kotlin/theodolite/execution/operator/ExecutionCRDummy.kt index 2589319299cfa29f95216033ddc806d002f38663..56d46279e8effe1f0b5bf307cd896ebd5b7eb2ee 100644 --- a/theodolite/src/test/kotlin/theodolite/execution/operator/ExecutionCRDummy.kt +++ b/theodolite/src/test/kotlin/theodolite/execution/operator/ExecutionCRDummy.kt @@ -15,6 +15,10 @@ class ExecutionCRDummy(name: String, benchmark: String) { return this.executionCR } + fun getStatus() : ExecutionStatus { + return this.executionState + } + init { // configure metadata executionCR.spec = execution diff --git a/theodolite/src/test/kotlin/theodolite/util/ExecutionStateComparatorTest.kt b/theodolite/src/test/kotlin/theodolite/util/ExecutionStateComparatorTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..eec029f3878171eb2fd502bf68f549cfce793f23 --- /dev/null +++ b/theodolite/src/test/kotlin/theodolite/util/ExecutionStateComparatorTest.kt @@ -0,0 +1,33 @@ +package theodolite.util + +import io.quarkus.test.junit.QuarkusTest +import org.junit.Rule +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import theodolite.execution.operator.ExecutionCRDummy +import theodolite.model.crd.ExecutionCRD +import theodolite.model.crd.States + + +@QuarkusTest +class ExecutionStateComparatorTest { + + @Test + fun testCompare() { + val comparator = ExecutionStateComparator(States.RESTART) + val execution1 = ExecutionCRDummy("dummy1", "default-benchmark") + val execution2 = ExecutionCRDummy("dummy2", "default-benchmark") + execution1.getStatus().executionState = States.RESTART.value + execution2.getStatus().executionState = States.PENDING.value + val list = listOf(execution2.getCR(), execution1.getCR()) + + + assertEquals( + list.reversed(), + list.sortedWith(comparator) + ) + } + +} \ No newline at end of file