bts-lapdm: Introduce test TC_normal_reestablishment_state_unacked

Related: OS#4819
Change-Id: I551beaa29b9a1d3af0b1517e06ae1badf7e1bd3f
This commit is contained in:
Pau Espin 2020-10-20 13:19:33 +02:00 committed by laforge
parent 820b4746eb
commit faf97060a5
1 changed files with 68 additions and 0 deletions

View File

@ -1392,6 +1392,73 @@ testcase TC_normal_reestablishment() runs on test_CT {
f_testmatrix_each_chan(pars, refers(f_TC_normal_reestablishment));
}
/* Test procedure for normal reestablishment in state LAPD_STATE_TIMER_RECOV (after T200, waiting for Ack), as per:
* OS#4819
* 3GPP TS 44.006 8.4.1.2 "Normal establishment procedure"
* 3GPP TS 44.006 8.4.2.1 "General requirements"
* 3GPP TS 44.006 8.6.3 "Procedures for re-establishment"
* */
private function f_TC_normal_reestablishment_state_unacked(charstring id) runs on ConnHdlr {
var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(0))
var octetstring l3_mo := f_rnd_octstring(c_TS0406_MAX_L3_OCTETS);
var octetstring l3_mt := f_rnd_octstring(20);
var LapdmDlState dls;
var default d;
timer T := 3.0;
var boolean use_sacch := false;
var boolean received_estind := false;
var boolean received_ua := false;
fp_common_init();
/* some common altstep for meas res and other background noise */
d := activate(as_ignore_background(true));
RSL.clear;
LAPDM.clear;
f_establish_mo(link_id);
RSL.send(ts_RSL_DATA_REQ(g_chan_nr, link_id, l3_mt));
/* first transmission, P = 0 */
LAPDM.receive(t_PH_DATA(0, use_sacch, tr_LAPDm_I(link_id.sapi, c_r:=cr_MT_CMD, p:=false,
nr:=0, ns:=0, l3:=l3_mt)));
/* re-transmission, P = 1 */
LAPDM.receive(t_PH_DATA(0, use_sacch, tr_LAPDm_I(link_id.sapi, c_r:=cr_MT_CMD, p:=true,
nr:=0, ns:=0, l3:=l3_mt)));
deactivate(d);
/* We received one retrans, so peer is in LAPD_STATE_TIMER_RECOV state. Now send SABM: */
LAPDM.send(t_PH_DATA(link_id.sapi, use_sacch, ts_LAPDm_SABM(link_id.sapi, c_r:=cr_MO_CMD, p:=true, l3:=''O)));
T.start
alt {
[] LAPDM.receive(t_PH_DATA(?, use_sacch, tr_LAPDm_UA(link_id.sapi, cr_MT_RSP, f:=true, l3:=''O))) {
received_ua := true;
if (not received_estind) {
repeat;
}
}
[] RSL.receive(tr_RSL_EST_IND_NOL3(g_chan_nr, link_id)) {
received_estind := true;
if (not received_ua) {
repeat;
}
}
[] RSL.receive { repeat; }
[] LAPDM.receive { repeat; }
[] T.timeout { setverdict(fail, "Timeout waiting for UA"); }
}
/* Test we can still send data afterwards */
l3_mo := f_rnd_octstring(c_TS0406_MAX_L3_OCTETS);
dls := valueof(t_init_LapdmDlState);
f_lapdm_transceive_mo(dls, link_id, l3_mo);
fp_common_fini();
}
testcase TC_normal_reestablishment_state_unacked() runs on test_CT {
var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));
f_testmatrix_each_chan(pars, refers(f_TC_normal_reestablishment_state_unacked));
}
control {
execute(TC_sabm_ua_dcch_sapi0());
execute(TC_sabm_ua_dcch_sapi0_nopayload());
@ -1415,6 +1482,7 @@ control {
execute(TC_incorrect_cr());
execute(TC_sabm_incorrect_c());
execute(TC_normal_reestablishment());
execute(TC_normal_reestablishment_state_unacked());
}
}