Compare commits

...

1 Commits

Author SHA1 Message Date
Vadim Yanitskiy c62dd058d7 gprs-modem: initial testsuite skeleton for GPRS modem
Change-Id: I6dddcfe836555b8d205780efd8371c569531c7a2
Related: OS#5500
2023-10-04 01:04:40 +07:00
5 changed files with 206 additions and 0 deletions

View File

@ -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

View File

@ -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]

View File

@ -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);
}
}

37
gprs-modem/gen_links.sh Executable file
View File

@ -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

17
gprs-modem/regen_makefile.sh Executable file
View File

@ -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