bsc: Add TC_unsol_ho_fail test case for unsolicited handover failure
Change-Id: Ic3bd71d77d03cb7eebabdf98ba0bfbafd24ec0ea
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index b9d61dd..7d4a140 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1454,6 +1454,35 @@
vc_conn.done;
}
+/* unsolicited HANDOVER FAIL (without ASSIGN) from MS shouldn't bring BSC down */
+private function f_tc_unsol_ho_fail(charstring id) runs on MSC_ConnHdlr {
+ var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+ f_create_chan_and_exp(pars);
+ /* we should now have a COMPL_L3 at the MSC */
+ BSSAP.receive(tr_BSSMAP_ComplL3);
+
+ f_rsl_send_l3(ts_RRM_HandoverFailure('00'O));
+ timer T := 5.0;
+ T.start;
+ alt {
+ [] BSSAP.receive {
+ setverdict(fail, "Unexpected BSSMAP");
+ }
+ [] T.timeout {
+ setverdict(pass);
+ }
+ }
+}
+
+testcase TC_unsol_ho_fail() runs on test_CT {
+ var MSC_ConnHdlr vc_conn;
+ f_init(1, true);
+ f_sleep(1.0);
+ vc_conn := f_start_handler(refers(f_tc_unsol_ho_fail), testcasename());
+ vc_conn.done;
+}
+
+
control {
/* CTRL interface testing */
@@ -1519,6 +1548,7 @@
execute( TC_classmark() );
execute( TC_unsol_ass_fail() );
+ execute( TC_unsol_ho_fail() );
}
}
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index ad4e575..948565d 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -302,6 +302,23 @@
}
}
+template (value) PDU_ML3_MS_NW ts_RRM_HandoverFailure(OCT1 cause) := {
+ discriminator := '0000'B, /* overwritten */
+ tiOrSkip := {
+ skipIndicator := '0000'B
+ },
+ msgs := {
+ rrm := {
+ handoverFailure := {
+ messageType := '00101000'B,
+ rRCause := {
+ valuePart := cause
+ },
+ pSCause := omit
+ }
+ }
+ }
+}
function ts_CM3_TLV(template (omit) OCTN cm3) return template MobileStationClassmark3_TLV {
if (not isvalue(cm3)) {