blob: 116664d4c802e65fc9b6ecec3b2b7e83f9131e47 [file] [log] [blame]
RoomModel PingPongThreadTest {
import room.basic.types.int16
import room.basic.types.int32
import room.basic.service.timing.PTimer
import room.basic.service.timing.ATimingService
LogicalSystem System_PingPong {
SubSystemRef main: SubSystem_PingPong
}
SubSystemClass SubSystem_PingPong {
ActorRef application: PingPongTop
ActorRef services: ATimingService
LayerConnection ref application satisfied_by services.timer
LogicalThread mrPingThread
LogicalThread mrPong1Thread
LogicalThread mrPong2Thread
LogicalThread mrPong3Thread
LogicalThread timingThread
ActorInstanceMapping application/MrPing -> mrPingThread
ActorInstanceMapping application/MrPong1 -> mrPong1Thread
ActorInstanceMapping application/MrPong2 -> mrPong2Thread
ActorInstanceMapping application/MrPong3 -> mrPong3Thread
ActorInstanceMapping services -> timingThread
}
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 {
ctor '''caseId = etUnit_openAll("log", "PingPongThreadTest", "org.eclipse.etrice.generator.common.tests.PingPongThreadTest", "PingPongThreadTest_case");'''
dtor '''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()
}
}
}