diff options
-rw-r--r-- | bts/BTS_Tests_LAPDm.ttcn | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/bts/BTS_Tests_LAPDm.ttcn b/bts/BTS_Tests_LAPDm.ttcn index d16aa110..7f5017d1 100644 --- a/bts/BTS_Tests_LAPDm.ttcn +++ b/bts/BTS_Tests_LAPDm.ttcn @@ -1330,6 +1330,68 @@ testcase TC_sabm_incorrect_c() runs on test_CT { f_testmatrix_each_chan(pars, refers(f_TC_sabm_incorrect_c)); } +/* Test procedure for normal reestablishment, 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(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 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); + + deactivate(d); + + var LapdmDlState dls := valueof(t_init_LapdmDlState); + f_lapdm_transceive_mo(dls, link_id, l3_mo); + + 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() 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)); +} + control { execute(TC_sabm_ua_dcch_sapi0()); execute(TC_sabm_ua_dcch_sapi0_nopayload()); @@ -1352,6 +1414,7 @@ control { execute(TC_rr_response_frame_loss()); execute(TC_incorrect_cr()); execute(TC_sabm_incorrect_c()); + execute(TC_normal_reestablishment()); } } |