summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-simulator/src/test
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2025-10-02 15:32:32 +0200
committerGitHub <noreply@github.com>2025-10-02 15:32:32 +0200
commit48ddc082ea301f54717a8ab7c54023f73220e4eb (patch)
treee76ee573abde2fe1d8ca874d33b34cba72e478c8 /opendc-compute/opendc-compute-simulator/src/test
parent2ba57fd06560f096def01a31f8e47827f0f01da0 (diff)
Improved FilterScheduler using a constantly sorting array (#374)
Updated FilterScheduler.kt for performance using a constantly sorted Array
Diffstat (limited to 'opendc-compute/opendc-compute-simulator/src/test')
-rw-r--r--opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt112
1 files changed, 43 insertions, 69 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
index 5d71d5de..a5312c53 100644
--- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
+++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
@@ -41,7 +41,6 @@ import org.opendc.compute.simulator.scheduler.filters.VCpuFilter
import org.opendc.compute.simulator.scheduler.filters.VGpuCapacityFilter
import org.opendc.compute.simulator.scheduler.filters.VGpuFilter
import org.opendc.compute.simulator.scheduler.weights.CoreRamWeigher
-import org.opendc.compute.simulator.scheduler.weights.InstanceCountWeigher
import org.opendc.compute.simulator.scheduler.weights.RamWeigher
import org.opendc.compute.simulator.scheduler.weights.VCpuWeigher
import org.opendc.compute.simulator.service.HostView
@@ -88,7 +87,7 @@ internal class FilterSchedulerTest {
}
@Test
- fun testNoFiltersAndSchedulers() {
+ fun testNoFiltersAndWeighters() {
val scheduler =
FilterScheduler(
filters = emptyList(),
@@ -120,40 +119,40 @@ internal class FilterSchedulerTest {
)
}
- @Test
- fun testNoFiltersAndSchedulersRandom() {
- val scheduler =
- FilterScheduler(
- filters = emptyList(),
- weighers = emptyList(),
- subsetSize = Int.MAX_VALUE,
- random = Random(1),
- )
-
- val hostA = mockk<HostView>()
- every { hostA.host.getState() } returns HostState.DOWN
- every { hostA.host.getType() } returns "A"
- every { hostA.host.isEmpty() } returns true
-
- val hostB = mockk<HostView>()
- every { hostB.host.getState() } returns HostState.UP
- every { hostB.host.getType() } returns "B"
- every { hostB.host.isEmpty() } returns true
-
- scheduler.addHost(hostA)
- scheduler.addHost(hostB)
-
- val req = mockk<SchedulingRequest>()
- every { req.task.flavor.cpuCoreCount } returns 2
- every { req.task.flavor.memorySize } returns 1024
- every { req.isCancelled } returns false
-
- // Make sure we get the first host both times
- assertAll(
- { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) },
- { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) },
- )
- }
+// @Test
+// fun testNoFiltersAndSchedulersRandom() {
+// val scheduler =
+// FilterScheduler(
+// filters = emptyList(),
+// weighers = emptyList(),
+// subsetSize = Int.MAX_VALUE,
+// random = Random(1),
+// )
+//
+// val hostA = mockk<HostView>()
+// every { hostA.host.getState() } returns HostState.DOWN
+// every { hostA.host.getType() } returns "A"
+// every { hostA.host.isEmpty() } returns true
+//
+// val hostB = mockk<HostView>()
+// every { hostB.host.getState() } returns HostState.UP
+// every { hostB.host.getType() } returns "B"
+// every { hostB.host.isEmpty() } returns true
+//
+// scheduler.addHost(hostA)
+// scheduler.addHost(hostB)
+//
+// val req = mockk<SchedulingRequest>()
+// every { req.task.flavor.cpuCoreCount } returns 2
+// every { req.task.flavor.memorySize } returns 1024
+// every { req.isCancelled } returns false
+//
+// // Make sure we get the first host both times
+// assertAll(
+// { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) },
+// { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) },
+// )
+// }
@Test
fun testHostIsDown() {
@@ -271,6 +270,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.provisionedCpuCores } returns 3
+ every { hostA.availableCpuCores } returns 1
every { hostA.host.getType() } returns "A"
every { hostA.host.isEmpty() } returns true
@@ -278,6 +278,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.provisionedCpuCores } returns 0
+ every { hostB.availableCpuCores } returns 4
every { hostB.host.getType() } returns "B"
every { hostB.host.isEmpty() } returns true
@@ -591,6 +592,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.availableMemory } returns 1024
+ every { hostA.availableCpuCores } returns 4
every { hostA.host.getType() } returns "A"
every { hostA.host.isEmpty() } returns true
@@ -598,6 +600,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.availableMemory } returns 512
+ every { hostB.availableCpuCores } returns 4
every { hostB.host.getType() } returns "B"
every { hostB.host.isEmpty() } returns true
@@ -624,6 +627,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(12 * 2600.0, 12, 2048)
every { hostA.availableMemory } returns 1024
+ every { hostA.availableCpuCores } returns 12
every { hostA.host.getType() } returns "A"
every { hostA.host.isEmpty() } returns true
@@ -631,6 +635,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.availableMemory } returns 512
+ every { hostB.availableCpuCores } returns 4
every { hostB.host.getType() } returns "B"
every { hostB.host.isEmpty() } returns true
@@ -657,6 +662,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.provisionedCpuCores } returns 2
+ every { hostA.availableCpuCores } returns 4
every { hostA.host.getType() } returns "A"
every { hostA.host.isEmpty() } returns true
@@ -664,39 +670,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.provisionedCpuCores } returns 0
- every { hostB.host.getType() } returns "B"
- every { hostB.host.isEmpty() } returns true
-
- scheduler.addHost(hostA)
- scheduler.addHost(hostB)
-
- val req = mockk<SchedulingRequest>()
- every { req.task.flavor.cpuCoreCount } returns 2
- every { req.task.flavor.memorySize } returns 1024
- every { req.isCancelled } returns false
-
- assertEquals(hostB, scheduler.select(mutableListOf(req).iterator()).host)
- }
-
- @Test
- fun testInstanceCountWeigher() {
- val scheduler =
- FilterScheduler(
- filters = emptyList(),
- weighers = listOf(InstanceCountWeigher(multiplier = -1.0)),
- )
-
- val hostA = mockk<HostView>()
- every { hostA.host.getState() } returns HostState.UP
- every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { hostA.instanceCount } returns 2
- every { hostA.host.getType() } returns "A"
- every { hostA.host.isEmpty() } returns true
-
- val hostB = mockk<HostView>()
- every { hostB.host.getState() } returns HostState.UP
- every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { hostB.instanceCount } returns 0
+ every { hostB.availableCpuCores } returns 4
every { hostB.host.getType() } returns "B"
every { hostB.host.isEmpty() } returns true