summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortjung2012-10-07 11:06:32 (EDT)
committertjung2012-10-07 11:06:32 (EDT)
commita4ffbead69d3f1da24fc8727b05ed00b9e541046 (patch)
tree40c62bfd9c74ff729237ee9305891ded934b1049
parentcac515a62c19103ebedbd71e0cf5b9f4e8e02552 (diff)
downloadorg.eclipse.etrice-a4ffbead69d3f1da24fc8727b05ed00b9e541046.zip
org.eclipse.etrice-a4ffbead69d3f1da24fc8727b05ed00b9e541046.tar.gz
org.eclipse.etrice-a4ffbead69d3f1da24fc8727b05ed00b9e541046.tar.bz2
[generator.common.tests] Thread tests added
-rw-r--r--tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadReplPortTest.room150
-rw-r--r--tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadTest.room155
2 files changed, 305 insertions, 0 deletions
diff --git a/tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadReplPortTest.room b/tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadReplPortTest.room
new file mode 100644
index 0000000..8b4f40d
--- /dev/null
+++ b/tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadReplPortTest.room
@@ -0,0 +1,150 @@
+RoomModel PingPongThreadTestReplPort {
+
+ import room.basic.service.timing.* from "TimingService.room"
+ import room.basic.types.* from "Types.room"
+
+ LogicalSystem System_PingPong {
+ SubSystemRef subsystem: SubSystem_PingPong
+ }
+
+ SubSystemClass SubSystem_PingPong {
+ ActorRef application: PingPongTop
+ ActorRef services: ATimingService
+ LayerConnection ref application satisfied_by services.timer
+ LogicalThread mrPingThread prio=5 {application.MrPing}
+ LogicalThread mrPong1Thread prio=5 {application.MrPong1}
+ LogicalThread mrPong2Thread prio=5 {application.MrPong2}
+ LogicalThread mrPong3Thread prio=5 {application.MrPong3}
+ }
+
+ ActorClass PingPongTop {
+ Structure {
+ ActorRef MrPing: MrPingActor
+ ActorRef MrPong1: MrPongActor1
+ ActorRef MrPong2: MrPongActor1
+ ActorRef MrPong3: MrPongActor1
+ Binding MrPing.PingPongPort and MrPong1.PingPongPort
+ Binding MrPing.PingPongPort and MrPong2.PingPongPort
+ Binding MrPing.PingPongPort3 and MrPong3.PingPongPort
+ }
+ Behavior { }
+ }
+
+ ActorClass MrPingActor {
+ Interface {
+ conjugated Port PingPongPort [*]: PingPongProtocol
+ conjugated Port PingPongPort3 : PingPongProtocol
+ }
+ Structure {
+ external Port PingPongPort
+ external Port PingPongPort3
+ SAP timer: PTimer
+ Attribute count : int32
+ Attribute pongCount : int32
+ Attribute caseId: int32
+ Attribute resultlist[23]: int16 = "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}"
+
+ }
+ Behavior {
+ Operation MrPingActor() {
+ "caseId = etUnit_openAll(\"tmp\", \"PingPongThreadTestReplPort\", \"org.eclipse.etrice.generator.common.tests.PingPongThreadTestReplPort\", \"PingPongThreadTestReplPort_case\");"
+ }
+ Operation ~MrPingActor() {
+ "etUnit_closeAll(caseId);"
+ }
+ StateMachine {
+ Transition tr0: initial -> waitForTimer {
+ action {
+ "count = 0;"
+ "timer.startTimeout(50);"
+ "EXPECT_ORDER_START(caseId,resultlist,23);"
+ "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);"
+ }
+ }
+ Transition tr1: waitForTimer -> waitForPong {
+ triggers {
+ <timeout: timer>
+ }
+ action {
+ "PingPongPort.get(0).ping();"
+ "PingPongPort.get(1).ping();"
+ "pongCount = 0;"
+ }
+ }
+ Transition tr3: waitForPong -> cp cp0 {
+ triggers {
+ <pong: PingPongPort>
+ }
+ action {
+ "pongCount++;"
+ }
+ }
+ Transition tr5: cp cp0 -> cp cp1 {
+ action {
+ "System.out.println(count);"
+ }
+ }
+ Transition tr6: cp cp0 -> waitForPong {
+ cond {
+ "pongCount < 2"
+ }
+ }
+ Transition tr2: cp cp1 -> test_finished
+ Transition tr4: cp cp1 -> waitForTimer {
+ cond {
+ "count<20"
+ }
+ action {
+ "timer.startTimeout(5);"
+ "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", count+2);"
+ "count++;"
+ }
+ }
+ ChoicePoint cp0
+ ChoicePoint cp1
+ State waitForTimer
+ State waitForPong
+ State test_finished {
+ entry {
+ "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 22);"
+ "EXPECT_ORDER_END(caseId,\"<|MODEL_LOCATION|>\", 23);"
+ "etUnit_testFinished(caseId);"
+ }
+ }
+ }
+ }
+ }
+
+ ActorClass MrPongActor1 {
+ Interface {
+ Port PingPongPort: PingPongProtocol
+ }
+ Structure {
+ external Port PingPongPort
+ }
+ Behavior {
+ StateMachine {
+ Transition tr0: initial -> waitForPing { }
+ Transition myTrigger: waitForPing -> waitForPing {
+ triggers {
+ <ping: PingPongPort>
+ }
+ action {
+ "PingPongPort.pong();"
+ }
+ }
+ State waitForPing
+ }
+ }
+ }
+
+ ProtocolClass PingPongProtocol {
+ incoming {
+ Message ping()
+ }
+ outgoing {
+ Message pong()
+ }
+ }
+
+} \ No newline at end of file
diff --git a/tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadTest.room b/tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadTest.room
new file mode 100644
index 0000000..65829e1
--- /dev/null
+++ b/tests/org.eclipse.etrice.generator.common.tests/models/PingPongThreadTest.room
@@ -0,0 +1,155 @@
+RoomModel PingPongThreadTest {
+
+ import room.basic.service.timing.* from "TimingService.room"
+ import room.basic.types.* from "Types.room"
+
+ LogicalSystem System_PingPong {
+ SubSystemRef subsystem: SubSystem_PingPong
+ }
+
+ SubSystemClass SubSystem_PingPong {
+ ActorRef application: PingPongTop
+ ActorRef services: ATimingService
+ LayerConnection ref application satisfied_by services.timer
+ LogicalThread mrPingThread prio=5 {application.MrPing}
+ LogicalThread mrPong1Thread prio=5 {application.MrPong1}
+ LogicalThread mrPong2Thread prio=5 {application.MrPong2}
+ LogicalThread mrPong3Thread prio=5 {application.MrPong3}
+ }
+
+ ActorClass PingPongTop {
+ Structure {
+ ActorRef MrPing: MrPingActor
+ ActorRef MrPong1: MrPongActor1
+ ActorRef MrPong2: MrPongActor1
+ ActorRef MrPong3: MrPongActor1
+ Binding MrPing.PingPongPort and MrPong1.PingPongPort
+ Binding MrPing.PingPongPort2 and MrPong2.PingPongPort
+ Binding MrPing.PingPongPort3 and MrPong3.PingPongPort
+ }
+ Behavior { }
+ }
+
+ ActorClass MrPingActor {
+ Interface {
+ conjugated Port PingPongPort : PingPongProtocol
+ conjugated Port PingPongPort2 : PingPongProtocol
+ conjugated Port PingPongPort3 : PingPongProtocol
+ }
+ Structure {
+ external Port PingPongPort
+ external Port PingPongPort2
+ external Port PingPongPort3
+ SAP timer: PTimer
+ Attribute count : int32
+ Attribute pongCount : int32
+ Attribute caseId: int32
+ Attribute resultlist[23]: int16 = "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}"
+
+ }
+ Behavior {
+ Operation MrPingActor() {
+ "caseId = etUnit_openAll(\"tmp\", \"PingPongThreadTest\", \"org.eclipse.etrice.generator.common.tests.PingPongThreadTest\", \"PingPongThreadTest_case\");"
+ }
+ Operation ~MrPingActor() {
+ "etUnit_closeAll(caseId);"
+ }
+ StateMachine {
+ Transition tr0: initial -> waitForTimer {
+ action {
+ "count = 0;"
+ "timer.startTimeout(10);"
+ "EXPECT_ORDER_START(caseId,resultlist,23);"
+ "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);"
+
+ }
+ }
+ Transition tr1: waitForTimer -> waitForPong {
+ triggers {
+ <timeout: timer>
+ }
+ action {
+ "PingPongPort.ping();"
+ "PingPongPort2.ping();"
+ "pongCount = 0;"
+ }
+ }
+ Transition tr3: waitForPong -> cp cp0 {
+ triggers {
+ <pong: PingPongPort2>
+ or
+ <pong: PingPongPort>
+ }
+ action {
+ "pongCount++;"
+ }
+ }
+ Transition tr5: cp cp0 -> cp cp1 {
+ action {
+ "System.out.println(count);"
+ }
+ }
+ Transition tr6: cp cp0 -> waitForPong {
+ cond {
+ "pongCount < 2"
+ }
+ }
+ Transition tr2: cp cp1 -> test_finished
+ Transition tr4: cp cp1 -> waitForTimer {
+ cond {
+ "count<20"
+ }
+ action {
+ "timer.startTimeout(5);"
+ "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", count+2);"
+ "count++;"
+ }
+ }
+ ChoicePoint cp0
+ ChoicePoint cp1
+ State waitForTimer
+ State waitForPong
+ State test_finished {
+ entry {
+ "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 22);"
+ "EXPECT_ORDER_END(caseId,\"<|MODEL_LOCATION|>\", 23);"
+ "etUnit_testFinished(caseId);"
+ }
+ }
+ }
+ }
+ }
+
+ ActorClass MrPongActor1 {
+ Interface {
+ Port PingPongPort: PingPongProtocol
+ }
+ Structure {
+ external Port PingPongPort
+ }
+ Behavior {
+ StateMachine {
+ Transition tr0: initial -> waitForPing { }
+ Transition myTrigger: waitForPing -> waitForPing {
+ triggers {
+ <ping: PingPongPort>
+ }
+ action {
+ "PingPongPort.pong();"
+ }
+ }
+ State waitForPing
+ }
+ }
+ }
+
+ ProtocolClass PingPongProtocol {
+ incoming {
+ Message ping()
+ }
+ outgoing {
+ Message pong()
+ }
+ }
+
+} \ No newline at end of file