From c62dd058d7d6030c789f29b0cb2897635d66f18e Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Sat, 8 Oct 2022 23:37:41 +0700 Subject: gprs-modem: initial testsuite skeleton for GPRS modem Change-Id: I6dddcfe836555b8d205780efd8371c569531c7a2 Related: OS#5500 --- gprs-modem/GprsModem_Tests.cfg | 18 ++++++ gprs-modem/GprsModem_Tests.default | 10 +++ gprs-modem/GprsModem_Tests.ttcn | 124 +++++++++++++++++++++++++++++++++++++ gprs-modem/gen_links.sh | 37 +++++++++++ gprs-modem/regen_makefile.sh | 17 +++++ 5 files changed, 206 insertions(+) create mode 100644 gprs-modem/GprsModem_Tests.cfg create mode 100644 gprs-modem/GprsModem_Tests.default create mode 100644 gprs-modem/GprsModem_Tests.ttcn create mode 100755 gprs-modem/gen_links.sh create mode 100755 gprs-modem/regen_makefile.sh diff --git a/gprs-modem/GprsModem_Tests.cfg b/gprs-modem/GprsModem_Tests.cfg new file mode 100644 index 00000000..270fd2d3 --- /dev/null +++ b/gprs-modem/GprsModem_Tests.cfg @@ -0,0 +1,18 @@ +[ORDERED_INCLUDE] +# Common configuration, shared between test suites +"../Common.cfg" +# testsuite specific configuration, not expected to change +"./GprsModem_Tests.default" + +# Local configuration below + +[LOGGING] + +[TESTPORT_PARAMETERS] + +[MODULE_PARAMETERS] + +[MAIN_CONTROLLER] + +[EXECUTE] +GprsModem_Tests.control diff --git a/gprs-modem/GprsModem_Tests.default b/gprs-modem/GprsModem_Tests.default new file mode 100644 index 00000000..02c3a6ac --- /dev/null +++ b/gprs-modem/GprsModem_Tests.default @@ -0,0 +1,10 @@ +[LOGGING] +mtc.FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING | DEBUG_ENCDEC; +mtc.ConsoleMask := ERROR | WARNING | TESTCASE | USER | VERDICTOP; + +[TESTPORT_PARAMETERS] + +[MODULE_PARAMETERS] +L1CTL_PortType.m_l1ctl_sock_path := "/tmp/osmocom_l2"; + +[EXECUTE] diff --git a/gprs-modem/GprsModem_Tests.ttcn b/gprs-modem/GprsModem_Tests.ttcn new file mode 100644 index 00000000..daa7fc83 --- /dev/null +++ b/gprs-modem/GprsModem_Tests.ttcn @@ -0,0 +1,124 @@ +module GprsModem_Tests { + +/* Integration Tests for MS side GPRS implementation. + * + * (C) 2022 by sysmocom - s.f.m.c. GmbH + * Author: Vadim Yanitskiy + * All rights reserved. + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Released under the terms of GNU General Public License, Version 2 or + * (at your option) any later version. + */ + +import from Misc_Helpers all; +import from General_Types all; +import from GSM_Types all; +import from GSM_RR_Types all; +import from Osmocom_Types all; +import from L1CTL_PortType all; +import from L1CTL_Types all; +import from Native_Functions all; + +import from RLCMAC_Types all; +import from RLCMAC_Templates all; + +type component test_CT { + port L1CTL_PT L1CTL; +}; + +private type enumerated PdchBlockType { + PDCH_BT_PDTCH, + PDCH_BT_PTCCH +}; + +private function f_init() runs on test_CT +{ + map(self:L1CTL, system:L1CTL); + f_connect_reset(L1CTL); +} + +private function f_pdch_activate(L1CTL_PT pt, uint3_t tn) +{ + /* l1gprs_test treats L1CTL_DM_EST_REQ as PDCH activation */ + pt.send(ts_L1CTL_DM_EST_REQ_H0(chan_nr := ts_RslChanNr_PDCH(tn), + tsc := 0, arfcn := 0)); +} + +private function f_pdch_deactivate(L1CTL_PT pt, uint3_t tn) +{ + /* l1gprs_test treats L1CTL_DM_REL_REQ as PDCH deactivation */ + pt.send(ts_L1CTL_DM_REL_REQ(chan_nr := ts_RslChanNr_PDCH(tn))); +} + +private function f_pdch_tx_block(L1CTL_PT pt, uint3_t tn, uint32_t fn, + octetstring block_data, + PdchBlockType bt := PDCH_BT_PDTCH) +{ + template (value) GsmBandArfcn arfcn := ts_GsmBandArfcn(0); + var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(0)); + + /* l1gprs_test uses link_id to distinguish PDTCH and PTCCH */ + select (bt) { + case (PDCH_BT_PDTCH) { link_id.c := FACCH_SDCCH }; + case (PDCH_BT_PTCCH) { link_id.c := OSMO_PTCCH }; + } + + /* l1gprs_test treats L1CTL_DATA_IND as a Downlink PDCH block */ + pt.send(ts_L1CTL_DATA_IND(chan_nr := ts_RslChanNr_PDCH(tn), + link_id := link_id, + l2_data := block_data, + arfcn := arfcn)); +} + +private function f_pdch_tx_ptcch(L1CTL_PT pt, uint3_t tn, uint32_t fn, + template (value) PTCCHDownlinkMsg msg) +{ + var octetstring block_data := enc_PTCCHDownlinkMsg(valueof(msg)); + f_pdch_tx_block(pt, tn, fn, block_data, bt := PDCH_BT_PTCCH); +} + +private function f_pdch_tx_ctrl(L1CTL_PT pt, uint3_t tn, uint32_t fn, + template (value) RlcmacDlBlock block) +{ + var octetstring block_data; + + if (not ischosen(block.ctrl)) { + setverdict(inconc, "f_pdch_tx_ctrl(): a CTRL block was expected"); + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); + } + + block_data := enc_RlcmacDlBlock(valueof(block)); + block_data := f_pad_oct(block_data, 23, '2B'O); + f_pdch_tx_block(pt, tn, fn, block_data, bt := PDCH_BT_PDTCH); +} + +private function f_pdch_tx_data(L1CTL_PT pt, uint3_t tn, uint32_t fn, + template (value) RlcmacDlBlock block) +{ + var octetstring block_data; + + if (not ischosen(block.ctrl) and not ischosen(block.data_egprs)) { + setverdict(inconc, "f_pdch_tx_ctrl(): a DATA block was expected"); + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); + } + + block_data := enc_RlcmacDlBlock(valueof(block)); + /* XXX: do we need to add padding (based on CS) here? */ + f_pdch_tx_block(pt, tn, fn, block_data, bt := PDCH_BT_PDTCH); +} + +testcase TC_tuwat() runs on test_CT +{ + f_init(); + + f_pdch_activate(L1CTL, 7); + f_pdch_tx_ctrl(L1CTL, 7, 1337, ts_RLCMAC_DL_DUMMY_CTRL); + f_pdch_tx_ctrl(L1CTL, 7, 1337, ts_RLCMAC_DL_DUMMY_CTRL); + f_pdch_tx_ctrl(L1CTL, 7, 1337, ts_RLCMAC_DL_DUMMY_CTRL); + f_pdch_tx_ptcch(L1CTL, 7, 1337, ts_PTCCHDownlinkMsg); + setverdict(pass); +} + +} diff --git a/gprs-modem/gen_links.sh b/gprs-modem/gen_links.sh new file mode 100755 index 00000000..20076c7a --- /dev/null +++ b/gprs-modem/gen_links.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +BASEDIR=../deps + +. ../gen_links.sh.inc + +DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src +FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCInterface.cc TCCInterface_ip.h" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src +FILES="Socket_API_Definitions.ttcn" +gen_links $DIR $FILES + +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 + +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.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 $FILES + +DIR=../library +FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn " +FILES+="GSM_Types.ttcn GSM_RR_Types.ttcn GSM_SystemInformation.ttcn GSM_RestOctets.ttcn " +FILES+="RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc " +FILES+="L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc " +FILES+="LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn " +FILES+="L3_Templates.ttcn L3_Common.ttcn " +FILES+="Native_Functions.ttcn Native_FunctionDefs.cc " +gen_links $DIR $FILES + +ignore_pp_results diff --git a/gprs-modem/regen_makefile.sh b/gprs-modem/regen_makefile.sh new file mode 100755 index 00000000..0b9598ed --- /dev/null +++ b/gprs-modem/regen_makefile.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +NAME=GprsModem_Tests + +FILES=" + *.ttcn + IPL4asp_PT.cc + IPL4asp_discovery.cc + L1CTL_PortType_CtrlFunctDef.cc + Native_FunctionDefs.cc + RLCMAC_EncDec.cc + TCCConversion.cc + TCCInterface.cc + UD_PT.cc +" + +../regen-makefile.sh -e $NAME $FILES -- cgit v1.2.3