From ac3598008390c5185f6b71feffe31cb7fa61b9a7 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 12 Apr 2017 12:13:44 +0200 Subject: initial chekin of code received by Ericsson on 20170410 --- SCCP_Test/SCCP_Testcases.cfg | 54 +++++ SCCP_Test/SCCP_Testcases.ttcn | 505 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 559 insertions(+) create mode 100644 SCCP_Test/SCCP_Testcases.cfg create mode 100644 SCCP_Test/SCCP_Testcases.ttcn (limited to 'SCCP_Test') diff --git a/SCCP_Test/SCCP_Testcases.cfg b/SCCP_Test/SCCP_Testcases.cfg new file mode 100644 index 00000000..ce354862 --- /dev/null +++ b/SCCP_Test/SCCP_Testcases.cfg @@ -0,0 +1,54 @@ +[LOGGING] +#FileName := "SCCP_selftest.cfg" +FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := LOG_ALL +#ConsoleMask := TTCN_TESTCASE | TTCN_PORTEVENT | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT +#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +LogSourceInfo := Yes + +[EXECUTE] +#SCCP_selftest.tc_ConnlessSendingShortASP +#SCCP_selftest.tc_ConnlessSendingLongASP +#SCCP_selftest.tc_ConnOrientedShortASPSending +#SCCP_Testcases.tc_ConnlessSendingLongASP +SCCP_Testcases.tc_ConnOrientedShortASPSending + +[TESTPORT_PARAMETERS] + +system.sctp.debug := "yes" + +//see documentation (User guide) for the parameters) + + +[MODULE_PARAMETERS] + +M3UA_Emulation.tsp_logVerbose := true; +M3UA_Emulation.tsp_M3UA_Server_Mode := false; +SCCP_Testcases.tsp_address := +{ + local_sctp_port := 2905, + local_ip_addr := "10.6.70.19", + remote_sctp_port := 2905, + remote_ip_addr := "159.107.193.33" +} + + +SCCP_Testcases.tsp_own_GT := '14377760'H +SCCP_Testcases.tsp_remote_GT := '14375760'H +SCCP_Testcases.tsp_SSN := 8 //8:MSC 5:MAP see 3.4.2.2/Q.713 +SCCP_Testcases.tsp_SIO := '83'O //SCCP national +SCCP_Testcases.tsp_own_SPC := 2351 +SCCP_Testcases.tsp_remote_SPC := 2300// max value on 14 bits +SCCP_Testcases.tsp_SLS := 0 +#[tsp_sccp_serviceType := "mtp3_itu" |"mtp3b_itu"|"mtp3_ansi"|"mtp3b_ansi"| "mtp3b_tcc"] +SCCP_Testcases.tsp_sccp_serviceType := "mtp3_ttc" + +#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 : +#tsp_translationType := 7 +SCCP_Emulation.tsp_SIF_MaxLength := 272 +SCCP_Emulation.tsp_force_xudt := 0 // 1:yes, 0:no + +[MAIN_CONTROLLER] +//TCPPort := 7145 +//NumHCs := 1 diff --git a/SCCP_Test/SCCP_Testcases.ttcn b/SCCP_Test/SCCP_Testcases.ttcn new file mode 100644 index 00000000..0cf1c7a0 --- /dev/null +++ b/SCCP_Test/SCCP_Testcases.ttcn @@ -0,0 +1,505 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// +// Copyright Test Competence Center (TCC) ETH 2007 +// +// +// +// The copyright to the computer program(s) herein is the property of TCC. // +// The program(s) may be used and/or copied only with the written permission // +// of TCC or in accordance with the terms and conditions stipulated in the // +// agreement/contract under which the program(s) have been supplied +// +// +// +/////////////////////////////////////////////////////////////////////////////// +// +// File: SCCP_TestCases.ttcn +// Description: SS7 SCCP basic SEA test +// according to specification ITU-T SS7 SCCP, ANSI ..., TCC ... +// References: ITU-T: Recommendation Q.711-Q.714, +// ANSI T1.112-2001, +// TCC +// Rev: +// Updated: 2007.04.12 +// Contact: http://ttcn.ericsson.se +// + + + + +//Note : this has been modified to include M3UA Emulation and SCTP Test port +//Elemer Lelik 12.04.2017 + + + +module SCCP_Testcases +{//startmodule + +modulepar +{ + hexstring tsp_own_GT := '0614377760'H; + hexstring tsp_remote_GT := '0614375760'H; + integer tsp_SSN := 2; //8:MSC 5:MAP see 3.4.2.2/Q.713 + octetstring tsp_SIO := '83'O;//SCCP national + integer tsp_own_SPC := 461087; // =0x07091E + integer tsp_remote_SPC := 461086; // =0x07091D + integer tsp_SLS := 0; + charstring tsp_sccp_serviceType := "mtp3_itu"; + + octetstring MTP3_UserPart_SIO; + integer MTP3_UserPart_OPC, + MTP3_UserPart_DPC, + MTP3_UserPart_SLS + + + SCTP_Association_Address tsp_address := { 0, "", 0, "" }; + +}//modulepar + +import from General_Types all; + +import from M3UA_Types all; +import from M3UA_Emulation all; + +import from MTP3asp_Types all; +import from MTP3asp_PortType all; + + +import from SCCPasp_Types all; +import from SCCP_Types all; +import from SCCP_Emulation all; + + +import from SCTPasp_Types all; +import from SCTPasp_PortType all; + + + + +/************************************* +* Components +**************************************/ + + +// Model of MSC: +type component system_CT { + + port SCTPasp_PT sctp; + + +}; + + + + +// Main test component with behaviour SCCPuserA andSCCPuserB +type component MTC_CT { + var SCCP_PAR_Address v_CalledAddress, v_CallingAddress; + var integer v_testvalue; + var SCCP_CT vc_SCCP_A ; + + var M3UA_CT vc_M3UA ; + + var MSC_SCCP_MTP3_parameters v_BootA; + var SCCP_PAR_Connection_Id v_cid_A ; + + port SCCPasp_PT A_PORT; //SCCPuserA +} + +function initBootParams() runs on MTC_CT +{ + v_BootA := + { sio:= + { ni:= substr(oct2bit(tsp_SIO),0,2), + prio:= substr(oct2bit(tsp_SIO),2,2), + si:= substr(oct2bit(tsp_SIO),4,4) + }, + opc:=tsp_own_SPC, + dpc:=tsp_remote_SPC, + sls:=tsp_SLS, + sccp_serviceType:=tsp_sccp_serviceType, + ssn:= tsp_SSN + }; + return; +} //initBootParams + +function init() runs on MTC_CT //system system_CT +{ + initBootParams(); + log("v_BootA:",v_BootA); + + // Protocol Stack creation & connections: + vc_SCCP_A:=SCCP_CT.create; + vc_M3UA:=M3UA_CT.create; + + connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT); + connect(vc_M3UA:MTP3_SP_PORT,vc_SCCP_A:MTP3_SCCP_PORT); + map(vc_M3UA:SCTP_PORT,system:sctp); + + vc_M3UA.start(f_M3UA_Emulation(tsp_address)); + vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters + + + log( "init() is done"); + +}// init + +function terminate( ) runs on MTC_CT //system system_CT +{ + log( "terminate() started"); + /*while( all component.running != true ) + { + //waits + }*/ + all component.stop; + + unmap(vc_M3UA:SCTP_PORT,system:sctp); + disconnect(vc_M3UA:MTP3_SP_PORT,vc_SCCP_A:MTP3_SCCP_PORT); + disconnect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT); + + + log(" all components stopped"); + self.stop; +} //terminate + +// function getOddEven returns '0' +// if even number of dec digit can be found in GT see Q.713 +function getOddEven( in hexstring pl_GT) return bitstring +{ + return int2bit( (lengthof(pl_GT) mod 2) ,1); +} + +function getOddEven_ansi( in hexstring pl_GT) return bitstring +{ + if( (lengthof(pl_GT) mod 2) == 0 ) { return '0010'B;} //even + else { return '0001'B;} //odd +} + +//****************************************************************** +//function setAddresses_gti0001() runs on MTC_CT +// Sets CalledAddress and CallingAddress as a gti001-type address +// according to the cfg file. +//****************************************************************** + +function setAddresses_gti0001() runs on MTC_CT +{ + if( (tsp_sccp_serviceType == "mtp3_itu") or + (tsp_sccp_serviceType == "mtp3b_itu") or + (tsp_sccp_serviceType == "mtp3_ttc") or + (tsp_sccp_serviceType == "mtp3b_ttc") + ) { + v_CalledAddress :={ + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + },//addressIndicator + signPointCode := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn + subsystemNumber := tsp_SSN, + globalTitle := { + gti0001:= { + natureOfAddress := '0000011'B, + oddeven := getOddEven( tsp_remote_GT ), + globalTitleAddress := tsp_remote_GT + } + }//globalTitle + } // v_CalledAddress + + v_CallingAddress :={ + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + },//addressIndicator + signPointCode := SCCP_SPC_int2bit(tsp_own_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn + subsystemNumber := tsp_SSN, + globalTitle:= { + gti0001 := { + natureOfAddress := '0000011'B, + oddeven := getOddEven( tsp_own_GT ), + globalTitleAddress := tsp_own_GT + } + }//globalTitle + } // v_CallingAddress + + } else if( + (tsp_sccp_serviceType == "mtp3_ansi") or + (tsp_sccp_serviceType == "mtp3b_ansi") + ) { + + v_CalledAddress :={ + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + },//addressIndicator + signPointCode := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn + subsystemNumber := tsp_SSN, + globalTitle := { + gti0011:= { + translationType := int2oct(7,1), + encodingScheme := getOddEven_ansi( tsp_remote_GT ), + numberingPlan := '0111'B, //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1 + globalTitleAddress:= tsp_remote_GT + } + }//globalTitle + } // v_CalledAddress + + v_CallingAddress :={ + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + },//addressIndicator + signPointCode := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn + subsystemNumber := tsp_SSN, + globalTitle := { + gti0011:= { + translationType := int2oct(7,1), + encodingScheme := getOddEven_ansi( tsp_own_GT ), + numberingPlan := '0111'B, //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1 + globalTitleAddress:= tsp_own_GT + } + }//globalTitle + } // v_CallingAddress + }//if + +}//setAddresses_gti001 + +function f_SendAndReceive1N_UNITDATA(in octetstring pl_userdata) runs on MTC_CT +{ + var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind; + timer TL_timer:= 120.0; + TL_timer.start; + A_PORT.send( t_ASP_N_UNITDATA_req( v_CalledAddress, + v_CallingAddress, + '00000001'B, //sequence control + '00000001'B, //return option + pl_userdata, + omit ) ); + alt { + [] A_PORT.receive( tr_ASP_N_UNITDATA_ind ) -> value vl_N_UNITDATA_ind + { + + if( (vl_N_UNITDATA_ind.calledAddress == v_CalledAddress ) and + (vl_N_UNITDATA_ind.callingAddress == v_CallingAddress) and + (vl_N_UNITDATA_ind.userData == pl_userdata) ) + { + log("Correct CalledAddress, CallingAddress and userData received, data are correct"); + setverdict(pass); + } + else + { + log("Some data corrupted"); + setverdict( fail ); + } + }; + [] TL_timer.timeout + { + setverdict( fail ); + log("Timeout...."); + }; + } //alt + TL_timer.stop; +}//f_SendAndReceive1N_UNITDATA + +/**************************************************** +Connection Oriented Part +****************************************************/ + +/**************************************************** +function f_connect +Establishes a connection +(Sends an ASP_SCCP_N_CONNECT_req on A_PORT and waits for +N_CONNECT_ind on B_PORT. If it is received, +it sends back an ASP_SCCP_N_CONNECT_res on B_PORT and waits for +N_CONNECT_cfm on A_PORT) +****************************************************/ +function f_connect() runs on MTC_CT return boolean +{ + var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind; + var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm; + setverdict(none); + v_cid_A := 13; + timer TL_timer:= 120.0; + TL_timer.start; + + A_PORT.send( t_ASP_N_CONNECT_req( v_CalledAddress, + v_CallingAddress, + omit, //expeditedDataSel + omit, //QoS + omit, //userData + v_cid_A, + omit //importance + ) ); + + alt { + [] A_PORT.receive( tr_ASP_N_CONNECT_cfm ) -> value vl_N_CONNECT_cfm + { + setverdict( pass ); + log("f_connect finished successfully"); + return true; + } + [] TL_timer.timeout + { + setverdict( fail ); + log("Timeout...."); + return false; + } + }// alt + log("f_connect finished"); + return false; +}//f_connect + +/**************************************************** +function f_send +Sends an ASP_SCCP_N_DATA_req on A_PORT and waits for answer in +A_PORT +****************************************************/ +function f_send(in octetstring pl_userdata) runs on MTC_CT +{ + timer TL_timer:= 120.0; + TL_timer.start; + A_PORT.send( t_ASP_N_DATA_req ( pl_userdata, v_cid_A, omit) ) ; + alt { + [] A_PORT.receive + { + setverdict( pass ); + log("f_connect finished successfully"); + + } + [] TL_timer.timeout + { + setverdict( fail ); + log("Timeout...."); + + } + + } //alt +}//f_send + +//f_disconnect with timeout + +function f_disconnect( ) runs on MTC_CT +{ + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + timer TL_timer:= 25.0; + TL_timer.start; + A_PORT.send( t_ASP_N_DISCONNECT_req( omit, // respondingAddress + 0, //reason : end user originated, see 3.11/Q.713 + omit, //userData + v_cid_A, + omit )) + alt { + + [] A_PORT.receive + { + repeat; + } + [] TL_timer.timeout + { + setverdict( pass ); + log("Timeout...."); + }; + }//alt + + +}//f_disconnect + +//=================================================== +// Testcases +//=================================================== + +/**************************************************** +tc_ConnlessSendingShortASP +Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req +and receives it in one ASP_SCCP_N_UNITDATA_req. +SCCP transfers information +in udp or (forced) xudp packets. +****************************************************/ +testcase tc_ConnlessSendingShortASP() runs on MTC_CT +{ + var octetstring vl_userdata; + init(); + setAddresses_gti0001(); + vl_userdata :='12345678901234567890'O; + f_SendAndReceive1N_UNITDATA( vl_userdata ); + terminate(); + } //tc_ConnlessSendingShortASP + +/**************************************************** + tc_ConnlessSendingLongASP + Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req + and receives it in one ASP_SCCP_N_UNITDATA_req. + It is used for segmentation and reassembly. + SCCP transfers information +in xudp packets +****************************************************/ +testcase tc_ConnlessSendingLongASP() runs on MTC_CT system system_CT +{ + var octetstring vl_userdata; + var integer vl_i; + init(); + setAddresses_gti0001(); + vl_userdata := ''O; + for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) { + vl_userdata := vl_userdata &'12345678901234567890'O; + } + f_SendAndReceive1N_UNITDATA( vl_userdata ); + terminate(); +}//tc_ConnlessSendingLongASP + +/**************************************************** +tc_ConnOrientedShortASPSending +****************************************************/ +testcase tc_ConnOrientedShortASPSending() runs on MTC_CT system system_CT +{ + var octetstring vl_userdata; + init(); + setAddresses_gti0001(); + vl_userdata := '12345678901234567890'O; + if(f_connect()) + { + f_send(vl_userdata); + f_disconnect(); + } + terminate(); +} +/**************************************************** +tc_ConnOrientedLongASPSending +****************************************************/ +testcase tc_ConnOrientedLongASPSending() runs on MTC_CT +{ + var octetstring vl_userdata; + var integer vl_i; + init(); + setAddresses_gti0001(); + vl_userdata := ''O; + for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) { + vl_userdata := vl_userdata &'12345678901234567890'O; + } + if(f_connect()) + { + f_send(vl_userdata); + //f_SendAndReceive1N_UNITDATA( vl_userdata ); + f_disconnect(); + } + terminate(); +} +/**************************************************** + CONTROL +****************************************************/ +control +{ + execute( tc_ConnlessSendingShortASP() ); + execute( tc_ConnlessSendingLongASP() ); + execute( tc_ConnOrientedShortASPSending()); + execute( tc_ConnOrientedLongASPSending()); +} + +}//module -- cgit v1.2.3