BSC_Tests: Migrate various ASSIGNMENT tests over to MSC_ConnHdlr

This way we benefit from the ability to handle the RR MODE MODIFY,
RSL MODE MODIFY, IPA CRCX and IPA MDCX capabilities of the MSC_ConnHdlr
component.  While each test case now needs a separate function in
addition to the actual testcase, this allows for more flexibility
and a more complete emulation of BTS behaviour.

Change-Id: Iba50663cb5104bf34bd6fc8aac2aa3b47155fe99
This commit is contained in:
Harald Welte 2017-12-16 23:21:36 +01:00
parent 9cf0e90e8d
commit 35988316c7
1 changed files with 108 additions and 76 deletions

View File

@ -491,79 +491,6 @@ testcase TC_assignment_sign() runs on test_CT {
f_assignment_exp(ass_cmd, exp_compl, "BSC failed SIGNALLING assignment");
}
testcase TC_assignment_fr_a5_0() runs on test_CT {
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
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));
const OCT8 kc := '0001020304050607'O;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '01'O));
f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/0 assignment");
}
testcase TC_assignment_fr_a5_1() runs on test_CT {
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
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));
const OCT8 kc := '0001020304050607'O;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/1 assignment");
}
/* Exxpet ASSIGNMENT FAIL if mandatory IE is missing */
testcase TC_assignment_fr_a5_1_codec_missing() runs on test_CT {
var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;
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));
const OCT8 kc := '0001020304050607'O;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
f_assignment_exp(ass_cmd, exp_fail, "BSC didn't reject missing mandatory speech codec IE");
}
testcase TC_assignment_fr_a5_3() runs on test_CT {
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
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));
const OCT8 kc := '0001020304050607'O;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '08'O));
f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/3 assignment");
}
testcase TC_assignment_fr_a5_4() runs on test_CT {
var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;
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));
const OCT8 kc := '0001020304050607'O;
const OCT16 kc128 := kc & kc;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '10'O));
ass_cmd.pdu.bssmap.assignmentRequest.kC128 := valueof(ts_BSSMAP_IE_Kc128(kc128));
/* TODO: expect GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED cause value */
f_assignment_exp(ass_cmd, exp_fail, "BSC accepted TCH/F FR A5/4 assignment");
}
type record DchanTuple {
integer sccp_conn_id,
RslChannelNr rsl_chan_nr
@ -1275,8 +1202,33 @@ function f_start_handler(void_fn fn, charstring id) runs on test_CT return MSC_C
return vc_conn;
}
private function f_tc_assignment_fr_a5_0(charstring id) runs on MSC_ConnHdlr {
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
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));
const OCT8 kc := '0001020304050607'O;
private function f_ass(charstring id) runs on MSC_ConnHdlr {
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '01'O));
f_establish_fully(pars, ass_cmd, exp_compl);
}
testcase TC_assignment_fr_a5_0() runs on test_CT {
var MSC_ConnHdlr vc_conn;
f_init(true);
f_sleep(1.0);
vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_0), testcasename());
vc_conn.done;
}
private function f_tc_assignment_fr_a5_1(charstring id) runs on MSC_ConnHdlr {
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
@ -1292,16 +1244,96 @@ private function f_ass(charstring id) runs on MSC_ConnHdlr {
f_establish_fully(pars, ass_cmd, exp_compl);
}
testcase TC_hdlr() runs on test_CT {
testcase TC_assignment_fr_a5_1() runs on test_CT {
var MSC_ConnHdlr vc_conn;
f_init(true);
f_sleep(1.0);
vc_conn := f_start_handler(refers(f_ass), "foo");
vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1), testcasename());
vc_conn.done;
}
/* Expect ASSIGNMENT FAIL if mandatory IE is missing */
private function f_tc_assignment_fr_a5_1_codec_missing(charstring id) runs on MSC_ConnHdlr {
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;
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));
const OCT8 kc := '0001020304050607'O;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
f_establish_fully(pars, ass_cmd, exp_fail);
}
testcase TC_assignment_fr_a5_1_codec_missing() runs on test_CT {
var MSC_ConnHdlr vc_conn;
f_init(true);
f_sleep(1.0);
vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1_codec_missing), testcasename());
vc_conn.done;
}
private function f_tc_assignment_fr_a5_3(charstring id ) runs on MSC_ConnHdlr {
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
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));
const OCT8 kc := '0001020304050607'O;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '08'O));
f_establish_fully(pars, ass_cmd, exp_compl);
}
testcase TC_assignment_fr_a5_3() runs on test_CT {
var MSC_ConnHdlr vc_conn;
f_init(true);
f_sleep(1.0);
vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_3), testcasename());
vc_conn.done;
}
private function f_tc_assignment_fr_a5_4(charstring id) runs on MSC_ConnHdlr {
var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;
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));
const OCT8 kc := '0001020304050607'O;
const OCT16 kc128 := kc & kc;
ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
valueof(ts_BSSMAP_IE_EncrInfo(kc, '10'O));
ass_cmd.pdu.bssmap.assignmentRequest.kC128 := valueof(ts_BSSMAP_IE_Kc128(kc128));
/* TODO: expect GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED cause value */
f_establish_fully(pars, ass_cmd, exp_fail);
}
testcase TC_assignment_fr_a5_4() runs on test_CT {
var MSC_ConnHdlr vc_conn;
f_init(true);
f_sleep(1.0);
vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_4), testcasename());
vc_conn.done;
}
control {
execute( TC_ctrl_msc_connection_status() );
execute( TC_ctrl() );