bsc: TC_assignment_emerg_setup_allow(_imei): Test full voice establishment

Extend tests to also test the data plane setup.

Related: OS#5849
Change-Id: I9f39f861398669a8eb1da242595de584725e5b83
This commit is contained in:
Pau Espin 2023-01-03 17:07:59 +01:00
parent 39bd33c72c
commit 14076d3b72
1 changed files with 56 additions and 42 deletions

View File

@ -9180,12 +9180,63 @@ runs on MSC_ConnHdlr {
}
}
private function f_assignment_emerg_setup_voice()
runs on MSC_ConnHdlr {
/* Go on with voice call assignment */
var template PDU_BSSAP exp_compl := f_gen_exp_compl();
var PDU_BSSAP ass_cmd := f_gen_ass_req();
/* Below speechOrDataIndicator and codecList are copied from an emergency call captured during tests.
* They seem a bit weird (AMR-WB, and the order differ between speechId_DataIndicator and the codecList), but
* seems a good idea to see how osmo-bsc reacts to this. */
ass_cmd.pdu.bssmap.assignmentRequest.channelType := {
elementIdentifier := '0B'O, /* overwritten */
lengthIndicator := 0, /* overwritten */
speechOrDataIndicator := '0001'B, /* speech */
spare1_4 := '0000'B,
channelRateAndType := ChRate_TCHForH_Fpref,
speechId_DataIndicator := 'c2918105'O
};
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({
ts_CodecHR, ts_CodecAMR_WB, ts_CodecEFR, ts_CodecFR}));
f_rslem_dchan_queue_enable();
var ExpectCriteria mgcpcrit := {
connid := omit,
endpoint := omit,
transid := omit
};
f_create_mgcp_expect(mgcpcrit);
BSSAP.send(ass_cmd);
var AssignmentState st := valueof(ts_AssignmentStateInit);
st.voice_call := true;
st.is_assignment := false;
alt {
[] as_modify(st);
[] as_Media();
[st.modify_done] BSSAP.receive(exp_compl) {
setverdict(pass);
}
}
/* Voice call carries on ... */
f_sleep(2.0);
}
/* Test if the EMERGENCY SETUP gets passed on to the MSC via A when EMERGENCY
* CALLS are permitted by the BSC config. */
private function f_TC_assignment_emerg_setup_allow(charstring id) runs on MSC_ConnHdlr {
/* Make sure the CHAN RQD indicates an emergency call (0b101xxxxx). The difference is that osmo-bsc directly
* assigns a TCH lchan and establishing voice for the emergency call will use Mode Modify, not reassignment to
* another lchan. */
g_pars.ra := f_rnd_ra_emerg();
f_assignment_emerg_setup();
f_assignment_emerg_setup_exp_bssap();
f_assignment_emerg_setup_voice();
setverdict(pass);
f_perform_clear();
@ -9197,6 +9248,10 @@ private function f_TC_assignment_emerg_setup_deny(charstring id) runs on MSC_Con
var PDU_BSSAP emerg_setup_data_ind_bssap;
timer T := 3.0;
/* Make sure the CHAN RQD indicates an emergency call (0b101xxxxx). The difference is that osmo-bsc directly
* assigns a TCH lchan and establishing voice for the emergency call will use Mode Modify, not reassignment to
* another lchan. */
g_pars.ra := f_rnd_ra_emerg();
f_assignment_emerg_setup();
T.start;
@ -10488,48 +10543,7 @@ private function f_tc_emerg_call_and_lcs_loc_req(charstring id) runs on MSC_Conn
BSSAP_LE.receive(BSSAP_LE_Conn_Prim:CONN_PRIM_DISC_IND);
BSSAP.receive(tr_BSSMAP_Perform_Location_Response(tr_BSSMAP_IE_LocationEstimate(gad_ell_point_unc_circle)));
/* Go on with voice call assignment */
var template PDU_BSSAP exp_compl := f_gen_exp_compl();
var PDU_BSSAP ass_cmd := f_gen_ass_req();
/* Below speechOrDataIndicator and codecList are copied from an emergency call captured during tests.
* They seem a bit weird (AMR-WB, and the order differ between speechId_DataIndicator and the codecList), but
* seems a good idea to see how osmo-bsc reacts to this. */
ass_cmd.pdu.bssmap.assignmentRequest.channelType := {
elementIdentifier := '0B'O, /* overwritten */
lengthIndicator := 0, /* overwritten */
speechOrDataIndicator := '0001'B, /* speech */
spare1_4 := '0000'B,
channelRateAndType := ChRate_TCHForH_Fpref,
speechId_DataIndicator := 'c2918105'O
};
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({
ts_CodecHR, ts_CodecAMR_WB, ts_CodecEFR, ts_CodecFR}));
f_rslem_dchan_queue_enable();
var ExpectCriteria mgcpcrit := {
connid := omit,
endpoint := omit,
transid := omit
};
f_create_mgcp_expect(mgcpcrit);
BSSAP.send(ass_cmd);
var AssignmentState st := valueof(ts_AssignmentStateInit);
st.voice_call := true;
st.is_assignment := false;
alt {
[] as_modify(st);
[] as_Media();
[st.modify_done] BSSAP.receive(exp_compl) {
setverdict(pass);
}
}
/* Voice call carries on ... */
f_sleep(2.0);
f_assignment_emerg_setup_voice();
setverdict(pass);
f_perform_clear();