hnbgw: add f_rua_expect()

End the guessing when seeing "timeout of T_guard": set a precise failure
verdict when an expected RUA message did not arrive as expected.

Change-Id: I29e6b7659ba53efee9f676197b502f79780ead7e
diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index 5a2c72e..cf0cd07 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -501,24 +501,35 @@
 /* send RANAP on Iu and expect it to show up on Iuh */
 function f_iu2iuh(template (present) RANAP_PDU tx, template RANAP_PDU exp_rx := omit)
 runs on ConnHdlr return RANAP_PDU {
-	var RANAP_PDU rx;
-	timer T := 5.0;
-
 	if (istemplatekind(exp_rx, "omit")) {
 		exp_rx := tx;
 	}
 
 	BSSAP.send(tx);
-	T.start;
 
+	return f_rua_expect(exp_rx)
+}
+
+/* expect to receive a specific RUA message on Iuh */
+private function f_rua_expect(template (present) RANAP_PDU exp_rx) runs on ConnHdlr return RANAP_PDU
+{
+	var RANAP_PDU rx;
+	timer T := 5.0;
+	T.start;
 	alt {
 	[] RUA.receive(exp_rx) -> value rx {
 		setverdict(pass);
 		}
+	[] RUA.receive(RANAP_PDU:?) {
+		setverdict(fail, "Got an unexpected RUA message, was waiting for ", exp_rx);
+		mtc.stop;
+		}
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for Iuh ", exp_rx);
+		mtc.stop;
 		}
 	}
+	T.stop;
 	return rx;
 }
 
@@ -945,19 +956,13 @@
 		setverdict(fail, "Timeout waiting for MGCP");
 		}
 	}
+	T.stop;
 
 	/* Expect RAB Assignment Request with IP/port from CRCX ACK via Iuh */
 	rab_sml := ts_RAB_SML(t_RAB_id(23), f_ts_RAB_TLA(pars.mgw_conn_1.mgw_rtp_ip), t_RAB_binding_port(pars.mgw_conn_1.mgw_rtp_port));
 	tx := valueof(ts_RANAP_RabAssReq(rab_sml));
 
-	alt {
-	[] RUA.receive(tx) {
-		setverdict(pass);
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for Iuh ", tx);
-		}
-	}
+	f_rua_expect(tx);
 }
 
 friend function f_rab_ass_resp(inout MgcpParameters pars) runs on ConnHdlr {
@@ -1119,16 +1124,9 @@
 		setverdict(fail, "Timeout waiting for DLCX");
 	}
 	}
+	T.stop;
 
-	alt {
-	[] RUA.receive(tx) {
-		setverdict(pass);
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for Iuh ", tx);
-		}
-	}
-
+	f_rua_expect(tx);
 }
 
 testcase TC_rab_release() runs on test_CT {
@@ -1365,7 +1363,7 @@
 	rab_sml := ts_RAB_SML_ps(t_RAB_id(23), f_ts_RAB_TLA(gtp_pars.access.local.addr),
 				 gtp_pars.access.local.teid);
 	rx := valueof(ts_RANAP_RabAssReq(rab_sml));
-	RUA.receive(rx);
+	f_rua_expect(rx);
 
 	/* Send back RAB Assignment Response via Iuh */
 	var template RAB_SetupOrModifiedList rab_smdl;
@@ -1436,7 +1434,7 @@
 
 	/* Expect on Iuh: unmodified RAB Assignment Request */
 	rx := valueof(ts_RANAP_RabAssReq(rab_sml));
-	RUA.receive(rx);
+	f_rua_expect(rx);
 
 	/* Send back RAB Assignment Response via Iuh */
 	var template RAB_SetupOrModifiedList rab_smdl;