RoomModel TCPTest {
import room.basic.test.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Tests.room"
import room.basic.types.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Types.room"
import room.basic.service.tcp.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/TcpService.room"
ActorClass TCPTestTop {
@TestInstance
Structure {
ActorRef ref0: ATcpServer
ActorRef ref1 [ 5 ]: ATcpClient
ActorRef ref2: Tester
Binding ref2.p1 and ref0.PayloadPort
Binding ref2.p0 and ref0.ControlPort
Binding ref2.p2 and ref1.ControlPort
Binding ref2.p3 and ref1.PayloadPort
}
Behavior { }
}
ActorClass Tester {
Interface {
conjugated Port p0: PTcpControl
conjugated Port p1: PTcpPayload
conjugated Port p2 [*]: PTcpControl
conjugated Port p3 [5]: PTcpPayload
}
Structure {
external Port p0
external Port p1
external Port p2
external Port p3
Attribute controlData:DTcpControl
Attribute testData:DTcpPayload
Attribute counter:int32
Attribute resultPattern:int32
Attribute pattern:int32
Attribute caseId: int32
Attribute resultlist[3]: int16 = "{1,2,3}"
}
Behavior {
ctor {
"caseId = etUnit_openAll(\"log\", \"TCPTest\", \"org.eclipse.etrice.generator.java.tests.TCPTest\", \"TCPTest_case\");"
}
dtor {
"etUnit_closeAll(caseId);"
}
StateMachine {
Transition init: initial -> state0 {
action {
"EXPECT_ORDER_START(caseId,resultlist,3);"
"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);"
"// open Server"
"controlData.setIPAddr(\"127.0.0.1\");"
"controlData.setTcpPort(4711);"
"p0.open(controlData);"
}
}
Transition tr0: state0 -> state1 {
triggers {
<established: p0>
}
action {
"// open 5 clients"
"for (int i=0;i<p2.getReplication();i++){"
"p2[i].open(controlData);"
"}"
"counter=0;"
}
}
Transition tr1: state1 -> cp cp0 {
triggers {
<established: p2>
}
action {
"counter++;"
}
}
Transition tr4: cp cp0 -> state1
Transition tr5: cp cp0 -> state2 {
cond {
"counter>=p2.getReplication()"
}
action {
"String s=new String (\"Test!\");"
"testData.setData(s.getBytes());"
"testData.setLength(s.length());"
"testData.setConnectionId(0);"
"for (int i=0; i<p3.getReplication();i++){"
"\tp3[i].send(testData);"
"}"
"counter=0;"
"resultPattern=0;"
}
}
Transition tr8: state2 -> cp cp2 {
triggers {
<receive: p3>
}
action {
"resultPattern+=p3.getIndexOf(ifitem);"
"//System.out.printf(\"c:%d, Idx:%d!\\n\", counter,p3.getIndexOf(ifitem));"
"counter++;"
}
}
Transition tr9: cp cp2 -> state2
Transition tr10: cp cp2 -> cp cp1 {
cond {
"counter>=p2.getReplication()"
}
action {
"int i;"
"p0.close();"
"// close all clients"
"p2.close();"
"pattern=0;"
"for (i=0;i<p2.getReplication();i++){"
"\tpattern+=i;"
"}"
}
}
Transition tr3: state2 -> state2 {
triggers {
<receive: p1>
}
action {
"p1.send(transitionData);"
}
}
Transition tr2: cp cp1 -> test_failed
Transition tr6: cp cp1 -> test_ok {
cond {
"pattern==resultPattern"
}
}
ChoicePoint cp0
ChoicePoint cp2
ChoicePoint cp1
State state0
State state1
State state2
State test_ok {
entry {
"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 2);"
"EXPECT_ORDER_END(caseId,\"<|MODEL_LOCATION|>\", 3);"
"etUnit_testFinished(caseId);"
}
}
State test_failed {
entry {
"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);"
"EXPECT_ORDER_END(caseId,\"<|MODEL_LOCATION|>\", 3);"
"etUnit_testFinished(caseId);"
}
}
}
}
}
}