summaryrefslogtreecommitdiff
path: root/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2018-10-28 12:50:27 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2019-05-06 18:19:23 +0200
commitdecb8fb5297c7772f5319a47c784d44bf8bdbe9c (patch)
tree4151b2ffe1b99a3bfe91a8fd1b7dfeade91a5ec0 /opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega
parentd37a139b357ded9ba048c10ccad320a0d8412f0b (diff)
refactor: Introduce initial API design for 2.x
This change introduces the new API design that will be introduced in the 2.x versions of the OpenDC Simulator. This changes focuses on simplifying simulation primitives provided by the simulator and introduces a new concept of actors based on the model designed by the Akka Typed project. For now, the old simulation models have been removed from the branch, but will be ported back as this branch is being finalized.
Diffstat (limited to 'opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega')
-rw-r--r--opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/ProcessTest.kt61
-rw-r--r--opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/SmokeTest.kt169
2 files changed, 0 insertions, 230 deletions
diff --git a/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/ProcessTest.kt b/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/ProcessTest.kt
deleted file mode 100644
index 334dca41..00000000
--- a/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/ProcessTest.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * MIT License
- *
- * Copyright (c) 2018 atlarge-research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package com.atlarge.opendc.omega
-
-import com.atlarge.opendc.simulator.Bootstrap
-import com.atlarge.opendc.simulator.Context
-import com.atlarge.opendc.simulator.Process
-import org.junit.jupiter.api.Test
-import kotlin.coroutines.experimental.suspendCoroutine
-
-/**
- * A test suite for processes in simulation.
- *
- * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl)
- */
-internal class ProcessTest {
- object FreezeProcess : Process<Unit, Unit> {
- override val initialState = Unit
- override suspend fun Context<Unit, Unit>.run() {
- receive()
- suspendCoroutine<Unit> {}
- }
- }
-
- /**
- * Test whether the simulation will not resume an already resumed continuation
- * of a process.
- */
- @Test
- fun `simulation will not resume frozen process`() {
- val bootstrap: Bootstrap<Unit> = Bootstrap.create { ctx ->
- ctx.register(FreezeProcess)
- ctx.schedule("Hello", destination = FreezeProcess, delay = 1)
- ctx.schedule("Hello", destination = FreezeProcess, delay = 1)
- }
- val simulation = OmegaKernel.create(bootstrap)
- simulation.run()
- }
-}
diff --git a/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/SmokeTest.kt b/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/SmokeTest.kt
deleted file mode 100644
index b056837c..00000000
--- a/opendc-kernel-omega/src/test/kotlin/com/atlarge/opendc/omega/SmokeTest.kt
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * MIT License
- *
- * Copyright (c) 2017 atlarge-research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package com.atlarge.opendc.omega
-
-import com.atlarge.opendc.simulator.Bootstrap
-import com.atlarge.opendc.simulator.Context
-import com.atlarge.opendc.simulator.Process
-import com.atlarge.opendc.simulator.instrumentation.Instrument
-import com.atlarge.opendc.simulator.kernel.Simulation
-import kotlinx.coroutines.experimental.Unconfined
-import kotlinx.coroutines.experimental.async
-import kotlinx.coroutines.experimental.channels.consumeEach
-import org.junit.jupiter.api.Assertions.assertEquals
-import org.junit.jupiter.api.Test
-import org.junit.jupiter.api.assertThrows
-
-/**
- * This test suite checks for smoke when running a large amount of simulations.
- *
- * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl)
- */
-internal class SmokeTest {
- class EchoProcess : Process<Unit, Unit> {
- override val initialState = Unit
- override suspend fun Context<Unit, Unit>.run() {
- while (true) {
- val msg = receive()
- sender?.send(msg)
- }
- }
- }
-
- /**
- * Run a large amount of simulations and test if any exceptions occur.
- */
- @Test
- fun smoke() {
- val n = 1000
- val messages = 100
- val bootstrap: Bootstrap<Unit> = Bootstrap.create { ctx ->
- repeat(n) {
- EchoProcess().also {
- ctx.register(it)
-
- for (i in 1 until messages) {
- ctx.schedule(i, it, delay = i.toLong())
- }
- }
- }
- }
- val simulation = OmegaKernel.create(bootstrap)
- simulation.run()
- }
-
- object NullProcess : Process<Unit, Unit> {
- override val initialState = Unit
- override suspend fun Context<Unit, Unit>.run() {}
- }
-
- /**
- * Test if the kernel allows sending messages to [Context] instances that have already stopped.
- */
- @Test
- fun `sending message to process that has gracefully stopped`() {
- val process = NullProcess
- val bootstrap: Bootstrap<Unit> = Bootstrap.create { ctx ->
- process.also {
- ctx.register(it)
- ctx.schedule(0, it)
- }
- }
-
- val simulation = OmegaKernel.create(bootstrap)
- simulation.run()
- }
-
- object CrashProcess : Process<Unit, Unit> {
- override val initialState = Unit
- override suspend fun Context<Unit, Unit>.run() {
- throw RuntimeException("This process should crash")
- }
- }
-
- /**
- * Test if the kernel allows sending messages to [Context] instances that have crashed.
- */
- @Test
- fun `sending message to process that has crashed`() {
- val process = CrashProcess
- val bootstrap: Bootstrap<Unit> = Bootstrap.create { ctx ->
- process.also {
- ctx.register(it)
- ctx.schedule(0, it)
- }
- }
-
- val simulation = OmegaKernel.create(bootstrap)
- assertThrows<RuntimeException> { simulation.run() }
- }
-
- class ModelProcess(private val value: Int) : Process<Boolean, Int> {
- override val initialState = false
- override suspend fun Context<Boolean, Int>.run() {
- assertEquals(value, model)
- state = true
- hold(10)
- }
- }
-
- /**
- * Test if the kernel allows access to the simulation model object.
- */
- @Test
- fun `access simulation model`() {
- val value = 1
- val process = ModelProcess(value)
- val bootstrap: Bootstrap<Int> = Bootstrap.create { ctx ->
- ctx.register(process)
- value
- }
-
- val kernel = OmegaKernel.create(bootstrap)
- kernel.run(5)
- }
-
-
- @Test
- fun `instrumentation works`() {
- val instrument: Instrument<Int, Unit> = {
- var value = 0
-
- for (i in 1..10) {
- send(value)
- value += 10
- hold(20)
- }
- }
-
- val simulation: Simulation<Unit> = OmegaKernel.create(Bootstrap.create { Unit })
- val stream = simulation.openPort().install(instrument)
-
- val res = async(Unconfined) {
- stream.consumeEach { println(it) }
- }
- simulation.run(100)
- }
-}