aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bts/BTS_Tests_LAPDm.ttcn63
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());
}
}