aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2022-10-08 23:37:41 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-10-04 01:04:40 +0700
commitc62dd058d7d6030c789f29b0cb2897635d66f18e (patch)
tree9922f37c176c18b34fdec30ea210b3abc38fdc4e
parent45a6dd39fc894f821ac7b699a0a3fce86e2efcd9 (diff)
gprs-modem: initial testsuite skeleton for GPRS modemfixeria/modem
-rw-r--r--gprs-modem/GprsModem_Tests.cfg18
-rw-r--r--gprs-modem/GprsModem_Tests.default10
-rw-r--r--gprs-modem/GprsModem_Tests.ttcn124
-rwxr-xr-xgprs-modem/gen_links.sh37
-rwxr-xr-xgprs-modem/regen_makefile.sh17
5 files changed, 206 insertions, 0 deletions
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 <info@sysmocom.de>
+ * Author: Vadim Yanitskiy <vyanitskiy@sysmocom.de>
+ * 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