| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // Copyright (c) 2000-2019 Ericsson Telecom AB // |
| // // |
| // All rights reserved. This program and the accompanying materials // |
| // are made available under the terms of the Eclipse Public License v2.0 // |
| // which accompanies this distribution, and is available at // |
| // https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /////////////////////////////////////////////////////////// |
| // Module: RendezvousServer_test |
| // |
| // Purpose: |
| // Creates and manages a RendezvousServer to provide synchronization among various entities. |
| // |
| /////////////////////////////////////////////////////////// |
| |
| module EPTF_Rendezvous_test |
| { |
| |
| //========================================================================= |
| // Import Part |
| //========================================================================= |
| |
| import from EPTF_CLL_RendezvousClient_Functions all; |
| import from EPTF_CLL_Rendezvous_Functions all; |
| import from EPTF_CLL_Rendezvous_Definitions all; |
| |
| import from EPTF_CLL_Base_Functions all; |
| import from EPTF_CLL_Base_Definitions all; |
| import from EPTF_CLL_Common_Definitions all; |
| import from EPTF_CLL_Semaphore_Functions all; |
| |
| //========================================================================= |
| //Component Types |
| //======================================================================== |
| |
| type component SYSTEM_CT{ |
| } |
| |
| type component MAIN_CT extends EPTF_Base_CT{ |
| } |
| |
| type component Client_CT extends EPTF_RendezvousClient_CT{ |
| } |
| |
| //========================================================================= |
| //Functions |
| //========================================================================= |
| |
| function f_RendezvousClient_Behaviour(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| var integer vl_Idx1,vl_Idx2; |
| vl_Idx1:=f_EPTF_RendezvousClient_StartWaitForATrigger(10); |
| vl_Idx2:=f_EPTF_RendezvousClient_StartWaitForNTrigger(11,3); |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx2)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx1)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| function f_RendezvousClient_Behaviour2(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| // create a semaphore to confuse the rendezvous server: |
| var integer vl_dummySemaphore := f_EPTF_Semaphore_new(); |
| |
| var integer vl_Idx1,vl_Idx2; |
| vl_Idx1:=f_EPTF_RendezvousClient_StartWaitForATrigger(10); |
| vl_Idx2:=f_EPTF_RendezvousClient_StartWaitForNTrigger(11,2); |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx2)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx1)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_stopAll(pass); |
| } |
| |
| function f_RendezvousClient_Behaviour3(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| timer t_wait := 0.5; |
| t_wait.start; t_wait.timeout; // makes sure that this component starts slowest |
| |
| |
| var integer vl_Idx1,vl_Idx2; |
| vl_Idx1:=f_EPTF_RendezvousClient_StartWaitForATrigger(10); |
| vl_Idx2:=f_EPTF_RendezvousClient_StartWaitForNTrigger(11,2); |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx2)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx1)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| |
| |
| function f_RendezvousClient_WaitForATrigger_Behaviour1(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| var integer vl_Idx; |
| vl_Idx:=f_EPTF_RendezvousClient_StartWaitForATrigger(10); |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| |
| function f_RendezvousClient_WaitForATrigger_Behaviour2(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| var EPTF_IntegerList vl_IdxList; |
| for (var integer i:=0;i<100;i:=i+1){ |
| vl_IdxList[i]:=f_EPTF_RendezvousClient_StartWaitForATrigger(i); |
| } |
| |
| for (var integer j:=0;j<100;j:=j+1){ |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_IdxList[j])) |
| { |
| log("---Trigger received---"); |
| } |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| function f_RendezvousClient_WaitForNTrigger_Behaviour1(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| var integer vl_Idx; |
| vl_Idx:=f_EPTF_RendezvousClient_StartWaitForNTrigger(10,100); |
| |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_Idx)) |
| { |
| log("---Trigger received---"); |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| function f_RendezvousClient_WaitForNTrigger_Behaviour2(in charstring pl_selfName, in |
| EPTF_Rendezvous_CT pl_server) runs on Client_CT{ |
| log("----- Client Behaviour START -------"); |
| f_EPTF_RendezvousClient_init_CT(pl_selfName,pl_server); |
| |
| var EPTF_IntegerList vl_IdxList; |
| for (var integer i:=0;i<100;i:=i+1){ |
| vl_IdxList[i]:=f_EPTF_RendezvousClient_StartWaitForNTrigger(i,3); |
| } |
| |
| for (var integer j:=0;j<100;j:=j+1){ |
| if(f_EPTF_RendezvousClient_WaitForResponse(vl_IdxList[j])) |
| { |
| log("---Trigger received---"); |
| } |
| } |
| |
| setverdict(pass); |
| log("----- Client Behaviour stop -------"); |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| |
| function f_RendezvousServer_behaviour(charstring pl_selfName) runs on EPTF_Rendezvous_CT { |
| log("----- RendezvousServer START -------"); |
| f_EPTF_Rendezvous_init_CT(pl_selfName); |
| |
| f_EPTF_Base_wait4Shutdown(); |
| f_EPTF_Base_cleanup_CT(); |
| log("----- RendezvousServer shutdown -------"); |
| } |
| |
| //========================================================================= |
| // Testcases |
| //========================================================================= |
| |
| //========================================================================= |
| // Testcase: tc_EPTF_Rendezvous_BaseTest |
| //========================================================================= |
| |
| testcase tc_EPTF_Rendezvous_BaseTest() runs on MAIN_CT system SYSTEM_CT{ |
| |
| //Server |
| var EPTF_Rendezvous_CT ct_server := EPTF_Rendezvous_CT.create; |
| |
| //Starting Server |
| ct_server.start(f_RendezvousServer_behaviour("RendezvousServer")); |
| |
| //Client1 |
| var Client_CT ct_client1 := Client_CT.create; |
| //Starting Client |
| ct_client1.start(f_RendezvousClient_Behaviour("RendezvousClient1", ct_server)); |
| |
| //Client2 |
| var Client_CT ct_client2 := Client_CT.create; |
| //Starting Client |
| ct_client2.start(f_RendezvousClient_Behaviour("RendezvousClient2", ct_server)); |
| |
| //Client3 |
| var Client_CT ct_client3 := Client_CT.create; |
| //Starting Client |
| ct_client3.start(f_RendezvousClient_Behaviour("RendezvousClient3", ct_server)); |
| |
| timer T_main := 10.0; |
| T_main.start; |
| alt { |
| [] ct_server.done {} |
| [] T_main.timeout{} |
| } |
| //all component.done; |
| f_EPTF_Base_cleanup_CT(); |
| |
| } |
| |
| //========================================================================= |
| // Testcase: tc_EPTF_Rendezvous_BaseTestWithSemaphore |
| //========================================================================= |
| |
| testcase tc_EPTF_Rendezvous_BaseTestWithSemaphore() runs on MAIN_CT system SYSTEM_CT{ |
| |
| f_EPTF_Base_init_CT("MTC"); |
| //Server |
| var EPTF_Rendezvous_CT ct_server := EPTF_Rendezvous_CT.create; |
| |
| //Starting Server |
| ct_server.start(f_RendezvousServer_behaviour("RendezvousServer")); |
| |
| //Client1 |
| var Client_CT ct_client1 := Client_CT.create; |
| //Starting Client |
| ct_client1.start(f_RendezvousClient_Behaviour2("RendezvousClient1", ct_server)); |
| |
| //Client2 |
| var Client_CT ct_client2 := Client_CT.create; |
| //Starting Client |
| ct_client2.start(f_RendezvousClient_Behaviour3("RendezvousClient2", ct_server)); |
| |
| |
| timer T_main := 10.0; |
| T_main.start; |
| alt { |
| [] ct_server.done {} |
| [] T_main.timeout{ |
| setverdict(fail); |
| } |
| } |
| //all component.done; |
| f_EPTF_Base_cleanup_CT(); |
| |
| } |
| |
| //========================================================================= |
| // Testcase: tc_EPTF_Rendezvous_WaitForATriggerWith100Clients |
| //========================================================================= |
| |
| testcase tc_EPTF_Rendezvous_WaitForATriggerWith100Clients() runs on MAIN_CT system SYSTEM_CT{ |
| |
| //Server |
| var EPTF_Rendezvous_CT ct_server := EPTF_Rendezvous_CT.create; |
| |
| //Starting Server |
| ct_server.start(f_RendezvousServer_behaviour("RendezvousServer")); |
| |
| //Starting Clients |
| for(var integer i:=1;i<=100;i:=i+1) |
| { |
| var Client_CT ct_client := Client_CT.create; |
| //Starting Client |
| ct_client.start(f_RendezvousClient_WaitForATrigger_Behaviour1("RendezvousClient"&int2str(i), ct_server)); |
| } |
| |
| timer T_main := 10.0; |
| T_main.start; |
| alt { |
| [] ct_server.done {} |
| [] T_main.timeout{} |
| } |
| //all component.done; |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| //========================================================================= |
| // Testcase: tc_EPTF_Rendezvous_WaitForATriggerWith100Rendezvous |
| //========================================================================= |
| |
| testcase tc_EPTF_Rendezvous_WaitForATriggerWith100Rendezvous() runs on MAIN_CT system SYSTEM_CT{ |
| |
| //Server |
| var EPTF_Rendezvous_CT ct_server := EPTF_Rendezvous_CT.create; |
| |
| //Starting Server |
| ct_server.start(f_RendezvousServer_behaviour("RendezvousServer")); |
| |
| //Client1 |
| var Client_CT ct_client1 := Client_CT.create; |
| //Starting Client |
| ct_client1.start(f_RendezvousClient_WaitForATrigger_Behaviour2("RendezvousClient1", ct_server)); |
| |
| //Client2 |
| var Client_CT ct_client2 := Client_CT.create; |
| //Starting Client |
| ct_client2.start(f_RendezvousClient_WaitForATrigger_Behaviour2("RendezvousClient2", ct_server)); |
| |
| |
| timer T_main := 10.0; |
| T_main.start; |
| alt { |
| [] ct_server.done {} |
| [] T_main.timeout{} |
| } |
| //all component.done; |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| //========================================================================= |
| // Testcase: tc_EPTF_Rendezvous_WaitForNTriggerWith100Clients |
| //========================================================================= |
| |
| testcase tc_EPTF_Rendezvous_WaitForNTriggerWith100Clients() runs on MAIN_CT system SYSTEM_CT{ |
| |
| //Server |
| var EPTF_Rendezvous_CT ct_server := EPTF_Rendezvous_CT.create; |
| |
| //Starting Server |
| ct_server.start(f_RendezvousServer_behaviour("RendezvousServer")); |
| |
| //Starting Clients |
| for(var integer i:=1;i<=100;i:=i+1) |
| { |
| var Client_CT ct_client := Client_CT.create; |
| //Starting Client |
| ct_client.start(f_RendezvousClient_WaitForNTrigger_Behaviour1("RendezvousClient"&int2str(i), ct_server)); |
| } |
| |
| timer T_main := 10.0; |
| T_main.start; |
| alt { |
| [] ct_server.done {} |
| [] T_main.timeout{} |
| } |
| //all component.done; |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| //========================================================================= |
| // Testcase: tc_EPTF_Rendezvous_WaitForNTriggerWith100Rendezvous |
| //========================================================================= |
| |
| testcase tc_EPTF_Rendezvous_WaitForNTriggerWith100Rendezvous() runs on MAIN_CT system SYSTEM_CT{ |
| |
| //Server |
| var EPTF_Rendezvous_CT ct_server := EPTF_Rendezvous_CT.create; |
| |
| //Starting Server |
| ct_server.start(f_RendezvousServer_behaviour("RendezvousServer")); |
| |
| //Starting 3 Clients |
| for(var integer i:=1;i<=3;i:=i+1) |
| { |
| var Client_CT ct_client := Client_CT.create; |
| //Starting Client |
| ct_client.start(f_RendezvousClient_WaitForNTrigger_Behaviour2("RendezvousClient"&int2str(i), ct_server)); |
| } |
| |
| timer T_main := 10.0; |
| T_main.start; |
| alt { |
| [] ct_server.done {} |
| [] T_main.timeout{} |
| } |
| //all component.done; |
| f_EPTF_Base_cleanup_CT(); |
| } |
| |
| |
| control |
| { |
| execute(tc_EPTF_Rendezvous_BaseTest()); |
| execute(tc_EPTF_Rendezvous_BaseTestWithSemaphore()); |
| execute(tc_EPTF_Rendezvous_WaitForATriggerWith100Clients()); |
| execute(tc_EPTF_Rendezvous_WaitForATriggerWith100Rendezvous()); |
| execute(tc_EPTF_Rendezvous_WaitForNTriggerWith100Clients()); |
| execute(tc_EPTF_Rendezvous_WaitForNTriggerWith100Rendezvous()); |
| } |
| |
| } // end of module |