epdg: Introduce test TC_ho_lte_to_wifi

This test emulates a UE doing handover to ePDG, when it may create extra
dedicated bearers.

Change-Id: Ibdfeda1fa5d7016b1952d64b306cd501cb33f61b
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn
index e5cdafd..14bb060 100644
--- a/epdg/EPDG_Tests.ttcn
+++ b/epdg/EPDG_Tests.ttcn
@@ -488,6 +488,47 @@
 	}
 }
 
+/* Expect CreateBearerResponse */
+private altstep as_GTP2C_CreateBearer_success() runs on EPDG_ConnHdlr {
+	var PDU_GTPCv2 rx_msg;
+
+	[] GTP2.receive(tr_GTP2C_CreateBearerResp(g_pars.teic_local)) -> value rx_msg {
+		setverdict(pass);
+	}
+	[] GTP2.receive(PDU_GTPCv2:?) -> value rx_msg {
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GTP2C msg rx: ", rx_msg));
+	}
+}
+private function f_GTP2C_CreateBearer_success(uint4_t dedicated_bearer_id := 6) runs on EPDG_ConnHdlr {
+
+	var template (value) FullyQualifiedTEID fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.bearer.teid_local, dedicated_bearer_id,
+							    f_inet_addr(mp_s2b_local_ip), omit);
+	var template (value) FullyQualifiedTEID_List teid_list := { fteid_u_ie };
+
+	var template (value) FullyQualifiedPDN_ConnectionSetID pgw_fq_csid := ts_GTP2C_FQCSID_IPv4(f_inet_addr(mp_s2b_local_ip), int2oct(dedicated_bearer_id, 2));
+	var template (value) FullyQualifiedPDN_ConnectionSetID_List csid_list := { pgw_fq_csid };
+
+	var template (value) BearerContextGrouped_List bcg_list := {
+			ts_GTP2C_BcGrouped({
+				ePS_Bearer_ID := ts_GTP2C_EpsBearerId(dedicated_bearer_id),
+				cause := omit,
+				ePS_Bearer_TFT := omit,
+				fullyQualifiedTEID := teid_list,
+				bearerLevel_QoS := ts_GTP2C_BearerQos('09'O, 0,0,0,0),
+				chargingID := ts_GTP2C_ChargingID(f_rnd_octstring(4)),
+				bearerFlags := omit,
+				transactionIdentifier := omit,
+				protocolConfigOptions := omit,
+				rAN_NASCause := omit,
+				additionalProtocolConfigOptions := omit,
+				extendedProtocolConfigOptions := omit
+				})
+	};
+	GTP2.send(ts_GTP2C_CreateBearerReq(g_pars.teic_remote, omit, g_pars.bearer.ebi,
+					   dedicated_bearer_id, bcg_list, csid_list));
+	as_GTP2C_CreateBearer_success();
+}
+
 /* Expect DeleteBearerResponse */
 private altstep as_GTP2C_DeleteBearer_success() runs on EPDG_ConnHdlr {
 	var PDU_GTPCv2 rx_msg;
@@ -618,6 +659,23 @@
 	setverdict(pass);
 }
 
+private function f_TC_ho_lte_to_wifi(charstring id) runs on EPDG_ConnHdlr {
+	f_initial_attach();
+	/* Whenever UE comes from 3GPP, PGW may activate a dedicated S2b bearer
+	 * and notify ePDG with a Create Bearer Request */
+	f_GTP2C_CreateBearer_success();
+	f_GSUP_PurgeMS_success();
+}
+
+testcase TC_ho_lte_to_wifi() runs on MTC_CT {
+	var EPDG_ConnHdlrPars pars := f_init_pars();
+	var EPDG_ConnHdlr vc_conn;
+	f_init();
+	vc_conn := f_start_handler(refers(f_TC_ho_lte_to_wifi), pars);
+	vc_conn.done;
+	setverdict(pass);
+}
+
 private function f_TC_ho_wifi_to_lte(charstring id) runs on EPDG_ConnHdlr {
 	f_initial_attach();
 	/* Whenever UE goes back to 3GPP, PGW will notify ePDG with a Delete Bearer Request
@@ -636,6 +694,7 @@
 
 control {
 	execute ( TC_authinfo_normal() );
+	execute ( TC_ho_lte_to_wifi() );
 	execute ( TC_ho_wifi_to_lte() );
 }