From 18e3d6f9bc7f1ff909fab9d1d631aa272b5b424c Mon Sep 17 00:00:00 2001 From: "stu126940@mail.uni-kiel.de" <stu126940@mail.uni-kiel.de> Date: Thu, 22 Jul 2021 16:19:12 +0200 Subject: [PATCH] Restructure the comparator class --- .../operator/TheodoliteController.kt | 4 +-- ...parator.kt => ExecutionStateComparator.kt} | 10 +++--- .../execution/operator/ExecutionCRDummy.kt | 4 +++ .../util/ExecutionStateComparatorTest.kt | 33 +++++++++++++++++++ 4 files changed, 44 insertions(+), 7 deletions(-) rename theodolite/src/main/kotlin/theodolite/util/{ExecutionComparator.kt => ExecutionStateComparator.kt} (52%) create mode 100644 theodolite/src/test/kotlin/theodolite/util/ExecutionStateComparatorTest.kt diff --git a/theodolite/src/main/kotlin/theodolite/execution/operator/TheodoliteController.kt b/theodolite/src/main/kotlin/theodolite/execution/operator/TheodoliteController.kt index e5fbf578b..a6a429a32 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 ab3b80768..66ebe12d6 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 258931929..56d46279e 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 000000000..eec029f38 --- /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 -- GitLab