blob: dd11addbbbb042c5770a05836863085df4a168a9 [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: EPTF_Transport_Test_perfTestcases
//
// Purpose:
// This module contains the performance test functions of generic EPTF Transport.
//
// Module depends on:
// <EPTF_CLL_TransportMessageBufferManager_Functions>
// <EPTF_CLL_FBQ_Functions>
// <EPTF_CLL_TransportRouting_Functions>
// <EPTF_CLL_TransportCommPortIPL4_Functions>
// <IPL4asp_Types>
// <EPTF_Transport_Test_Functions>
// <EPTF_Transport_Test_Definitions>
// <EPTF_CLL_Common_Definitions>
// <EPTF_CLL_Base_Functions>
// <TCCConversion_Functions>
// <EPTF_CLL_TransportCommPortIPL2_Definitions>
// <EPTF_CLL_TransportCommPortIPL2_Functions>
// <EPTF_CLL_Transport_Definitions>
// <EPTF_CLL_Transport_Functions>
// <EPTF_CLL_Transport_CommonDefinitions>
// <TCCFileIO_Functions>
//
// Current Owner:
// Balazs Lugossy (EBALLUG)
//
// Last Review Date:
// 2012-11-07
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////
module EPTF_Transport_Test_perfTestcases
{
//=========================================================================
// Import Part
//=========================================================================
import from IPL4asp_Types all;
import from EPTF_Transport_Test_Definitions all;
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_Base_Functions all;
import from TCCConversion_Functions all;
import from EPTF_CLL_TransportIPL2_Definitions all;
import from EPTF_CLL_TransportIPL2_Functions all;
import from EPTF_CLL_Transport_Functions all;
import from EPTF_CLL_Transport_CommonDefinitions all;
import from TCCFileIO_Functions all;
import from EPTF_CLL_Variable_Functions all;
import from EPTF_SIP_Transport_Definitions all;
import from EPTF_SIP_Transport_Functions all;
import from EPTF_SIP_LGen_Definitions all;
modulepar {
charstring tsp_LocalHostIP := "159.107.193.33"
charstring tsp_RemoteHostIP := "159.107.193.33"
integer tsp_LocalHostPort := 10005
integer tsp_RemoteHostPort := 10006
float tsp_PerfTestDuration := 10.0;
}
group SegmentBuffer_Tests {
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_SegmentBuffer_PerfTest
// Random
// Purpose:
// to measure the performance of the f_EPTF_SegmentBuffer_initBuffer function, with both inorder,outoforder and mixed data.
//
// Requirement:
// -
//
// Action:
// - calls the above function many times and measure time.
//
// Expected Result:
// ...
///////////////////////////////////////////////////////////
testcase tc_EPTF_SegmentBuffer_PerfTest() runs on EPTF_Transport_Test_CT
{
f_EPTF_SegmentBuffer_init_CT("SegmentBuffer_Test_PerfTest");
var EPTF_SegmentBuffer vl_buffer;
var integer vl_result;
var integer vl_size;
var octetstring vl_content;
const integer c_messageLength := 1000;
var integer vl_arrayOfIndex[c_messageLength];
const integer c_numberOfReplaces := 2000;
const integer c_numberOfReplacesMixed := 20;
const integer c_patternLength := 1;
var integer i;
var integer vl_rndIndex1;
var integer vl_rndIndex2;
var float r;
var integer vl_temp, v_sendCounter := 0;
var charstring vl_message;
var boolean v_loop := true;
for (i := 0; i < c_messageLength; i := i + 1) {
vl_arrayOfIndex[i] := i;
vl_message[i] := int2char(char2int("A") + float2int(rnd() * 26.0));
}
for (i := 0; i < c_numberOfReplaces; i := i + 1) {
vl_rndIndex1 := float2int(rnd() * int2float(c_messageLength));
vl_rndIndex2 := float2int(rnd() * int2float(c_messageLength));
vl_temp := vl_arrayOfIndex[vl_rndIndex1];
vl_arrayOfIndex[vl_rndIndex1] := vl_arrayOfIndex[vl_rndIndex2];
vl_arrayOfIndex[vl_rndIndex2] := vl_temp;
}
setverdict(pass);
// Initiates the buffer
f_EPTF_SegmentBuffer_initBuffer( vl_buffer);
timer T_testDuration := tsp_PerfTestDuration;
T_testDuration.start;
// run default time for measuring the in-order performance
while(v_loop) {
// insert the whole message in a lot of segments
for (i := 0; i < c_messageLength; i := i + 1) {
vl_size := f_EPTF_SegmentBuffer_getContinousLen( pl_buffer := vl_buffer);
vl_result := f_EPTF_SegmentBuffer_insertSegment(
pl_buffer := vl_buffer,
pl_payload := char2oct(vl_message[i]),
pl_seqNum := i - vl_size,
pl_size := vl_size );
v_sendCounter := v_sendCounter + 1;
}
// get the content and truncate the buffer
f_EPTF_SegmentBuffer_getBuffer(
pl_buffer := vl_buffer,
pl_content := vl_content);
vl_size := f_EPTF_SegmentBuffer_truncBuffer( pl_buffer := vl_buffer );
timer T_dummy := 0.001;
T_dummy.start;
// repeat the whole process till duration timeout
alt {
[]T_testDuration.timeout {
v_loop := false;
}
[]T_dummy.timeout { }
}
}
action("Inserted to buffer in-order: ", v_sendCounter);
action("Average buffer in-order insertation/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
v_sendCounter := 0;
timer T_testDuration2 := tsp_PerfTestDuration;
T_testDuration2.start;
v_loop := true;
// run default time for measuring the out-of-order performance
while(v_loop) {
for (i := 0; i < c_messageLength; i := i + 1) {
vl_size := f_EPTF_SegmentBuffer_getContinousLen( pl_buffer := vl_buffer);
vl_result := f_EPTF_SegmentBuffer_insertSegment(
pl_buffer := vl_buffer,
pl_payload := char2oct(vl_message[vl_arrayOfIndex[i]]),
pl_seqNum := vl_arrayOfIndex[i] - vl_size,
pl_size := vl_size );
v_sendCounter := v_sendCounter + 1;
}
f_EPTF_SegmentBuffer_getBuffer(
pl_buffer := vl_buffer,
pl_content := vl_content);
vl_size := f_EPTF_SegmentBuffer_truncBuffer( pl_buffer := vl_buffer );
timer T_dummy := 0.0;
T_dummy.start;
alt {
[]T_testDuration2.timeout {
v_loop := false;
}
[]T_dummy.timeout { }
}
}
action("Inserted to buffer out-of-order: ", v_sendCounter);
action("Average buffer out-of-order insertation/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
//rearrange the message to create the mixed scenario
for (i := 0; i < c_messageLength; i := i + 1) {
vl_arrayOfIndex[i] := i;
vl_message[i] := int2char(char2int("A") + float2int(rnd() * 26.0));
}
for (i := 0; i < c_numberOfReplacesMixed; i := i + 1) {
vl_rndIndex1 := float2int(rnd() * int2float(c_messageLength));
vl_rndIndex2 := float2int(rnd() * int2float(c_messageLength));
vl_temp := vl_arrayOfIndex[vl_rndIndex1];
vl_arrayOfIndex[vl_rndIndex1] := vl_arrayOfIndex[vl_rndIndex2];
vl_arrayOfIndex[vl_rndIndex2] := vl_temp;
}
v_sendCounter := 0;
timer T_testDuration3 := tsp_PerfTestDuration;
T_testDuration3.start;
v_loop := true;
// run default time for measuring the mix performance
while(v_loop) {
for (i := 0; i < c_messageLength; i := i + 1) {
vl_size := f_EPTF_SegmentBuffer_getContinousLen( pl_buffer := vl_buffer);
vl_result := f_EPTF_SegmentBuffer_insertSegment(
pl_buffer := vl_buffer,
pl_payload := char2oct(vl_message[vl_arrayOfIndex[i]]),
pl_seqNum := vl_arrayOfIndex[i] - vl_size,
pl_size := vl_size );
v_sendCounter := v_sendCounter + 1;
}
f_EPTF_SegmentBuffer_getBuffer(
pl_buffer := vl_buffer,
pl_content := vl_content);
vl_size := f_EPTF_SegmentBuffer_truncBuffer( pl_buffer := vl_buffer );
timer T_dummy := 0.0;
T_dummy.start;
alt {
[]T_testDuration3.timeout {
v_loop := false;
}
[]T_dummy.timeout { }
}
}
action("Inserted to buffer mixed: ", v_sendCounter);
action("Average buffer mixed insertation/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
}
}
group IPL2_SimpleTests {
function f_EPTF_IPL2_Test_messageProcess(
in EPTF_Transport_TransportType pl_transportType,
in integer pl_connId,
in charstring pl_remHost,
in integer pl_remPort,
in charstring pl_locHost,
in integer pl_locPort,
in ProtoTuple pl_proto,
in integer pl_userData,
in octetstring pl_msg)
runs on EPTF_Transport_Test_CT
{
log(%definitionId&":",
" pl_connId=", pl_connId,
", pl_remHost=", pl_remHost,
", pl_remPort=", pl_remPort,
", pl_locHost=", pl_locHost,
", pl_locPort=", pl_locPort,
", pl_proto=", pl_proto,
", pl_userData=", pl_userData,
", pl_msg=", pl_msg);
}
function f_EPTF_IPL2_Test_eventCallback(
in EPTF_Transport_TransportType pl_transportType,
in ConnectionId pl_connId,
in ASP_Event pl_event)
runs on EPTF_Transport_Test_CT
{
log(%definitionId&":",
" pl_connId=", pl_connId,
", pl_event=", pl_event);
}
function f_EPTF_IPL2_Test_getMsgLen(
in EPTF_Transport_TransportType pl_transportType,
in octetstring pl_stream,
inout EPTF_IntegerList pl_args // variadic list of user defined parameters
)
return integer
{
return lengthof(pl_stream);
}
function f_EPTF_IPL2_Test_messageProcess_perf(
in EPTF_Transport_TransportType pl_transportType,
in integer pl_connId,
in charstring pl_remHost,
in integer pl_remPort,
in charstring pl_locHost,
in integer pl_locPort,
in ProtoTuple pl_proto,
in integer pl_userData,
in octetstring pl_msg)
runs on EPTF_Transport_Test_CT
{
var Result vl_dummy;
if(not EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_send(
IPL2,
pl_connId,
pl_msg,
vl_dummy)) {
}
v_msgCount := v_msgCount + 1;
}
testcase tc_EPTF_IPL2_Test_tcpPerf1Socket()
runs on EPTF_Transport_Test_CT
{
var Result vl_result;
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_init(IPL2, "mtc");
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_registerMsgCallback(
IPL2,
"myLgenType",
refers(f_EPTF_IPL2_Test_messageProcess_perf),
refers(f_EPTF_IPL2_Test_eventCallback));
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_registerMsgLenCallback4LGenType(
IPL2,
refers(f_EPTF_IPL2_Test_getMsgLen), {}, "myLgenType");
var integer vl_socketId := EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_connect(IPL2, {tcp := {}}, tsp_LocalHostIP, tsp_LocalHostPort, tsp_RemoteHostIP, tsp_RemoteHostPort, "myLgenType",
vl_result);
if(vl_socketId < 0) {
log("f_EPTF_TransportIPL2_connect returned ", vl_socketId);
f_EPTF_Base_stop(fail);
}
timer T_wait;
T_wait.start(1.0);T_wait.timeout;
v_msgCount := 0;
var octetstring vl_msg := ''O;
var integer i;
for(i:=0 ;i<tsp_EPTF_TransportIPL2_tcpMSS/10; i:=i+1) {
vl_msg := vl_msg & int2oct(i mod 256, 1);
}
for(i:=0 ;i<10; i:=i+1) {
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_send(IPL2, vl_socketId, vl_msg, vl_result);
}
timer T_test := tsp_PerfTestDuration;
T_test.start;
T_test.timeout;
action("msg/sec = ", int2float(v_msgCount) / tsp_PerfTestDuration);
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_registerMsgCallback(
IPL2,
"myLgenType",
refers(f_EPTF_IPL2_Test_messageProcess),
refers(f_EPTF_IPL2_Test_eventCallback));
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_close(IPL2, vl_socketId, vl_result);
T_wait.start(tsp_EPTF_TransportIPL2_tcpMSL * 2.0 + 0.5);
T_wait.timeout;
f_EPTF_Base_stop(pass);
}
modulepar charstring tsp_perf2test_messageFileName := "";
modulepar charstring tsp_perf2test_messageSaveName := "tcp_recv.txt";
function f_EPTF_IPL2_Test_messageProcess_perf2(
in EPTF_Transport_TransportType pl_transportType,
in integer pl_connId,
in charstring pl_remHost,
in integer pl_remPort,
in charstring pl_locHost,
in integer pl_locPort,
in ProtoTuple pl_proto,
in integer pl_userData,
in octetstring pl_msg)
runs on EPTF_Transport_Test_CT
{
v_msgCount := v_msgCount + lengthof(pl_msg);
v_recvBuff := v_recvBuff & pl_msg;
}
testcase tc_EPTF_IPL2_Test_tcpPerf_sendFile()
runs on EPTF_Transport_Test_CT
{
var Result vl_result;
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_init(IPL2, "mtc");
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_registerMsgCallback(
IPL2,
"myLgenType",
refers(f_EPTF_IPL2_Test_messageProcess_perf2),
refers(f_EPTF_IPL2_Test_eventCallback));
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_registerMsgLenCallback4LGenType(
IPL2,
refers(f_EPTF_IPL2_Test_getMsgLen), {}, "myLgenType");
var integer vl_socketId := EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_connect(IPL2, {tcp := {}}, tsp_LocalHostIP, tsp_LocalHostPort, tsp_RemoteHostIP, tsp_RemoteHostPort, "myLgenType",
vl_result);
if(vl_socketId < 0) {
log("f_EPTF_TransportIPL2_connect returned ", vl_socketId);
f_EPTF_Base_stop(fail);
}
timer T_wait;
T_wait.start(1.0);T_wait.timeout;
v_msgCount := 0;
var octetstring vl_msg := ''O;
var integer i;
var integer vl_msgLen := 0;
action("loading message");
if(tsp_perf2test_messageFileName == "") {
f_EPTF_Base_stop(inconc);
}
var integer vl_fd := f_FIO_open_rdonly(tsp_perf2test_messageFileName);
if(vl_fd < 0) {
action("couldn't open file "&tsp_perf2test_messageFileName);
f_EPTF_Base_stop(fail);
}
while(true) {
var octetstring vl_tmp := ''O;
i := f_FIO_read_data(vl_fd, vl_tmp, 100000);
vl_msg := vl_msg & vl_tmp;
if(i < 1000) { break; }
}
vl_msgLen := lengthof(vl_msg);
f_FIO_close(vl_fd);
action("message loaded, length: ", vl_msgLen);
var float vl_start := f_EPTF_Base_getRelTimeInSecs();
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_send(IPL2, vl_socketId, vl_msg, vl_result);
T_wait.start(100.0);
timer T_dummy;
T_dummy.start(0.0);
alt {
[]T_wait.timeout { f_EPTF_Base_stop(inconc); }
[v_msgCount == vl_msgLen]T_dummy.timeout { }
}
T_wait.stop;
var float vl_end := f_EPTF_Base_getRelTimeInSecs();
action("Transmitted ", vl_msgLen, " bytes in ", vl_end-vl_start, " seconds");
action(int2float(vl_msgLen) / (vl_end-vl_start), " bytes/sec");
action("saving message");
if(tsp_perf2test_messageSaveName == "") {
f_EPTF_Base_stop(inconc);
}
vl_fd := f_FIO_open_trunc_wronly(tsp_perf2test_messageSaveName);
if(vl_fd < 0) {
action("couldn't open file "&tsp_perf2test_messageSaveName);
f_EPTF_Base_stop(fail);
}
f_FIO_write_data(vl_fd, v_recvBuff);
f_FIO_close(vl_fd);
EPTF_CLL_TransportIPL2_Functions.f_EPTF_Transport_close(IPL2, vl_socketId, vl_result);
T_wait.start(tsp_EPTF_TransportIPL2_tcpMSL * 2.0 + 0.5);
T_wait.timeout;
f_EPTF_Base_stop(pass);
}
group IPL2_PerfTest {
modulepar integer tsp_messagePayloadSize := 530;
modulepar LocalAddrConfigList tsp_LocalAddrConfigList := {};
modulepar RemoteAddrConfigList tsp_RemoteAddrConfigList := {{"", -1}};
modulepar boolean tsp_startServers := true;
modulepar integer tsp_maxPendingMsgPerUser := 10;
modulepar EPTF_Transport_TransportType tsp_perfTest_transportType := IPL2;
modulepar ProtoTuple tsp_perfTest_proto := {tcp := {}};
modulepar boolean tsp_perfTest_wait4response := false;
modulepar boolean tsp_perfTest_openListenSockets := true; // open the same number of (unused) listen sockets for client as the number of connections
function f_EPTF_IPL2_PerfTest_getMsgLen(
in EPTF_Transport_TransportType pl_transportType,
in octetstring pl_stream,
inout EPTF_IntegerList pl_args
)
return integer
{
return tsp_messagePayloadSize;
}
function f_EPTF_IPL2_PerfTest_messageProcess(
in EPTF_Transport_TransportType pl_transportType,
in integer pl_connId,
in charstring pl_remHost,
in integer pl_remPort,
in charstring pl_locHost,
in integer pl_locPort,
in ProtoTuple pl_proto,
in integer pl_userData,
in octetstring pl_msg)
runs on PerfTestClient_CT
{
v_recvCounter := v_recvCounter + 1;
v_responseReceived := true;
v_pendingMsgs[pl_userData] := v_pendingMsgs[pl_userData] - 1;
if(v_pendingMsgs[pl_userData]<0) { v_pendingMsgs[pl_userData] := 0 }
}
modulepar EPTF_Transport_InterfaceInformationList tsp_perfTest_interfaceInformationList := {};
function f_EPTF_IPL2_PerfTest_clientInit(in LocalAddrConfigElem pl_LocalAddrConfigElem, in integer pl_Id)
runs on PerfTestClient_CT
{
var Result vl_result := c_emptyResult;
EPTF_CLL_Transport_Functions.f_EPTF_Transport_init(tsp_perfTest_transportType, "client" & int2str(pl_Id), tsp_perfTest_interfaceInformationList);
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgCallback(
tsp_perfTest_transportType,
"client" & int2str(pl_Id),
refers(f_EPTF_IPL2_PerfTest_messageProcess)/*,
refers(f_EPTF_IPL2_PerfTest_eventCallback)*/);
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgLenCallback4LGenType(
tsp_perfTest_transportType,
refers(f_EPTF_IPL2_PerfTest_getMsgLen), {}, "client" & int2str(pl_Id));
var integer i, j, k;
var integer vl_userIdx := 0;
var integer startIp := oct2int(f_OctetIpv4(pl_LocalAddrConfigElem.startIPAddr));
for(j:=0; j<pl_LocalAddrConfigElem.nofAddr; j:=j+1) {
var charstring ipAddr := f_EPTF_TransportIPL2_ip2str(int2oct(startIp + j, 4));
log(%definitionId&": IP Address: ", ipAddr);
var integer portNum := pl_LocalAddrConfigElem.startPort;
for(k:=0; k<pl_LocalAddrConfigElem.nofPorts; k:=k+1) {
// log(%definitionId&": Port number: ", portNum);
action("Start initing: ",ipAddr, " ", portNum);
if(ischosen(tsp_perfTest_proto.udp)) {
v_connectionIds[vl_userIdx] := EPTF_CLL_Transport_Functions.f_EPTF_Transport_listen(
tsp_perfTest_transportType,
tsp_perfTest_proto,
ipAddr, portNum, "client" & int2str(pl_Id),
vl_result);
} else {
v_connectionIds[vl_userIdx] := EPTF_CLL_Transport_Functions.f_EPTF_Transport_connect(
tsp_perfTest_transportType,
tsp_perfTest_proto,
ipAddr,
portNum,
tsp_RemoteAddrConfigList[pl_Id].IPAddr,
tsp_RemoteAddrConfigList[pl_Id].portNumber,
"client" & int2str(pl_Id),
vl_result);
if(tsp_perfTest_openListenSockets) {
portNum := portNum + 1;
var Result vl_listenRes := c_emptyResult;
v_tcpListenIds[vl_userIdx] := EPTF_CLL_Transport_Functions.f_EPTF_Transport_listen(
tsp_perfTest_transportType,
tsp_perfTest_proto,
ipAddr, portNum, "client" & int2str(pl_Id),
vl_result);
if(v_tcpListenIds[vl_userIdx] < 0) {
action("listen "& ipAddr&":"&int2str(portNum));
action("f_EPTF_Transport_listen returned ", v_tcpListenIds[vl_userIdx]);
action("f_EPTF_Transport_listen result ", vl_listenRes);
f_EPTF_Base_stopAll(fail);
}
}
}
portNum := portNum + 1;
timer T_wait := 0.0001;
T_wait.start; T_wait.timeout;
if(v_connectionIds[vl_userIdx] < 0) {
action(ipAddr&":"&int2str(portNum)&
" -> "&tsp_RemoteAddrConfigList[pl_Id].IPAddr&":"&int2str(tsp_RemoteAddrConfigList[pl_Id].portNumber));
action("f_EPTF_Transport_connect returned ", v_connectionIds[vl_userIdx]);
action("f_EPTF_Transport_connect result ", vl_result);
f_EPTF_Base_stopAll(fail);
}
EPTF_CLL_Transport_Functions.f_EPTF_Transport_setUserData(tsp_perfTest_transportType, v_connectionIds[vl_userIdx], vl_userIdx, vl_result);
v_pendingMsgs[vl_userIdx] := 0;
vl_userIdx := vl_userIdx + 1;
}
}
action("Opened ", sizeof(v_connectionIds), " connections");
action("Opened ", sizeof(v_tcpListenIds), " listen sockets");
action("Started up in ", f_EPTF_Base_getRelTimeInSecs(), " seconds.");
f_EPTF_Base_registerCleanup(refers(f_EPTF_IPL2_PerfTest_clientCleanup));
sync_PCO.send(pl_Id);
sync_PCO.receive;
}
function f_EPTF_IPL2_PerfTest_clientCleanup()
runs on PerfTestClient_CT
{
var Result vl_result;
timer T_wait;
for(var integer i:=0; i<sizeof(v_connectionIds); i:=i+1) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_close( tsp_perfTest_transportType, v_connectionIds[i], vl_result );
T_wait.start(0.0001);T_wait.timeout;
}
for(var integer i:=0; i<sizeof(v_tcpListenIds); i:=i+1) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_close( tsp_perfTest_transportType, v_tcpListenIds[i], vl_result );
T_wait.start(0.0001);T_wait.timeout;
}
T_wait.start(1.0);T_wait.timeout;
}
function f_EPTF_IPL2_PerfTest_clientBehavior(in LocalAddrConfigElem pl_LocalAddrConfigElem, in integer pl_Id)
runs on PerfTestClient_CT
{
var Result vl_result := c_emptyResult;
f_EPTF_IPL2_PerfTest_clientInit(pl_LocalAddrConfigElem, pl_Id);
v_sendCounter := 0;
timer T_testDuration := tsp_PerfTestDuration;
T_testDuration.start;
v_loop := true;
var integer vl_connIdx := 0;
var octetstring vl_msg := ''O;
for(var integer i:=0; i < tsp_messagePayloadSize; i:=i+1) {
vl_msg := vl_msg & int2oct(i mod 256, 1);
}
action("Starting to send messages");
var integer vl_skippedSends := 0;
while(v_loop) {
timer T_dummy := 0.00001;
v_responseReceived := false;
T_dummy.start;
alt {
[]T_testDuration.timeout { v_loop := false; }
[] T_dummy.timeout {}
}
if(ischosen(tsp_perfTest_proto.udp)) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_sendTo(
tsp_perfTest_transportType,
v_connectionIds[vl_connIdx],
tsp_RemoteAddrConfigList[pl_Id].IPAddr,
tsp_RemoteAddrConfigList[pl_Id].portNumber,
vl_msg,
vl_result);
if(ispresent(vl_result.errorCode)) {
action("send result: ", vl_result);
}
if(v_pendingMsgs[vl_connIdx] < tsp_maxPendingMsgPerUser) {
v_pendingMsgs[vl_connIdx] := v_pendingMsgs[vl_connIdx] + 1;
v_sendCounter := v_sendCounter + 1;
} else {
// UDP -> needs retransmit
vl_skippedSends := vl_skippedSends + 1;
}
} else {
if(v_pendingMsgs[vl_connIdx] < tsp_maxPendingMsgPerUser) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_send(
tsp_perfTest_transportType,
v_connectionIds[vl_connIdx],
vl_msg,
vl_result);
v_pendingMsgs[vl_connIdx] := v_pendingMsgs[vl_connIdx] + 1;
v_sendCounter := v_sendCounter + 1;
} else {
vl_skippedSends := vl_skippedSends + 1;
}
}
vl_connIdx := vl_connIdx + 1;
if(vl_connIdx >= sizeof(v_connectionIds)) { vl_connIdx := 0; }
}
action("Finished sending messages");
action("Messages sent: ", v_sendCounter);
action("Messages received: ", v_recvCounter);
if(ischosen(tsp_perfTest_proto.udp)) {
action("Retransmissions: ", vl_skippedSends);
} else {
action("Skipped sends: ", vl_skippedSends);
}
action("Elapsed time: ", tsp_PerfTestDuration);
action("Average send msg/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
action("Average recv msg/sec: ", int2float(v_recvCounter)/tsp_PerfTestDuration);
timer T_wait := 2.0;
T_wait.start;T_wait.timeout;
f_EPTF_Base_stopAll(pass);
//f_EPTF_Base_wait4Shutdown();
}
function f_EPTF_IPL2_PerfTest_clientBehavior_wait4response(in LocalAddrConfigElem pl_LocalAddrConfigElem, in integer pl_Id)
runs on PerfTestClient_CT
{
var Result vl_result := c_emptyResult;
f_EPTF_IPL2_PerfTest_clientInit(pl_LocalAddrConfigElem, pl_Id);
v_sendCounter := 0;
timer T_testDuration := tsp_PerfTestDuration;
T_testDuration.start;
v_loop := true;
var integer vl_connIdx := 0;
var octetstring vl_msg := ''O;
for(var integer i:=0; i < tsp_messagePayloadSize; i:=i+1) {
vl_msg := vl_msg & int2oct(i mod 256, 1);
}
action("Starting to send messages");
var integer vl_skippedSends := 0;
while(v_loop) {
v_responseReceived := false;
if(ischosen(tsp_perfTest_proto.udp)) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_sendTo(
tsp_perfTest_transportType,
v_connectionIds[vl_connIdx],
tsp_RemoteAddrConfigList[pl_Id].IPAddr,
tsp_RemoteAddrConfigList[pl_Id].portNumber,
vl_msg,
vl_result);
} else {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_send(
tsp_perfTest_transportType,
v_connectionIds[vl_connIdx],
vl_msg,
vl_result);
}
// v_pendingMsgs[vl_connIdx] := v_pendingMsgs[vl_connIdx] + 1;
timer T_dummy := 0.0;
timer T_retransmit := 0.001;
T_dummy.start;
if(ischosen(tsp_perfTest_proto.udp)) { T_retransmit.start; }
alt {
[]T_testDuration.timeout { v_loop := false; }
[v_responseReceived] T_dummy.timeout {
vl_connIdx := vl_connIdx + 1;
if(vl_connIdx >= sizeof(v_connectionIds)) { vl_connIdx := 0; }
v_sendCounter := v_sendCounter + 1;
}
[]T_retransmit.timeout { vl_skippedSends := vl_skippedSends + 1; }
}
}
action("Finished sending messages");
action("Messages sent: ", v_sendCounter);
action("Messages received: ", v_recvCounter);
if(ischosen(tsp_perfTest_proto.udp)) {
action("Retransmissions: ", vl_skippedSends);
} else {
action("Skipped sends: ", vl_skippedSends);
}
action("Elapsed time: ", tsp_PerfTestDuration);
action("Average send msg/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
action("Average recv msg/sec: ", int2float(v_recvCounter)/tsp_PerfTestDuration);
f_EPTF_Base_stopAll(pass);
}
function f_EPTF_IPL2_PerfTest_serverInit(in RemoteAddrConfig pl_RemoteAddrConfig, in integer pl_Id)
runs on PerfTestServer_CT
{
var Result vl_result;
EPTF_CLL_Transport_Functions.f_EPTF_Transport_init(tsp_perfTest_transportType, "server" & int2str(pl_Id), tsp_perfTest_interfaceInformationList);
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgCallback(
tsp_perfTest_transportType,
"server" & int2str(pl_Id),
refers(f_EPTF_IPL2_PerfTest_messageProcess_echo)/*,
refers(f_EPTF_IPL2_PerfTest_eventCallback)*/);
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgLenCallback4LGenType(
tsp_perfTest_transportType,
refers(f_EPTF_IPL2_PerfTest_getMsgLen), {}, "server" & int2str(pl_Id));
var integer vl_userIdx := 0;
v_connectionIds[vl_userIdx] := EPTF_CLL_Transport_Functions.f_EPTF_Transport_listen(
tsp_perfTest_transportType,
tsp_perfTest_proto,
pl_RemoteAddrConfig.IPAddr, pl_RemoteAddrConfig.portNumber, "server" & int2str(pl_Id),
vl_result);
// debug
v_connectionIds[vl_userIdx] := EPTF_CLL_Transport_Functions.f_EPTF_Transport_listen(
tsp_perfTest_transportType,
tsp_perfTest_proto,
"192.168.20.1", pl_RemoteAddrConfig.portNumber, "server" & int2str(pl_Id),
vl_result);
//~debug
if(v_connectionIds[vl_userIdx] < 0) {
log("f_EPTF_Transport_listen returned ", v_connectionIds[vl_userIdx]);
log("f_EPTF_Transport_listen result ", vl_result);
f_EPTF_Base_stopAll(fail);
}
f_EPTF_Base_registerCleanup(refers(f_EPTF_IPL2_PerfTest_serverCleanup));
}
function f_EPTF_IPL2_PerfTest_serverCleanup()
runs on PerfTestServer_CT
{
var Result vl_result;
EPTF_CLL_Transport_Functions.f_EPTF_Transport_close( tsp_perfTest_transportType, v_connectionIds[0], vl_result );
timer T_wait;
T_wait.start(1.0);T_wait.timeout;
}
function f_EPTF_IPL2_PerfTest_messageProcess_echo(
in EPTF_Transport_TransportType pl_transportType,
in integer pl_connId,
in charstring pl_remHost,
in integer pl_remPort,
in charstring pl_locHost,
in integer pl_locPort,
in ProtoTuple pl_proto,
in integer pl_userData,
in octetstring pl_msg)
runs on PerfTestServer_CT
{
var Result vl_dummy;
if(ischosen(tsp_perfTest_proto.udp)) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_sendTo(
tsp_perfTest_transportType,
pl_connId,
pl_remHost,
pl_remPort,
pl_msg,
vl_dummy);
} else {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_send(
tsp_perfTest_transportType,
pl_connId,
pl_msg,
vl_dummy);
}
}
function f_EPTF_IPL2_PerfTest_serverBehavior(in RemoteAddrConfig pl_RemoteAddrConfig, in integer pl_Id)
runs on PerfTestServer_CT
{
f_EPTF_IPL2_PerfTest_serverInit(pl_RemoteAddrConfig, pl_Id);
action("Starting to receive messages");
f_EPTF_Base_wait4Shutdown();
}
testcase tc_EPTF_IPL2_PerfTest()
runs on PerfTestClient_CT
{
f_EPTF_Base_init_CT("mtc");
// var PerfTestServer_CT vl_server := PerfTestServer_CT.create;
// vl_server.start(f_EPTF_IPL2_PerfTest_serverBehavior());
var PerfTestClient_CTList vl_clients;
var PerfTestServer_CTList vl_servers;
var integer i;
if(tsp_startServers) {
for(i := 0; i < sizeof(tsp_RemoteAddrConfigList); i:= i+ 1){
vl_servers[i] := PerfTestServer_CT.create;
vl_servers[i].start(f_EPTF_IPL2_PerfTest_serverBehavior(tsp_RemoteAddrConfigList[i],i));
}
}
for(i := 0; i < sizeof(tsp_LocalAddrConfigList); i:= i+ 1){
vl_clients[i] := PerfTestClient_CT.create;
connect(self : sync_PCO, vl_clients[i] : sync_PCO);
if(tsp_perfTest_wait4response) {
vl_clients[i].start(f_EPTF_IPL2_PerfTest_clientBehavior_wait4response(tsp_LocalAddrConfigList[i],i));
} else {
vl_clients[i].start(f_EPTF_IPL2_PerfTest_clientBehavior(tsp_LocalAddrConfigList[i],i));
}
}
i := 0;
if(sizeof(tsp_LocalAddrConfigList) > 0) {
alt{
[]sync_PCO.receive {
i := i + 1;
if (i < sizeof(tsp_LocalAddrConfigList)) { repeat;
}
}
}
}
for(i := 0; i < sizeof(tsp_LocalAddrConfigList); i:= i+ 1){
sync_PCO.send(integer : i) to vl_clients[i];
}
// f_EPTF_Base_wait4Shutdown();
timer T_wait := tsp_PerfTestDuration + 10.0;
T_wait.start; T_wait.timeout;
f_EPTF_Base_stop(pass);
}
} // group IPL2_PerfTest
} //group IPL2_SimpleTests
testcase tc_EPTF_UniqueId_PerfTest()
runs on EPTF_Transport_Test_CT
{
var EPTF_IntegerList vl_uniqueIds := {};
EPTF_CLL_Transport_Functions.f_EPTF_Transport_init(IPL4, "UniqueId_PerfTest");
timer T_meas := 10000.0;
T_meas.start;
for(var integer i := 0; i<100000; i:=i+1) {
vl_uniqueIds[i] := f_EPTF_Transport_newUniqueConnId(IPL4, i);
}
log("allocated 100000 unique IDs in ", T_meas.read, " seconds");
T_meas.stop;
// timer T_wait := 10.0;
// T_wait.start;T_wait.timeout;
var EPTF_Transport_TransportType vl_transportType;
var integer vl_connId;
T_meas.start;
var Result vl_result;
for(var integer i := 0; i<100000; i:=i+1) {
f_EPTF_Transport_getConnIdFromUniqueId(vl_uniqueIds[i], vl_transportType, vl_connId, vl_result);
}
log("f_EPTF_Transport_getConnIdFromUniqueId for 100000 unique IDs in ", T_meas.read, " seconds");
T_meas.stop;
var integer vl_dummy;
T_meas.start;
for(var integer i := 0; i<100000; i:=i+1) {
vl_dummy := f_EPTF_Transport_getUniqueIdFromConnId(IPL4, i);
}
log("f_EPTF_Transport_getUniqueIdFromConnId for 100000 unique IDs in ", T_meas.read, " seconds");
T_meas.stop;
T_meas.start;
for(var integer i := 0; i<100000; i:=i+1) {
f_EPTF_Transport_freeUniqueConnId(i);
}
log("f_EPTF_Transport_freeUniqueConnId for 100000 unique IDs in ", T_meas.read, " seconds");
T_meas.stop;
f_EPTF_Base_stop(pass);
}
// ~tests of transport unique connection IDs
function f_EPTF_TransportIPL2_TCPEncDec_genPayload(
in integer pl_length)
return octetstring {
var octetstring vl_payload := ''O;
if (pl_length < 0) {
pl_length := 0;
}
for (var integer i := 0; i < pl_length; i := i + 1) {
vl_payload := vl_payload&int2oct(i mod 256, 1);
}
return vl_payload;
}
function f_EPTF_TransportIPL2_TCPEncDec_genRawTcp(
in integer pl_payloadLength)
return octetstring {
var EPTF_TransportIPL2_PDU_TCP vl_pdu_new := {
source_port := 1000,
dest_port := 2000,
sequence_number := 0,
acknowledgment_number := 0,
control_bits := c_EPTF_TransportIPL2_TCPControlBit_ack + c_EPTF_TransportIPL2_TCPControlBit_psh,
window := 1024,
options := 'AABB'O,
data := f_EPTF_TransportIPL2_TCPEncDec_genPayload(pl_payloadLength)
}
return f_EPTF_TransportIPL2_encodeTCPWithChecksum(
f_OctetIpv4("221.0.0.1"),
f_OctetIpv4("192.168.0.1"),
vl_pdu_new);
}
group SIP_Transport_PerfTest {
function f_EPTF_SIP_Transport_PerfTest_getMsgLen(
in EPTF_Transport_TransportType pl_transportType,
in octetstring pl_stream,
inout EPTF_IntegerList pl_args
)
return integer
{
return tsp_messagePayloadSize;
}
function f_EPTF_SIP_ReceiveMessage(inout EPTF_SIP_Message_IN pl_message)
runs on SIPTransport_Client_CT {
v_recvCounter := v_recvCounter + 1;
v_responseReceived := true;
//action("Receive userid :", pl_message.userId);
//action("connid :", pl_message.transportParams.connId);
if(v_pendingMsgs[pl_message.userId] > 0) {
v_pendingMsgs[pl_message.userId] := v_pendingMsgs[pl_message.userId] - 1;
}
}
function f_EPTF_SIP_Transport_PerfTest_clientInit(in LocalAddrConfigElem pl_LocalAddrConfigElem, in integer pl_Id)
runs on SIPTransport_Client_CT
{
var charstring vl_proto;
if (tsp_perfTest_proto == {tcp := {}}) { vl_proto := "tcp"; } else { vl_proto := "udp"; }
f_EPTF_SIP_LocalTransport_init(vl_proto, "SIP_Transport_PerfTest", tsp_perfTest_transportType);
var Result vl_result := c_emptyResult;
var integer j, k;
var integer vl_userIdx := 0;
var integer startIp := oct2int(f_OctetIpv4(pl_LocalAddrConfigElem.startIPAddr));
for(j:=0; j<pl_LocalAddrConfigElem.nofAddr; j:=j+1) {
var charstring ipAddr := f_EPTF_TransportIPL2_ip2str(int2oct(startIp + j, 4));
//log(%definitionId&": IP Address: ", ipAddr);
var integer portNum := pl_LocalAddrConfigElem.startPort;
for(k:=0; k<pl_LocalAddrConfigElem.nofPorts; k:=k+1) {
action("Start initing: ",ipAddr, " ", portNum);
f_EPTF_SIP_IPL4asp_SetUserData(
vl_userIdx,
ipAddr,
{portNum, portNum },
vl_proto,
tsp_RemoteAddrConfigList[pl_Id].IPAddr,
tsp_RemoteAddrConfigList[pl_Id].portNumber);
//f_EPTF_SIP_addSipUserToTransportUserData(vl_userIdx,vl_userIdx);
// action("vg_SIP_userDB = ", vg_SIP_userDB)
v_connectionIds[vl_userIdx] := -1;
if(ischosen(tsp_perfTest_proto.udp)) {
/*f_EPTF_SIP_listen(
vl_userIdx,
ipAddr,
portNum,
tsp_perfTest_proto,
{},
v_connectionIds[vl_userIdx],
tsp_perfTest_transportType);*/
f_EPTF_SIP_connect(
vl_userIdx,
tsp_RemoteAddrConfigList[pl_Id].IPAddr,
tsp_RemoteAddrConfigList[pl_Id].portNumber,
ipAddr,
portNum,
-1,
tsp_perfTest_proto,
{},
v_connectionIds[vl_userIdx],
tsp_perfTest_transportType);
} else {
f_EPTF_SIP_connect(
vl_userIdx,
tsp_RemoteAddrConfigList[pl_Id].IPAddr,
tsp_RemoteAddrConfigList[pl_Id].portNumber,
ipAddr,
portNum,
-1,
tsp_perfTest_proto,
{},
v_connectionIds[vl_userIdx],
tsp_perfTest_transportType);
if(tsp_perfTest_openListenSockets) {
portNum := portNum + 1;
var Result vl_listenRes := c_emptyResult;
f_EPTF_SIP_listen(
vl_userIdx,
ipAddr,
portNum,
tsp_perfTest_proto,
{},
v_tcpListenIds[vl_userIdx],
tsp_perfTest_transportType);
}
}
portNum := portNum + 1;
timer T_wait := 0.0001;
T_wait.start; T_wait.timeout;
if(v_connectionIds[vl_userIdx] < 0) {
action(ipAddr&":"&int2str(portNum)&
" -> "&tsp_RemoteAddrConfigList[pl_Id].IPAddr&":"&int2str(tsp_RemoteAddrConfigList[pl_Id].portNumber));
action("f_EPTF_Transport_connect returned ", v_connectionIds[vl_userIdx]);
action("f_EPTF_Transport_connect result ", vl_result);
f_EPTF_Base_stopAll(fail);
}
v_pendingMsgs[vl_userIdx] := 0;
vl_userIdx := vl_userIdx + 1;
}
}
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgLenCallback4LGenType(tsp_perfTest_transportType, refers(f_PerfTest_getMsgLen), {}, c_SIP_Transport_LGenType);
f_SIP_setLocalTransportReceiveFunction( refers(f_EPTF_SIP_ReceiveMessage) );
action("Opened ", sizeof(v_connectionIds), " connections");
action("Opened ", sizeof(v_tcpListenIds), " listen sockets");
action("Started up in ", f_EPTF_Base_getRelTimeInSecs(), " seconds.");
f_EPTF_Base_registerCleanup(refers(f_EPTF_SIP_Transport_PerfTest_clientCleanup));
sync_PCO.send(pl_Id);
sync_PCO.receive;
}
function f_EPTF_SIP_Transport_PerfTest_clientCleanup()
runs on SIPTransport_Client_CT
{
var Result vl_result;
timer T_wait;
for(var integer i:=0; i<sizeof(v_connectionIds); i:=i+1) {
f_EPTF_SIP_CloseConnection( v_connectionIds[i] );
T_wait.start(0.0001);T_wait.timeout;
}
for(var integer i:=0; i<sizeof(v_tcpListenIds); i:=i+1) {
f_EPTF_SIP_CloseConnection( v_tcpListenIds[i] );
T_wait.start(0.0001);T_wait.timeout;
}
T_wait.start(1.0);T_wait.timeout;
}
function f_EPTF_SIP_Transport_PerfTest_clientBehavior(in LocalAddrConfigElem pl_LocalAddrConfigElem, in integer pl_Id)
runs on SIPTransport_Client_CT
{
var Result vl_result := c_emptyResult;
f_EPTF_SIP_Transport_PerfTest_clientInit(pl_LocalAddrConfigElem, pl_Id);
var integer vl_userIdx := 0;
v_sendCounter := 0;
timer T_testDuration := tsp_PerfTestDuration;
T_testDuration.start;
v_loop := true;
var integer vl_connIdx := v_connectionIds[vl_userIdx];
var octetstring vl_msg := ''O;
for(var integer i:=0; i < tsp_messagePayloadSize; i:=i+1) {
vl_msg := vl_msg & int2oct(i mod 256, 1);
}
action("Starting to send messages");
// action("vg_SIP_userDB = ", vg_SIP_userDB)
var integer vl_skippedSends := 0;
while(v_loop) {
timer T_dummy := 0.00001;
v_responseReceived := false;
T_dummy.start;
alt {
[]T_testDuration.timeout { v_loop := false; }
[] T_dummy.timeout {}
}
if(ischosen(tsp_perfTest_proto.udp)) {
f_EPTF_SIP_send(vl_userIdx, vl_connIdx, vl_msg);
if(v_pendingMsgs[vl_userIdx] < tsp_maxPendingMsgPerUser) {
v_pendingMsgs[vl_userIdx] := v_pendingMsgs[vl_userIdx] + 1;
v_sendCounter := v_sendCounter + 1;
} else {
// UDP -> needs retransmit
vl_skippedSends := vl_skippedSends + 1;
}
} else {
if(v_pendingMsgs[vl_userIdx] < tsp_maxPendingMsgPerUser) {
/*if (ischosen(v_connections.data[vl_connIdx].proto.tcp) and
TEMPORARY_UNAVAILABLE == v_connections.data[vl_connIdx].connState)
{
f_EPTF_SIP_MessageBufferAdd(vl_userIdx, vl_connIdx, vl_msg);
}else{*/
f_EPTF_SIP_send(vl_userIdx, vl_connIdx, vl_msg);
//}
v_pendingMsgs[vl_userIdx] := v_pendingMsgs[vl_userIdx] + 1;
v_sendCounter := v_sendCounter + 1;
} else {
vl_skippedSends := vl_skippedSends + 1;
}
}
// vl_connIdx := vl_connIdx + 1;
vl_userIdx := vl_userIdx + 1;
// if(vl_connIdx >= sizeof(v_connectionIds)) { vl_connIdx := 0; }
if(vl_userIdx >= sizeof(v_connectionIds)) { vl_userIdx := 0; }
vl_connIdx := v_connectionIds[vl_userIdx];
}
action("Finished sending messages");
action("Messages sent: ", v_sendCounter);
action("Messages received: ", v_recvCounter);
if(ischosen(tsp_perfTest_proto.udp)) {
action("Retransmissions: ", vl_skippedSends);
} else {
action("Skipped sends: ", vl_skippedSends);
}
action("Elapsed time: ", tsp_PerfTestDuration);
action("Average send msg/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
action("Average recv msg/sec: ", int2float(v_recvCounter)/tsp_PerfTestDuration);
action("vg_EPTF_SIP_IPL4asp_stats: ", vg_EPTF_SIP_IPL4asp_stats);
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofOpenConnections_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofOpenConnections_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofTransportWarnings_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofTransportWarnings_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedMessages_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedMessages_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentMessages_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentMessages_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedBytes_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedBytes_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentBytes_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentBytes_k));
timer T_wait := 2.0;
T_wait.start;T_wait.timeout;
f_EPTF_Base_stopAll(pass);
}
function f_EPTF_SIP_Transport_PerfTest_clientBehavior_wait4response(in LocalAddrConfigElem pl_LocalAddrConfigElem, in integer pl_Id)
runs on SIPTransport_Client_CT
{
var Result vl_result := c_emptyResult;
var integer vl_userIdx := 0;
f_EPTF_SIP_Transport_PerfTest_clientInit(pl_LocalAddrConfigElem, pl_Id);
v_sendCounter := 0;
timer T_testDuration := tsp_PerfTestDuration;
T_testDuration.start;
v_loop := true;
var integer vl_connIdx := 0;
var octetstring vl_msg := ''O;
for(var integer i:=0; i < tsp_messagePayloadSize; i:=i+1) {
vl_msg := vl_msg & int2oct(i mod 256, 1);
}
action("Starting to send messages");
var integer vl_skippedSends := 0;
while(v_loop) {
v_responseReceived := false;
if(ischosen(tsp_perfTest_proto.udp)) {
f_EPTF_SIP_send(vl_userIdx, vl_connIdx, vl_msg);
} else {
if (ischosen(v_connections.data[vl_connIdx].proto.tcp) and
TEMPORARY_UNAVAILABLE == v_connections.data[vl_connIdx].connState)
{
f_EPTF_SIP_MessageBufferAdd(vl_userIdx, vl_connIdx, vl_msg);
}else{
f_EPTF_SIP_send(vl_userIdx, vl_connIdx, vl_msg);
}
}
timer T_dummy := 0.0;
timer T_retransmit := 0.001;
T_dummy.start;
if(ischosen(tsp_perfTest_proto.udp)) { T_retransmit.start; }
/* FIXME Something is really wrong here, if the v_responseReceived is between [], then dynamic test case error happend.
alt {
[]T_testDuration.timeout { v_loop := false; }
[v_responseReceived] T_dummy.timeout {
vl_connIdx := vl_connIdx + 1;
if(vl_connIdx >= sizeof(v_connectionIds)) { vl_connIdx := 0; }
vl_userIdx := vl_userIdx + 1;
if(vl_userIdx >= sizeof(v_connectionIds)) { vl_userIdx := 0; }
v_sendCounter := v_sendCounter + 1;
}
[]T_retransmit.timeout { vl_skippedSends := vl_skippedSends + 1; }
}
*/
alt {
[]T_testDuration.timeout { v_loop := false; }
[] T_dummy.timeout { vl_connIdx := vl_connIdx + 1;
if(vl_connIdx >= sizeof(v_connectionIds)) { vl_connIdx := 0; }
vl_userIdx := vl_userIdx + 1;
if(vl_userIdx >= sizeof(v_connectionIds)) { vl_userIdx := 0; }
v_sendCounter := v_sendCounter + 1; }
[]T_retransmit.timeout { vl_skippedSends := vl_skippedSends + 1; }
}
}
action("Finished sending messages");
action("Messages sent: ", v_sendCounter);
action("Messages received: ", v_recvCounter);
if(ischosen(tsp_perfTest_proto.udp)) {
action("Retransmissions: ", vl_skippedSends);
} else {
action("Skipped sends: ", vl_skippedSends);
}
action("Elapsed time: ", tsp_PerfTestDuration);
action("Average send msg/sec: ", int2float(v_sendCounter)/tsp_PerfTestDuration);
action("Average recv msg/sec: ", int2float(v_recvCounter)/tsp_PerfTestDuration);
action("vg_EPTF_SIP_IPL4asp_stats: ", vg_EPTF_SIP_IPL4asp_stats);
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofOpenConnections_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofOpenConnections_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofTransportWarnings_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofTransportWarnings_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedMessages_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedMessages_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentMessages_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentMessages_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedBytes_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofReceivedBytes_k));
action("f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentBytes_k): ", f_EPTF_Var_getIntValue(v_EPTF_SIP_Transport_stats.nofSentBytes_k));
f_EPTF_Base_stopAll(pass);
}
function f_EPTF_SIP_Transport_PerfTest_serverInit(in RemoteAddrConfig pl_RemoteAddrConfig, in integer pl_Id)
runs on PerfTestServer_CT
{
var Result vl_result;
EPTF_CLL_Transport_Functions.f_EPTF_Transport_init(tsp_perfTest_transportType, "server" & int2str(pl_Id)); //, {}, false);
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgCallback(
tsp_perfTest_transportType,
"server" & int2str(pl_Id),
refers(f_EPTF_SIP_Transport_PerfTest_messageProcess_echo)/*,
refers(f_EPTF_SIP_Transport_PerfTest_eventCallback)*/);
EPTF_CLL_Transport_Functions.f_EPTF_Transport_registerMsgLenCallback4LGenType(
tsp_perfTest_transportType,
refers(f_EPTF_SIP_Transport_PerfTest_getMsgLen), {}, "server" & int2str(pl_Id));
var integer vl_userIdx := 0;
v_connectionIds[vl_userIdx] := EPTF_CLL_Transport_Functions.f_EPTF_Transport_listen(
tsp_perfTest_transportType,
tsp_perfTest_proto,
pl_RemoteAddrConfig.IPAddr, pl_RemoteAddrConfig.portNumber, "server" & int2str(pl_Id),
vl_result);
if(v_connectionIds[vl_userIdx] < 0) {
log("f_EPTF_Transport_listen returned ", v_connectionIds[vl_userIdx]);
log("f_EPTF_Transport_listen result ", vl_result);
f_EPTF_Base_stopAll(fail);
}
f_EPTF_Base_registerCleanup(refers(f_EPTF_SIP_Transport_PerfTest_serverCleanup));
}
function f_EPTF_SIP_Transport_PerfTest_serverCleanup()
runs on PerfTestServer_CT
{
var Result vl_result;
EPTF_CLL_Transport_Functions.f_EPTF_Transport_close( tsp_perfTest_transportType, v_connectionIds[0], vl_result );
timer T_wait;
T_wait.start(1.0);T_wait.timeout;
}
function f_EPTF_SIP_Transport_PerfTest_messageProcess_echo(
in EPTF_Transport_TransportType pl_transportType,
in integer pl_connId,
in charstring pl_remHost,
in integer pl_remPort,
in charstring pl_locHost,
in integer pl_locPort,
in ProtoTuple pl_proto,
in integer pl_userData,
in octetstring pl_msg)
runs on PerfTestServer_CT
{
var Result vl_dummy;
//action("server echo connid:", pl_connId);
if(ischosen(tsp_perfTest_proto.udp)) {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_sendTo(
tsp_perfTest_transportType,
pl_connId,
pl_remHost,
pl_remPort,
pl_msg,
vl_dummy);
} else {
EPTF_CLL_Transport_Functions.f_EPTF_Transport_send(
tsp_perfTest_transportType,
pl_connId,
pl_msg,
vl_dummy);
}
}
function f_EPTF_SIP_Transport_PerfTest_serverBehavior(in RemoteAddrConfig pl_RemoteAddrConfig, in integer pl_Id)
runs on PerfTestServer_CT
{
f_EPTF_SIP_Transport_PerfTest_serverInit(pl_RemoteAddrConfig, pl_Id);
action("Starting to receive messages");
f_EPTF_Base_wait4Shutdown();
}
testcase tc_EPTF_SIP_Transport_PerfTest()
runs on SIPTransport_Client_CT
{
f_EPTF_Base_init_CT("mtc");
var SIPTransport_Client_CTList vl_clients;
var PerfTestServer_CTList vl_servers;
var integer i;
if(tsp_startServers) {
for(i := 0; i < sizeof(tsp_RemoteAddrConfigList); i:= i+ 1){
vl_servers[i] := PerfTestServer_CT.create;
vl_servers[i].start(f_EPTF_SIP_Transport_PerfTest_serverBehavior(tsp_RemoteAddrConfigList[i],i));
}
}
for(i := 0; i < sizeof(tsp_LocalAddrConfigList); i:= i+ 1){
vl_clients[i] := SIPTransport_Client_CT.create;
connect(self : sync_PCO, vl_clients[i] : sync_PCO);
if(tsp_perfTest_wait4response) {
vl_clients[i].start(f_EPTF_SIP_Transport_PerfTest_clientBehavior_wait4response(tsp_LocalAddrConfigList[i],i));
} else {
vl_clients[i].start(f_EPTF_SIP_Transport_PerfTest_clientBehavior(tsp_LocalAddrConfigList[i],i));
}
}
i := 0;
if(sizeof(tsp_LocalAddrConfigList) > 0) {
alt{
[]sync_PCO.receive {
i := i + 1;
if (i < sizeof(tsp_LocalAddrConfigList)) { repeat;
}
}
}
}
for(i := 0; i < sizeof(tsp_LocalAddrConfigList); i:= i+ 1){
sync_PCO.send(integer : i) to vl_clients[i];
}
timer T_wait := tsp_PerfTestDuration + 10.0;
T_wait.start; T_wait.timeout;
f_EPTF_Base_stop(pass);
}
}
private function f_PerfTest_getMsgLen(
in EPTF_Transport_TransportType pl_transportType,
in octetstring stream,
inout EPTF_IntegerList args) // variadic list of user defined parameters
return integer {
return 520;
}
control {
execute(tc_EPTF_SegmentBuffer_PerfTest());
execute(tc_EPTF_IPL2_Test_tcpPerf1Socket());
execute(tc_EPTF_IPL2_Test_tcpPerf_sendFile());
execute(tc_EPTF_IPL2_PerfTest());
execute(tc_EPTF_UniqueId_PerfTest());
execute(tc_EPTF_SIP_Transport_PerfTest());
}
} // end of module