diff --git a/selftest/Selftest.cfg b/selftest/Selftest.cfg new file mode 100644 index 000000000..1eed01736 --- /dev/null +++ b/selftest/Selftest.cfg @@ -0,0 +1,19 @@ +[LOGGING] +#FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING | DEBUG_ENCDEC; +#ConsoleMask := ERROR | WARNING | TESTCASE | TTCN_MATCHING | DEBUG_ENCDEC +#FileMask := LOG_ALL | TTCN_MATCHING; +BSSAP.FileMask := LOG_NOTHING; +"VirtMSC-M3UA".FileMask := ERROR | WARNING; +"VirtMSC-SCCP".FileMask := ERROR | WARNING; +"IPA0-RSL-IPA".FileMask := ERROR | WARNING; +"IPA0-CTRL-IPA".FileMask := ERROR | WARNING; +mtc.FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING | DEBUG_ENCDEC; + +[TESTPORT_PARAMETERS] + +[MODULE_PARAMETERS] + +[MAIN_CONTROLLER] + +[EXECUTE] +Selftest.control diff --git a/selftest/Selftest.ttcn b/selftest/Selftest.ttcn new file mode 100644 index 000000000..1c340b7d2 --- /dev/null +++ b/selftest/Selftest.ttcn @@ -0,0 +1,104 @@ +module Selftest { + +import from General_Types all; +import from Osmocom_Types all; +import from GSM_Types all; +import from IPL4asp_Types all; +import from IPL4asp_PortType all; +import from MTP3asp_PortType all; + +import from BSSAP_Types all; +//import from BSSAP_Adapter all; +import from BSSAP_CodecPort all; +import from BSSMAP_Templates all; +import from IPA_Emulation all; +import from IPA_Types all; +import from RSL_Types all; + +import from Osmocom_CTRL_Functions all; +import from Osmocom_CTRL_Types all; + +import from MobileL3_CommonIE_Types all; +import from L3_Templates all; +import from GSM_RR_Types all; + + +type component IPA_selftest_CT { + /* upper end of IPA_Emulation */ + port MTP3asp_PT IPA_MTP3; + port IPA_MGCP_PT IPA_MGCP; + port IPA_RSL_PT IPA_RSL; + port IPA_CTRL_PT IPA_CTRL; + port IPA_SP_PT IPA_SP; + + var IPA_Emulation_CT vc_IPA; + + /* raw IP port */ + port IPL4asp_PT IP; + var ConnectionId g_ip_conn_id := -1; +} + + +function f_ipa_srv_init() runs on IPA_selftest_CT { + vc_IPA := IPA_Emulation_CT.create("IPA_Emulation"); + map(vc_IPA:IPA_PORT, system: IPA_CODEC_PT); + connect(vc_IPA:IPA_MGCP_PORT, self:IPA_MGCP); + connect(vc_IPA:IPA_RSL_PORT, self:IPA_RSL); + connect(vc_IPA:IPA_CTRL_PORT, self:IPA_CTRL); + connect(vc_IPA:MTP3_SP_PORT, self:IPA_MTP3); + vc_IPA.start(IPA_Emulation.main_server("127.0.0.1", 55555)); +} + +function f_ipa_wait_up() runs on IPA_selftest_CT { + interleave { + [] IPA_RSL.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP)); + [] IPA_CTRL.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP)); + } +} + +function f_tcp_client_init() runs on IPA_selftest_CT { + var Result res; + map(self:IP, system:IP); + res := IPL4asp_PortType.f_IPL4_connect(IP, "127.0.0.1", 55555, "", -1,-1, {tcp:={}}); + g_ip_conn_id := res.connId; +} + + +template ASP_Send ts_ASP_Send(ConnectionId id, template octetstring tx) := { + connId := id, + proto := omit, + msg := tx +} + +testcase TC_ipa_fragment() runs on IPA_selftest_CT { + var integer i; + var octetstring tx_buf; + var RSL_Message rsl; + + f_ipa_srv_init(); + f_tcp_client_init(); + f_ipa_wait_up(); + + rsl := valueof(ts_RSL_CHAN_RQD('23'O, 2342)); + tx_buf := enc_PDU_IPA(valueof(ts_PDU_IPA(IPAC_PROTO_RSL_TRX0, enc_RSL_Message(rsl)))); + /* send in rapid sequence to fill multiple messages in one TCP segment */ + for (i := 0; i < 10; i := i+1) { + IP.send(ts_ASP_Send(g_ip_conn_id, tx_buf)); + } + timer T:= 1.0; + T.start; + T.timeout; + + for (i := 0; i < 10; i := i+1) { + IPA_RSL.receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, rsl)); + } + setverdict(pass); +} + + +control { + execute( TC_ipa_fragment() ); +} + + +} diff --git a/selftest/gen_links.sh b/selftest/gen_links.sh new file mode 100755 index 000000000..b1e9ca12a --- /dev/null +++ b/selftest/gen_links.sh @@ -0,0 +1,56 @@ +#!/bin/sh + +BASEDIR=~/projects/git + +gen_links() { + DIR=$1 + FILES=$* + for f in $FILES; do + echo "Linking $f" + ln -sf $DIR/$f $f + done +} + +#DIR=$BASEDIR/titan.TestPorts.UNIX_DOMAIN_SOCKETasp/src +#FILES="UD_PT.cc UD_PT.hh UD_PortType.ttcn UD_Types.ttcn" +#gen_links $DIR $FILES + +DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src +FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCConversion.hh TCCInterface.cc TCCInterface_ip.h SDP_EncDec.cc" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src +FILES="Socket_API_Definitions.ttcn" +gen_links $DIR $FILES + +# Required by MGCP and IPA +DIR=$BASEDIR/titan.TestPorts.IPL4asp/src +FILES="IPL4asp_Functions.ttcn IPL4asp_PT.cc IPL4asp_PT.hh IPL4asp_PortType.ttcn IPL4asp_Types.ttcn IPL4asp_discovery.cc IPL4asp_protocol_L234.hh" +gen_links $DIR $FILES + +# required by IPA Emulation +DIR=../MTP3asp_CNL113337/src +FILES="MTP3asp_PortType.ttcn MTP3asp_Types.ttcn" +gen_links $DIR $FILES + +DIR=../SCCP_CNL113341/src +FILES="SCCP_Emulation.ttcn SCCP_Mapping.ttcnpp SCCP_Types.ttcn SCCPasp_Types.ttcn" +gen_links $DIR $FILES +ln -sf SCCP_Mapping.ttcnpp SCCP_Mapping.ttcn + +DIR=$BASEDIR/titan.ProtocolModules.BSSMAP_v11.2.0/src +FILES="BSSAP_Types.ttcn" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.ProtocolModules.MobileL3_v13.4.0/src +FILES="MobileL3_CC_Types.ttcn MobileL3_CommonIE_Types.ttcn MobileL3_GMM_SM_Types.ttcn MobileL3_MM_Types.ttcn MobileL3_RRM_Types.ttcn MobileL3_SMS_Types.ttcn MobileL3_SS_Types.ttcn MobileL3_Types.ttcn" +gen_links $DIR $ILES + +DIR=$BASEDIR/titan.ProtocolModules.SDP/src +FILES="SDP_EncDec.cc SDP_Types.ttcn SDP_parse_.tab.c SDP_parse_.tab.h SDP_parse_parser.h SDP_parser.l +SDP_parser.y lex.SDP_parse_.c" +gen_links $DIR $FILES + +DIR=../library +FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn" +gen_links $DIR $FILES diff --git a/selftest/regen_makefile.sh b/selftest/regen_makefile.sh new file mode 100755 index 000000000..b4780a021 --- /dev/null +++ b/selftest/regen_makefile.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +MAIN=Selftest.ttcn + +FILES="*.ttcn IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc SDP_EncDec.cc *.c" + +ttcn3_makefilegen -l -f $MAIN $FILES +#sed -i -e 's/# TTCN3_DIR = /TTCN3_DIR = \/usr/' Makefile +sed -i -e 's/LDFLAGS = /LDFLAGS = -L \/usr\/lib\/titan /' Makefile +#sed -i -e 's/TTCN3_LIB = ttcn3-parallel/TTCN3_LIB = ttcn3/' Makefile +sed -i -e 's/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include -I\/usr\/include\/titan/' Makefile + +# for TITAN 6.3.0 +sed -i -e 's/TTCN3_DIR = $/TTCN3_DIR = \/usr/' Makefile +sed -i -e 's/\/bin\/compiler/\/bin\/ttcn3_compiler/' Makefile