msc: detect RTP to CN failure in call tests

When CN RTP is missing, the X2 timer will fire after all other call
signalling looks successful. So far we establish an MT call, wait three
seconds and directly disconnect, long before X2 or X2427 can fire.

Make X2 shorter. (By means of f_vty_config() from ttcn, so that we don't
need to edit various osmo-msc.cfg in various repositories. The short
timer is always critical for the test to be accurate.)

Add proper function to detect premature disconnect. Otherwise we just
get a cryptic message like "Couldn't find MnccExpect for incoming call"
because of MNCC messaging after the unexpected release event.

Change-Id: I3ccf541360cc8440e664f0e29494b9ce7b6f8943
This commit is contained in:
Neels Hofmeyr 2023-03-06 17:16:50 +01:00 committed by neels
parent 0560615125
commit c47ce855c1
2 changed files with 33 additions and 4 deletions

View File

@ -1349,6 +1349,33 @@ runs on BSC_ConnHdlr {
setverdict(pass);
}
function f_call_keep_open(inout CallParameters cpars, float open_time := 5.0)
runs on BSC_ConnHdlr {
log("Hold the call for some time");
timer T := open_time;
T.start;
alt {
[] MNCC.receive(tr_MNCC_DISC_ind(cpars.mncc_callref));
[] MNCC.receive(tr_MNCC_REL_ind(cpars.mncc_callref));
[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_DISC(cpars.transaction_id)));
[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_RELEASE(cpars.transaction_id)));
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
[] BSSAP.receive(tr_BSSMAP_ClearCommand);
[] BSSAP.receive(tr_BSSMAP_ClearCommandCSFB);
[] BSSAP.receive(tr_RANAP_IuReleaseCommand(?));
[] T.timeout {
log("Call stayed open for ", open_time, " seconds, all is well.")
setverdict(pass);
return;
}
}
setverdict(fail, "An unexpected release event disconnected the active call prematurely");
mtc.stop;
}
/* Reply to a received CRCX with an OK (or the reply configured in cpars), using the given parameters.
* Return true when an OK reply was sent, false otherwise.
* Count occurence of Osmux, include Osmux parameters in the reply if necessary. */
@ -1797,8 +1824,7 @@ runs on BSC_ConnHdlr {
f_mt_call_establish(cpars);
log("Hold the call for some time");
f_sleep(3.0);
f_call_keep_open(cpars);
log("Hangup");
f_call_hangup(cpars, true);
@ -1811,8 +1837,7 @@ runs on BSC_ConnHdlr {
f_mo_call_establish(cpars);
log("Hold the call for some time");
f_sleep(3.0);
f_call_keep_open(cpars);
log("Hangup");
f_call_hangup(cpars, false);

View File

@ -324,6 +324,10 @@ function f_init(integer num_bsc := 1, boolean sgsap := false, boolean gsup := tr
f_vty_config(MSCVTY, "msc", "osmux off");
}
/* Configure the MGCP timeout so that a failure to set up all RTP streams triggers within the time that we keep
* an otherwise established call open. */
f_vty_config(MSCVTY, "msc", "timer mgw X2 3");
for (var integer i := 0; i < num_bsc; i := i + 1) {
if (isbound(mp_bssap_cfg[i])) {
var RanOps ranops := BSC_RanOps;