bsc: Add tests for assigning channels of all 5 codecs
This tests if the BSC is chosing the correct codec during the assignment procedure. Change-Id: Ia67c09fa725eff48ec56779f8674ddcaa08a8793
This commit is contained in:
parent
6fa1f73346
commit
60aa576a62
|
@ -1569,6 +1569,173 @@ testcase TC_assignment_sign() runs on test_CT {
|
|||
vc_conn.done;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* Codec (list) testing
|
||||
***********************************************************************/
|
||||
|
||||
/* check if the given rsl_mode is compatible with the a_elem */
|
||||
private function f_match_codec(BSSMAP_FIELD_CodecElement a_elem, RSL_IE_ChannelMode rsl_mode)
|
||||
return boolean {
|
||||
select (a_elem.codecType) {
|
||||
case (GSM_FR) {
|
||||
if (match(rsl_mode, tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
case (GSM_HR) {
|
||||
if (match(rsl_mode, tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
case (GSM_EFR) {
|
||||
if (match(rsl_mode, tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
case (FR_AMR) {
|
||||
if (match(rsl_mode, tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
case (HR_AMR) {
|
||||
if (match(rsl_mode, tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
case else { }
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* check if the given rsl_mode is compatible with the a_list */
|
||||
private function f_match_codecs(BSSMAP_IE_SpeechCodecList a_list, RSL_IE_ChannelMode rsl_mode)
|
||||
return boolean {
|
||||
for (var integer i := 0; i < sizeof(a_list); i := i+1) {
|
||||
if (f_match_codec(a_list.codecElements[i], rsl_mode)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* determine BSSMAP_IE_ChannelType from *first* element of BSSMAP_FIELD_CodecElement */
|
||||
private function f_BSSMAP_chtype_from_codec(BSSMAP_FIELD_CodecElement a_elem)
|
||||
return BSSMAP_IE_ChannelType {
|
||||
/* FIXME: actually look at all elements of BSSMAP_IE_SpeechCodecList */
|
||||
var BSSMAP_IE_ChannelType ret := valueof(ts_BSSMAP_IE_ChannelType);
|
||||
select (a_elem.codecType) {
|
||||
case (GSM_FR) {
|
||||
ret.channelRateAndType := ChRate_TCHF;
|
||||
ret.speechId_DataIndicator := Spdi_TCHF_FR;
|
||||
}
|
||||
case (GSM_HR) {
|
||||
ret.channelRateAndType := ChRate_TCHH;
|
||||
ret.speechId_DataIndicator := Spdi_TCHH_HR;
|
||||
}
|
||||
case (GSM_EFR) {
|
||||
ret.channelRateAndType := ChRate_TCHF;
|
||||
ret.speechId_DataIndicator := Spdi_TCHF_EFR;
|
||||
}
|
||||
case (FR_AMR) {
|
||||
ret.channelRateAndType := ChRate_TCHF;
|
||||
ret.speechId_DataIndicator := Spdi_TCHF_AMR;
|
||||
}
|
||||
case (HR_AMR) {
|
||||
ret.channelRateAndType := ChRate_TCHH;
|
||||
ret.speechId_DataIndicator := Spdi_TCHH_AMR;
|
||||
}
|
||||
case else {
|
||||
setverdict(fail, "Unsupported codec ", a_elem);
|
||||
self.stop;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
type record CodecListTest {
|
||||
BSSMAP_IE_SpeechCodecList codec_list,
|
||||
charstring id
|
||||
}
|
||||
type record of CodecListTest CodecListTests
|
||||
|
||||
private function f_TC_assignment_codec(charstring id) runs on MSC_ConnHdlr {
|
||||
var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
|
||||
var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
|
||||
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
|
||||
|
||||
/* puzzle together the ASSIGNMENT REQ for given codec[s] */
|
||||
ass_cmd.pdu.bssmap.assignmentRequest.codecList := g_pars.ass_codec_list;
|
||||
ass_cmd.pdu.bssmap.assignmentRequest.channelType :=
|
||||
f_BSSMAP_chtype_from_codec(g_pars.ass_codec_list.codecElements[0]);
|
||||
exp_compl.pdu.bssmap.assignmentComplete.speechCodec.codecElements[0] :=
|
||||
g_pars.ass_codec_list.codecElements[0];
|
||||
log("expecting ASS COMPL like this: ", exp_compl);
|
||||
|
||||
f_establish_fully(ass_cmd, exp_compl);
|
||||
}
|
||||
|
||||
testcase TC_assignment_codec_fr() runs on test_CT {
|
||||
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
|
||||
var MSC_ConnHdlr vc_conn;
|
||||
|
||||
f_init(1, true);
|
||||
f_sleep(1.0);
|
||||
|
||||
pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
|
||||
vc_conn := f_start_handler(refers(f_TC_assignment_codec), testcasename(), pars);
|
||||
vc_conn.done;
|
||||
}
|
||||
|
||||
testcase TC_assignment_codec_hr() runs on test_CT {
|
||||
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
|
||||
var MSC_ConnHdlr vc_conn;
|
||||
|
||||
f_init(1, true);
|
||||
f_sleep(1.0);
|
||||
|
||||
pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR}));
|
||||
vc_conn := f_start_handler(refers(f_TC_assignment_codec), testcasename(), pars);
|
||||
vc_conn.done;
|
||||
}
|
||||
|
||||
testcase TC_assignment_codec_efr() runs on test_CT {
|
||||
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
|
||||
var MSC_ConnHdlr vc_conn;
|
||||
|
||||
f_init(1, true);
|
||||
f_sleep(1.0);
|
||||
|
||||
pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecEFR}));
|
||||
vc_conn := f_start_handler(refers(f_TC_assignment_codec), testcasename(), pars);
|
||||
vc_conn.done;
|
||||
}
|
||||
|
||||
testcase TC_assignment_codec_amr_f() runs on test_CT {
|
||||
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
|
||||
var MSC_ConnHdlr vc_conn;
|
||||
|
||||
f_init(1, true);
|
||||
f_sleep(1.0);
|
||||
|
||||
pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecAMR_F}));
|
||||
vc_conn := f_start_handler(refers(f_TC_assignment_codec), testcasename(), pars);
|
||||
vc_conn.done;
|
||||
}
|
||||
|
||||
testcase TC_assignment_codec_amr_h() runs on test_CT {
|
||||
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
|
||||
var MSC_ConnHdlr vc_conn;
|
||||
|
||||
f_init(1, true);
|
||||
f_sleep(1.0);
|
||||
|
||||
pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecAMR_H}));
|
||||
vc_conn := f_start_handler(refers(f_TC_assignment_codec), testcasename(), pars);
|
||||
vc_conn.done;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* test if L3 RR CLASSMARK CHANGE is translated to BSSMAP CLASSMARK UPDATE */
|
||||
private function f_tc_classmark(charstring id) runs on MSC_ConnHdlr {
|
||||
g_pars := valueof(t_def_TestHdlrPars);
|
||||
|
@ -1956,6 +2123,12 @@ control {
|
|||
execute( TC_assignment_fr_a5_3() );
|
||||
execute( TC_assignment_fr_a5_4() );
|
||||
|
||||
execute( TC_assignment_codec_fr() );
|
||||
execute( TC_assignment_codec_hr() );
|
||||
execute( TC_assignment_codec_efr() );
|
||||
execute( TC_assignment_codec_amr_f() );
|
||||
execute( TC_assignment_codec_amr_h() );
|
||||
|
||||
/* RLL Establish Indication on inactive DCHAN / SAPI */
|
||||
execute( TC_rll_est_ind_inact_lchan() );
|
||||
execute( TC_rll_est_ind_inval_sapi1() );
|
||||
|
|
|
@ -348,14 +348,16 @@ type record TestHdlrParams {
|
|||
OCT1 ra,
|
||||
GsmFrameNumber fn,
|
||||
hexstring imsi,
|
||||
RslLinkId link_id
|
||||
RslLinkId link_id,
|
||||
BSSMAP_IE_SpeechCodecList ass_codec_list optional
|
||||
};
|
||||
|
||||
template (value) TestHdlrParams t_def_TestHdlrPars := {
|
||||
ra := '23'O,
|
||||
fn := 23,
|
||||
imsi := '001019876543210'H,
|
||||
link_id := valueof(ts_RslLinkID_DCCH(0))
|
||||
link_id := valueof(ts_RslLinkID_DCCH(0)),
|
||||
ass_codec_list := omit
|
||||
}
|
||||
|
||||
function f_create_chan_and_exp() runs on MSC_ConnHdlr {
|
||||
|
|
Loading…
Reference in New Issue