diff options
Diffstat (limited to 'SCCP_Test/SCCP_Testcases.ttcn')
-rw-r--r-- | SCCP_Test/SCCP_Testcases.ttcn | 505 |
1 files changed, 505 insertions, 0 deletions
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: <RnXnn> +// 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 |