blob: 09f3a06d666438d4d821b3a85d3d1a28d9cc4a5f [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// 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