Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 856ba885551f3367bb3533340ac478447d072b09 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                      



                                                                    



                                                              








                                                                           
                                          



                                                                         
                                                             






























                                                                                                                         
                              
                                                                                                                                                                                                                          
                         
                              





                                                                         
                                                                          








                                                                                                 

                                                                         












                                                                                                        
                                                                              












                                                                        
                                                                         


















































                                                                                                       
 
RoomModel PingPongThreadReplPortTest {

	import room.basic.service.timing.* from "TimingService.room"
	import room.basic.types.* from "Types.room"

	LogicalSystem System_PingPongReplPort{
		SubSystemRef main : SubSystem_PingPongReplPort
	}
	
	SubSystemClass SubSystem_PingPongReplPort {
		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.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 {
			ctor {
				"caseId = etUnit_openAll(\"log/testlog\", \"PingPongThreadReplPortTest\", \"org.eclipse.etrice.generator.common.tests.PingPongThreadTestReplPort\", \"PingPongThreadTestReplPort_case\");"
			}
			dtor {
				"etUnit_closeAll(caseId);"
			}
			StateMachine {
				Transition tr0: initial -> waitForTimer {
					action {
						"count = 0;"
						"timer.startTimeout(200);"
						"EXPECT_ORDER_START(caseId,resultlist,23);"
						"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);"
					}
				}
				Transition tr1: waitForTimer -> waitForPong {
					triggers {
						<timeout: timer>
					}
					action {
						"PingPongPort[0].ping();"
						"PingPongPort[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(20);"
						"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()
		}
	}

}

Back to the top