Add test for RABAssingResponse with FailedList

Change-Id: I043014929de5145f06d0a650f36d59c15e0d4044
Related: OS#5152
diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index 959fe87..314b0df 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -758,11 +758,15 @@
 	return mgcp_resp;
 }
 
-friend function f_create_rab(MgcpParameters pars) runs on ConnHdlr {
+friend function f_create_rab(inout MgcpParameters pars) runs on ConnHdlr {
+	f_rab_ass_req(pars);
+	f_rab_ass_resp(pars);
+}
+
+friend function f_rab_ass_req(inout MgcpParameters pars) runs on ConnHdlr {
 	var MgcpCommand mgcp_cmd;
 	var RANAP_PDU tx;
 	var template RAB_SetupOrModifyList rab_sml;
-	var template RAB_SetupOrModifiedList rab_smdl;
 	timer T := 5.0;
 
 	/* Send RAB Assignment Request */
@@ -795,6 +799,13 @@
 		setverdict(fail, "Timeout waiting for Iuh ", tx);
 		}
 	}
+}
+
+friend function f_rab_ass_resp(inout MgcpParameters pars) runs on ConnHdlr {
+	var MgcpCommand mgcp_cmd;
+	var RANAP_PDU tx;
+	var template RAB_SetupOrModifiedList rab_smdl;
+	timer T := 5.0;
 
 	/* Send back RAB Assignment Response via Iuh */
 	rab_smdl := ts_RAB_SMdL(t_RAB_id(23), f_ts_RAB_TLA(pars.hnb_rtp_ip), t_RAB_binding_port(pars.hnb_rtp_port));
@@ -842,7 +853,7 @@
 		log("DLCX", mgcp_cmd);
 		MGCP.send(ts_DLCX_ACK2(mgcp_cmd.line.trans_id));
 		pars.mgcp_pars.got_dlcx_count := pars.mgcp_pars.got_dlcx_count + 1;
-		if (pars.mgcp_pars.got_dlcx_count == 1) {
+		if (pars.mgcp_pars.got_dlcx_count != pars.mgcp_pars.got_crcx_count) {
 			repeat;
 		}
 		setverdict(pass);
@@ -887,6 +898,41 @@
 	vc_conn.done;
 }
 
+friend function f_tc_rab_assign_fail(charstring id, TestHdlrParams pars) runs on ConnHdlr {
+	var MgcpCommand mgcp_cmd;
+	var RANAP_PDU tx;
+	timer T := 5.0;
+
+	f_init_handler(pars);
+	f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
+
+	tx := f_build_initial_ue(g_pars);
+	f_iuh2iu_connect(tx);
+
+	f_rab_ass_req(pars.mgcp_pars);
+
+	/* Send RAB failed list in response */
+	tx := valueof(ts_RANAP_RabAssResp(rab_fl := ts_RAB_FL(t_RAB_id(23), ts_RanapCause_om_intervention)));
+	f_iuh2iu(tx);
+
+	T.start;
+	alt {
+	[] as_mgcp_dlcx(pars) {}
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for DLCX");
+	}
+	}
+}
+
+testcase TC_rab_assign_fail() runs on test_CT {
+	var ConnHdlr vc_conn;
+	f_init();
+	f_start_hnbs();
+
+	vc_conn := f_start_handler_with_pars(refers(f_tc_rab_assign_fail), t_pars(4));
+	vc_conn.done;
+}
+
 friend function f_tc_rab_release(charstring id, TestHdlrParams pars) runs on ConnHdlr {
 	var MgcpCommand mgcp_cmd;
 	var RANAP_PDU tx;
@@ -1012,6 +1058,7 @@
 	execute(TC_ranap_ps_bidir());
 	execute(TC_rab_assignment());
 	execute(TC_rab_release());
+	execute(TC_rab_assign_fail());
 	execute(TC_ranap_cs_mo_disconnect());
 	execute(TC_ranap_ps_mo_disconnect());
 }