blob: 7a08a8a7068ce1a40150fcdd64faf39000e64664 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v1.0 //
// which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_ILog_Transport_Functions
//
// Purpose:
// This module contains function definitions for demo of EPTF ILog
// Transport layer
//
// Module Parameters:
// -
//
// Module depends on:
// <EPTF_CLL_ILog_Functions>
//
// Current Owner:
// Jozsef Gyurusi (ethjgi)
//
// Last Review Date:
// -
//
// Detailed Comments:
// Public functions:
// <f_EPTF_ILog_Transport_init_CT>
// <f_EPTF_ILog_Transport_setResponseWeights>
// <f_EPTF_ILog_Transport_connect>
// <f_EPTF_ILog_Transport_disconnect>
// <f_EPTF_ILog_Transport_sendReq>
// <f_EPTF_ILog_Transport_addRespHandlerFn>
//
///////////////////////////////////////////////////////////
module EPTF_ILog_Transport_Functions {
import from EPTF_ILog_Transport_Definitions all;
import from EPTF_CLL_ILog_Functions all;
import from EPTF_CLL_Common_Definitions all;
///////////////////////////////////////////////////////////
// Function: f_EPTF_ILog_Transport_init_CT
//
// Purpose:
// Initializes the <EPTF_ILog_Transport_CT>
//
// Parameters:
// pl_selfName - *in* *charstring* - the name of the component
// pl_responseWeights - *in* <EPTF_ILog_Transport_ResponseWeights> - weight factors for generating response messages
//
// Return Value:
// -
///////////////////////////////////////////////////////////
public function f_EPTF_ILog_Transport_init_CT(
in charstring pl_selfName,
in EPTF_ILog_Transport_ResponseWeights pl_responseWeights := {1.0,1.0,1.0,1.0}
) runs on EPTF_ILog_Transport_CT {
if (v_ILog_Transport_eventHandler!=null) {
return; //already initialized
}
f_EPTF_ILog_init_CT(pl_selfName);
v_ILog_Transport_dbId := f_EPTF_ILog_register_DB(refers(f_EPTF_ILog_Transport_logItem), {});
v_ILog_Transport_ILogElementList := {};
v_ILog_Transport_eventHandler:=activate(as_EPTF_ILog_Transport_eventHandler());
v_ILog_Transport_connectionDB := {};
v_respHandlerFns := {};
v_ILog_Transport_responseWeights := pl_responseWeights
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ILog_Transport_setResponseWeights
//
// Purpose:
// Sets the weights for the different responses
//
// Parameters:
// pl_responseWeights - *in* <EPTF_ILog_Transport_ResponseWeights> - weight factors for generating response messages
//
// Return Value:
// -
///////////////////////////////////////////////////////////
public function f_EPTF_ILog_Transport_setResponseWeights(
in EPTF_ILog_Transport_ResponseWeights pl_responseWeights
) runs on EPTF_ILog_Transport_CT {
v_ILog_Transport_responseWeights := pl_responseWeights;
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ILog_Transport_connect
//
// Purpose:
// Connects the current component to a remote PTC, returns the connection id
//
// Parameters:
// pl_iLogChainIds - *in* <EPTF_IntegerList> - chainIdList to log events to
// pl_remoteCompref - *in* <EPTF_ILog_Transport_CT> - the remote component reference to connect to ("SUT")
//
// Return Value:
// *integer* - connectionId
//
///////////////////////////////////////////////////////////
public function f_EPTF_ILog_Transport_connect(in EPTF_IntegerList pl_iLogChainIds, in EPTF_ILog_Transport_CT pl_remoteCompref)
runs on EPTF_ILog_Transport_CT return integer {
connect(self:v_msgPort,pl_remoteCompref:v_msgPort);
var integer vl_connId := sizeof(v_ILog_Transport_connectionDB);
v_ILog_Transport_connectionDB[vl_connId] := c_ILog_Transport_connectionDB_new;
v_ILog_Transport_connectionDB[vl_connId].remoteComp := pl_remoteCompref;
// v_msgPort.send(EPTF_ILog_Transport_Mngmnt_Msg:{Connect:=vl_connId});
var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_dbId,pl_iLogChainIds);
if (vl_iLogElementId!=-1) {
v_ILog_Transport_ILogElementList[vl_iLogElementId] := {connection:={vl_connId}};
}
v_ILog_Transport_connectionDB[vl_connId].connectionChainIds := pl_iLogChainIds;
return vl_connId;
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ILog_Transport_disconnect
//
// Purpose:
// Disconnects the current component from a remote PTC
//
// Parameters:
// pl_iLogChainIds - *in* <EPTF_IntegerList> - chainIdList to log events to
// pl_remoteCompref - *in* <EPTF_ILog_Transport_CT> - the remote component reference to connect to ("SUT")
//
// Return Value:
// -
///////////////////////////////////////////////////////////
public function f_EPTF_ILog_Transport_disconnect(in EPTF_IntegerList pl_iLogChainIds, in integer pl_connId)
runs on EPTF_ILog_Transport_CT {
if (not isbound(v_ILog_Transport_connectionDB[pl_connId])
or v_ILog_Transport_connectionDB[pl_connId].remoteComp == null) {
return; // no connection
}
// v_msgPort.send(EPTF_ILog_Transport_Mngmnt_Msg:{Disco:=0}) to v_ILog_Transport_connectionDB[pl_connId].remoteComp;
disconnect(self:v_msgPort,v_ILog_Transport_connectionDB[pl_connId].remoteComp:v_msgPort);
v_ILog_Transport_connectionDB[pl_connId] := c_ILog_Transport_connectionDB_new;
var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_dbId,pl_iLogChainIds);
if (vl_iLogElementId!=-1) {
v_ILog_Transport_ILogElementList[vl_iLogElementId] := {disconnection:={pl_connId}};
}
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ILog_Transport_sendReq
//
// Purpose:
// Sends a message through a connection, returns the transaction ID
//
// Parameters:
// pl_iLogChainIds - *in* <EPTF_IntegerList> - chainIdList to log events to
// pl_connId - *in* *integer* - connection id to send the message over
// pl_reqMsg - *in* <EPTF_ILog_Transport_RequestMsg> - the message to be sent
//
// Return Value:
// *integer* - transactionId: to identify the response that corresponds to this request
//
///////////////////////////////////////////////////////////
public function f_EPTF_ILog_Transport_sendReq(
in EPTF_IntegerList pl_iLogChainIds,
in integer pl_connId,
in EPTF_ILog_Transport_RequestMsg pl_reqMsg
) runs on EPTF_ILog_Transport_CT return integer {
if (not isbound(v_ILog_Transport_connectionDB[pl_connId])
or v_ILog_Transport_connectionDB[pl_connId].remoteComp == null) {
return -1; // operation unsuccessful
}
v_ILog_Transport_connectionDB[pl_connId].transactionId := v_ILog_Transport_connectionDB[pl_connId].transactionId + 1;
v_ILog_Transport_connectionDB[pl_connId].transactions[v_ILog_Transport_connectionDB[pl_connId].transactionId].chainIds := pl_iLogChainIds;
v_msgPort.send({pl_connId, v_ILog_Transport_connectionDB[pl_connId].transactionId,{req:=pl_reqMsg}}) to v_ILog_Transport_connectionDB[pl_connId].remoteComp;
var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_dbId,pl_iLogChainIds);
if (vl_iLogElementId!=-1) {
v_ILog_Transport_ILogElementList[vl_iLogElementId] := {request:={pl_connId, v_ILog_Transport_connectionDB[pl_connId].transactionId, pl_reqMsg}};
}
return v_ILog_Transport_connectionDB[pl_connId].transactionId;
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ILog_Transport_addRespHandlerFn
//
// Purpose:
// Adds a handler for responses. They are called when response arrives
//
// Parameters:
// pl_respHandler - *in* <EPTF_ILog_Transport_RespHandler_FT> - the handler function reference
//
// Return Value:
// -
//
///////////////////////////////////////////////////////////
public function f_EPTF_ILog_Transport_addRespHandlerFn(in EPTF_ILog_Transport_RespHandler_FT pl_respHandler) runs on EPTF_ILog_Transport_CT {
v_respHandlerFns := v_respHandlerFns & {pl_respHandler};
}
// returns error code (0: OK, >0: error, <0: nor resp)
private function f_EPTF_ILog_Transport_callRespHandlerFns(
in EPTF_IntegerList pl_iLogChainIds,
in integer pl_connId,
in integer pl_transactionId,
in EPTF_ILog_Transport_ResponseMsg pl_msg)
runs on EPTF_ILog_Transport_CT {
var integer vl_errorCode := 0;
for(var integer i:=0; i<sizeof(v_respHandlerFns); i:=i+1) {
v_respHandlerFns[i].apply(
pl_iLogChainIds,
pl_connId,
pl_transactionId,
pl_msg
);
}
}
private function f_EPTF_ILog_Transport_logItem(in integer pl_elementIdx, in integer pl_dbId, in integer pl_chainId, in EPTF_IntegerList pl_param)
runs on EPTF_ILog_Transport_CT {
action("EPTF_ILog_Transport: " ,v_ILog_Transport_ILogElementList[pl_elementIdx]);
}
// main event handler
private altstep as_EPTF_ILog_Transport_eventHandler() runs on EPTF_ILog_Transport_CT {
var EPTF_ILog_Transport_Msg vl_msg;
var EPTF_ILog_Transport_CT vl_sender;
[] v_msgPort.receive({?,?,{req:=?}}) -> value vl_msg sender vl_sender {
// request
var float vl_weightSum :=
v_ILog_Transport_responseWeights.OK+
v_ILog_Transport_responseWeights.NOK+
v_ILog_Transport_responseWeights.ErroneousResp+
v_ILog_Transport_responseWeights.NoResp;
var float vl_rnd := rnd()*vl_weightSum;
// send OK if vl_errorCode 0, >0 NOK, <0 no resp
if (vl_rnd<v_ILog_Transport_responseWeights.OK) {
// send OK
v_msgPort.send({vl_msg.connId, vl_msg.transactionId,{resp:={OK:={}}}}) to vl_sender;
} else if (vl_rnd<v_ILog_Transport_responseWeights.OK+v_ILog_Transport_responseWeights.NOK) {
// send NOK
v_msgPort.send({vl_msg.connId, vl_msg.transactionId,{resp:={NOK:={}}}}) to vl_sender;
} else if (vl_rnd<v_ILog_Transport_responseWeights.OK+v_ILog_Transport_responseWeights.NOK+v_ILog_Transport_responseWeights.ErroneousResp) {
// erroneous resp (= OK with wring transactionId)
v_msgPort.send({vl_msg.connId, -vl_msg.transactionId,{resp:={OK:={}}}}) to vl_sender;
} else {
// no resp
}
repeat;
}
[] v_msgPort.receive({?,?,{resp:=?}}) -> value vl_msg sender vl_sender {
var EPTF_IntegerList vl_chains := {};
if (isbound(v_ILog_Transport_connectionDB[vl_msg.connId])
and isbound(v_ILog_Transport_connectionDB[vl_msg.connId].transactions)
and isbound(v_ILog_Transport_connectionDB[vl_msg.connId].transactions[vl_msg.transactionId])
) {
var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_dbId,v_ILog_Transport_connectionDB[vl_msg.connId].transactions[vl_msg.transactionId].chainIds);
if (vl_iLogElementId!=-1) {
v_ILog_Transport_ILogElementList[vl_iLogElementId] := {response:={vl_msg.connId, vl_msg.transactionId, vl_msg.msg.resp}};
}
// vl_chains := v_ILog_Transport_connectionDB[vl_msg.connId].transactions[vl_msg.transactionId].chainIds;
// } else if (isbound(v_ILog_Transport_connectionDB[vl_msg.connId])) {
// // transaction not found => add event to chains belonging to the connection
// var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_dbId,v_ILog_Transport_connectionDB[vl_msg.connId].connectionChainIds);
// if (vl_iLogElementId!=-1) {
// v_ILog_Transport_ILogElementList[vl_iLogElementId] := {response:={vl_msg.connId, vl_msg.transactionId, vl_msg.msg.resp}};
// }
// //vl_chains := v_ILog_Transport_connectionDB[vl_msg.connId].connectionChainIds;
} else {
// add to all chains
var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_dbId,{});
if (vl_iLogElementId!=-1) {
v_ILog_Transport_ILogElementList[vl_iLogElementId] := {response:={vl_msg.connId, vl_msg.transactionId, vl_msg.msg.resp}};
}
}
f_EPTF_ILog_Transport_callRespHandlerFns(
vl_chains,
vl_msg.connId,
vl_msg.transactionId,
vl_msg.msg.resp
);
repeat;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// TEST
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import from EPTF_CLL_ILog_Definitions all;
private type record EPTF_ILog_Transport_Test_Transaction {
integer connId,
integer trId,
EPTF_IntegerList chainIds
}
private type record of EPTF_ILog_Transport_Test_Transaction EPTF_ILog_Transport_Test_Transactions;
private type record EPTF_ILog_Transport_Test_Session {
integer nofResps,
integer nofOKs
}
private type record of EPTF_ILog_Transport_Test_Session EPTF_ILog_Transport_Test_SessionList;
type record EPTF_ILog_Transport_Test_Timeout {
integer connId,
integer transactionId
}
type union EPTF_ILog_Transport_Test_ILogElement {
EPTF_ILog_Transport_Connection connection,
EPTF_ILog_Transport_Disconnection disconnection,
EPTF_ILog_Transport_Request request,
EPTF_ILog_Transport_Response response,
EPTF_ILog_Transport_Test_Timeout timedout
}
type record of EPTF_ILog_Transport_Test_ILogElement EPTF_ILog_Transport_Test_ILogElementList;
private type component EPTF_ILog_Transport_Test_CT extends EPTF_ILog_Transport_CT, EPTF_ILog_CT {
timer t_sendMsg := 0.1;
timer t_execTime := 10.0;
var integer v_connId[2];
var EPTF_ILog_Transport_ResponseWeights v_nofResponses;
var EPTF_ILog_Transport_Test_Transactions v_transactions;
var EPTF_IntegerList v_ILogChainId;
var EPTF_ILog_Transport_Test_SessionList v_EPTF_ILog_Transport_Test_sessions;
var integer v_ILog_Transport_Test_dbId;
var EPTF_ILog_Transport_Test_ILogElementList v_ILog_Transport_Test_ILogElementList;
}
private altstep as_EPTF_ILog_Transport_test_eventHandler() runs on EPTF_ILog_Transport_Test_CT {
[] t_sendMsg.timeout {
t_sendMsg.start;
var integer vl_connId := float2int(rnd()*int2float(sizeof(v_connId)));
var integer vl_iLogChainId := f_EPTF_ILog_newChain("Transport_test_conn#" & int2str(vl_connId));
v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId] := {0, 0}
var EPTF_IntegerList vl_chainIds := {vl_iLogChainId, v_ILogChainId[vl_connId]};
f_EPTF_ILog_Transport_test_addTransaction(vl_connId,f_EPTF_ILog_Transport_sendReq(vl_chainIds, vl_connId,{Begin:={}}),vl_chainIds);
f_EPTF_ILog_Transport_test_addTransaction(vl_connId,f_EPTF_ILog_Transport_sendReq(vl_chainIds, vl_connId,{Invoke:={}}),vl_chainIds);
f_EPTF_ILog_Transport_test_addTransaction(vl_connId,f_EPTF_ILog_Transport_sendReq(vl_chainIds, vl_connId,{Invoke:={}}),vl_chainIds);
f_EPTF_ILog_Transport_test_addTransaction(vl_connId,f_EPTF_ILog_Transport_sendReq(vl_chainIds, vl_connId,{Invoke:={}}),vl_chainIds);
f_EPTF_ILog_Transport_test_addTransaction(vl_connId,f_EPTF_ILog_Transport_sendReq(vl_chainIds, vl_connId,{End:={}}),vl_chainIds);
repeat;
}
}
private function f_EPTF_ILog_Transport_test_respHandler(
in EPTF_IntegerList pl_iLogChainIds,
in integer pl_connId,
in integer pl_transactionId,
in EPTF_ILog_Transport_ResponseMsg pl_msg
) runs on EPTF_ILog_Transport_Test_CT {
//action(%definitionId&": pl_connId: ", pl_connId, " pl_transactionId: ", pl_transactionId, " pl_msg: ", pl_msg);
if (pl_transactionId<0) {
v_nofResponses.ErroneousResp := v_nofResponses.ErroneousResp + 1.0;
} else if (ischosen(pl_msg.OK)) {
v_nofResponses.OK := v_nofResponses.OK + 1.0;
} else if (ischosen(pl_msg.NOK)) {
v_nofResponses.NOK := v_nofResponses.NOK + 1.0;
}
if (sizeof(pl_iLogChainIds)>0) {
var integer vl_iLogChainId := pl_iLogChainIds[0];
if (ischosen(pl_msg.OK)) {
v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofOKs := v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofOKs + 1;
}
v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofResps := v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofResps + 1;
// log chains that are not ok
if ( v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofResps == 5
and v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofOKs != v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofResps) {
// error occured
f_EPTF_ILog_logChain(vl_iLogChainId);
} else if (v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofResps == 5) {
f_EPTF_ILog_deleteChain(vl_iLogChainId);
}
}
f_EPTF_ILog_Transport_test_deleteTransaction(pl_connId,pl_transactionId);
}
private function f_EPTF_ILog_Transport_test_logChains(in EPTF_IntegerList pl_iLogChainIds) runs on EPTF_ILog_Transport_Test_CT {
for(var integer i:=0; i<sizeof(pl_iLogChainIds); i:=i+1) {
f_EPTF_ILog_logChain(pl_iLogChainIds[i]);
}
}
private function f_EPTF_ILog_Transport_test_deleteChains(in EPTF_IntegerList pl_iLogChainIds) runs on EPTF_ILog_Transport_Test_CT {
for(var integer i:=0; i<sizeof(pl_iLogChainIds); i:=i+1) {
f_EPTF_ILog_deleteChain(pl_iLogChainIds[i]);
}
}
private function f_EPTF_ILog_Transport_Test_logItem(in integer pl_elementIdx, in integer pl_dbId, in integer pl_chainId, in EPTF_IntegerList pl_param)
runs on EPTF_ILog_Transport_Test_CT {
action(%definitionId&": Event in chain#",pl_chainId,": ", f_EPTF_ILog_getName(pl_chainId), ": " ,v_ILog_Transport_Test_ILogElementList[pl_elementIdx]);
}
private function f_EPTF_ILog_Transport_test_addTransaction(
in integer pl_connId,
in integer pl_trId,
in EPTF_IntegerList chainIds
) runs on EPTF_ILog_Transport_Test_CT {
// search for unused slot:
var integer vl_unusedSlotIdx:=sizeof(v_transactions);
for(var integer i:=0; i<sizeof(v_transactions); i:=i+1) {
if(v_transactions[i].connId == -1) {
// found
vl_unusedSlotIdx := i;
break;
}
}
//store the new transaction to this slot:
v_transactions[vl_unusedSlotIdx] := {pl_connId,pl_trId,chainIds};
}
// searches the transactionIdx. if not found returns -1
private function f_EPTF_ILog_Transport_test_findTransaction(
in integer pl_connId,
in integer pl_trId
) runs on EPTF_ILog_Transport_Test_CT return integer {
// search for the slot:
var integer vl_slotIdx:=-1;
for(var integer i:=0; i<sizeof(v_transactions); i:=i+1) {
if(v_transactions[i].connId == pl_connId and v_transactions[i].trId == pl_trId) {
// found
vl_slotIdx := i;
break;
}
}
return vl_slotIdx;
}
// deletes the transaction
private function f_EPTF_ILog_Transport_test_deleteTransaction(
in integer pl_connId,
in integer pl_trId
) runs on EPTF_ILog_Transport_Test_CT{
// search for the slot:
var integer vl_slotIdx:=f_EPTF_ILog_Transport_test_findTransaction(pl_connId,pl_trId);
if (vl_slotIdx==-1) {
return;
}
v_transactions[vl_slotIdx] := {-1,-1};
}
private function f_EPTF_ILog_Transport_test_printStatistics() runs on EPTF_ILog_Transport_Test_CT {
for(var integer i:=0; i<sizeof(v_transactions); i:=i+1) {
if(v_transactions[i].connId != -1 and v_transactions[i].trId != -1) {
// timeout
v_nofResponses.NoResp := v_nofResponses.NoResp + 1.0;
// place timeout into the chain:
var integer vl_iLogElementId := f_EPTF_ILog_addToChains(v_ILog_Transport_Test_dbId,v_transactions[i].chainIds);
if (vl_iLogElementId!=-1) {
v_ILog_Transport_Test_ILogElementList[vl_iLogElementId] := {timedout:={v_transactions[i].connId, v_transactions[i].trId}};
}
}
}
action("Connection chain log for timed out sessions:");
for(var integer i:=0; i<sizeof(v_EPTF_ILog_Transport_Test_sessions); i:=i+1) {
// log chains that timed out (remaining ones)
var integer vl_iLogChainId := i;
if ( isbound(v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId])
and v_EPTF_ILog_Transport_Test_sessions[vl_iLogChainId].nofResps < 5 ) {
// error occured
f_EPTF_ILog_logChain(vl_iLogChainId);
}
// chains of the others have already deleted
}
action("Connection chain log for connection 1:");
f_EPTF_ILog_logChain(v_ILogChainId[0]);
action("Connection chain log for connection 2:");
f_EPTF_ILog_logChain(v_ILogChainId[1]);
action("Message statistics: ", v_nofResponses);
// in percentage:
var EPTF_ILog_Transport_ResponseWeights vl_nofResponses := v_nofResponses;
var float vl_trSum :=
v_nofResponses.OK+
v_nofResponses.NOK+
v_nofResponses.ErroneousResp+
v_nofResponses.NoResp;
vl_trSum := vl_trSum *0.01;
vl_nofResponses.OK := vl_nofResponses.OK/vl_trSum;
vl_nofResponses.NOK := vl_nofResponses.NOK/vl_trSum;
vl_nofResponses.ErroneousResp := vl_nofResponses.ErroneousResp/vl_trSum;
vl_nofResponses.NoResp := vl_nofResponses.NoResp/vl_trSum;
action("Message statistics [%]: ", vl_nofResponses);
}
private testcase tc_EPTF_ILog_Transport_test() runs on EPTF_ILog_Transport_Test_CT {
f_EPTF_ILog_Transport_init_CT("Transport_test"
//,{1.0,2.0,3.0,4.0}
);
f_EPTF_ILog_init_CT("Transport_test");
v_ILogChainId := {f_EPTF_ILog_newChain("Transport_test_Conn1")};
v_ILogChainId := v_ILogChainId & {f_EPTF_ILog_newChain("Transport_test_Conn2")};
v_nofResponses := {0.0,0.0,0.0,0.0};
v_transactions := {};
v_EPTF_ILog_Transport_Test_sessions := {}
v_ILog_Transport_Test_dbId := f_EPTF_ILog_register_DB(refers(f_EPTF_ILog_Transport_Test_logItem), {});
v_ILog_Transport_Test_ILogElementList := {}
f_EPTF_ILog_Transport_addRespHandlerFn(refers(f_EPTF_ILog_Transport_test_respHandler));
v_connId[0] := f_EPTF_ILog_Transport_connect({v_ILogChainId[0]},self);
v_connId[1] := f_EPTF_ILog_Transport_connect({v_ILogChainId[1]},self);
t_sendMsg.start; t_execTime.start;
activate(as_EPTF_ILog_Transport_test_eventHandler());
t_execTime.timeout;
f_EPTF_ILog_Transport_test_printStatistics();
}
} //module EPTF_ILog_Transport_Functions