pespin has uploaded this change for review.
WIP: smf: TC_pfcp_heartbeat_timeout: Expect Delete Bearer Request
Change-Id: I5d55801923533b36ca2a1a573f1205281809f76d
---
M library/GTPv2_Templates.ttcn
M smf/SMF_Session_CT_4G.ttcn
M smf/SMF_Tests.ttcn
3 files changed, 79 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/86/43886/1
diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn
index 31ec999..127ef4d 100644
--- a/library/GTPv2_Templates.ttcn
+++ b/library/GTPv2_Templates.ttcn
@@ -1355,6 +1355,26 @@
privateExtension := omit
}});
+template (present) PDU_GTPCv2
+tr_GTP2C_DeleteBearerReq(template (present) OCT4 d_teid := ?,
+ template (present) OCT3 seq := ?,
+ template (present) GTP2C_Cause cause := ?) :=
+tr_PDU_GTP2C(d_teid, seq, {
+ deleteBearerRequest := {
+ epsBearerIdentity := *,
+ bearerContextGrouped := *,
+ procedureTransactionID := *,
+ protocolConfigOptions := *,
+ csid := *,
+ cause := tr_GTP2C_Cause(cause),
+ indicationFlags := *,
+ loadControlInformationGrouped := *,
+ overloadControlInformationGrouped := *,
+ nBIFOMContainer := *,
+ extendedProtocolConfigOptions := *,
+ privateExtension := *
+ }});
+
template (value) PDU_GTPCv2
ts_GTP2C_DeleteBearerReq(template (value) OCT4 d_teid,
template (value) integer proc_trans_id,
@@ -1401,6 +1421,31 @@
privateExtension := *
}});
+template (value) PDU_GTPCv2
+ts_GTP2C_DeleteBearerResp(template (value) OCT4 d_teid,
+ template (value) OCT3 seq,
+ template (value) uint4_t bearer_id,
+ template (value) GTP2C_Cause cause) :=
+ts_PDU_GTP2C(d_teid, seq, '64'O, {
+ deleteBearerResponse := {
+ cause := ts_GTP2C_Cause(cause, '0'B),
+ linkedBearerIdentity := ts_GTP2C_EpsBearerId(bearer_id),
+ bearerContextGrouped := omit,
+ recovery := omit,
+ csid := omit,
+ protocolConfigOptions := omit,
+ uE_TimeZone := omit,
+ uLI := omit,
+ uLITimestamp := omit,
+ trustedWLANAccessNetworkIdentifier := omit,
+ tWANIdentifierTimestamp := omit,
+ overloadControlInformationGrouped := omit,
+ iP_Addr := omit,
+ portNumber := omit,
+ nBIFOMContainer := omit,
+ privateExtension := omit
+ }});
+
/* 8.18 */
template (value) ServingNetwork
ts_GTP2C_ServingNetwork(template (value) hexstring mcc,
diff --git a/smf/SMF_Session_CT_4G.ttcn b/smf/SMF_Session_CT_4G.ttcn
index ba230cb..699f5eb 100644
--- a/smf/SMF_Session_CT_4G.ttcn
+++ b/smf/SMF_Session_CT_4G.ttcn
@@ -134,7 +134,7 @@
altstep as_DIA_Gy_CCR(DCC_NONE_CC_Request_Type req_type)
runs on SMF_Session_CT {
- [] DIAMETER[DIA_Gy].receive(f_tr_DIA_Gy_CCR_sess(req_type := req_type)) -> value g_rx_gy {
+ [] DIAMETER[DIA_Gy].receive(?) -> value g_rx_gy {
var template (value) PDU_DIAMETER tx_dia;
var template (omit) integer validity_time := omit;
if (g_pars.gy.validity_time > 0) {
@@ -448,4 +448,29 @@
f_delete_session(fteid_c_ie, tx_cause, exp_cause, expect_pfcp, expect_diameter);
}
+altstep as_s5s8_delete_bearer_req(boolean expect_diameter := true) runs on SMF_Session_CT {
+ var PDU_GTPCv2 rx_pdu;
+ [] GTP2.receive(tr_GTP2C_DeleteBearerReq(g_pars.teic_local, ?)) -> value rx_pdu {
+ var template (value) PDU_GTPCv2 tx_pdu;
+ tx_pdu := ts_GTP2C_DeleteBearerResp(g_pars.teic_remote, rx_pdu.sequenceNumber, 5, Request_accepted);
+ GTP2.send(tx_pdu);
+
+ if (is_s2b_iface() and DIAMETER[DIA_S6b].checkstate("Connected") and expect_diameter) {
+ as_DIA_S6b_STR();
+ }
+
+ if (DIAMETER[DIA_Gx].checkstate("Connected") and expect_diameter) {
+ as_DIA_Gx_CCR(TERMINATION_REQUEST);
+ }
+ if (DIAMETER[DIA_Gy].checkstate("Connected") and expect_diameter) {
+ as_DIA_Gy_CCR(TERMINATION_REQUEST);
+ }
+ setverdict(pass);
+ }
+ [] GTP2.receive(PDU_GTPCv2:?) -> value rx_pdu {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ log2str("Received unexpected GTPV2C ", rx_pdu));
+ }
+}
+
}
diff --git a/smf/SMF_Tests.ttcn b/smf/SMF_Tests.ttcn
index 9f874be..6c8ce5d 100644
--- a/smf/SMF_Tests.ttcn
+++ b/smf/SMF_Tests.ttcn
@@ -596,12 +596,13 @@
f_prometheus_expect(valueof(t_Metrics_Expect(1, 1)), wait_converge := true);
/* Wait for IUT to detect peer went down after Heartbeat timeout, ie. wait for a 2nd ASSOC SETUP REQ
- * after Heartbeat timeout:
- * TODO: Handle tear down indication towards SGW-C (s5/s8c), PCRF (Gx) and OCS (Gy) */
+ * after Heartbeat timeout: */
+ as_s5s8_delete_bearer_req();
+
PFCP.receive(tr_PFCP_Assoc_Setup_Req()) -> value m;
deactivate(d);
activate(as_pfcp_handle_heartbeat_req(rts, do_repeat := true));
- f_prometheus_expect(valueof(t_Metrics_Expect(0, 1)), wait_converge := true);
+ f_prometheus_expect(valueof(t_Metrics_Expect(0, 0)), wait_converge := true);
PFCP.send(ts_PFCP_Assoc_Setup_Resp(m.sequence_number,
ts_PFCP_Node_ID_ipv4(f_inet_addr(mp_pfcp_ip_local)),
ts_PFCP_Cause(PFCP_Cause_REQUEST_ACCEPTED),
@@ -615,10 +616,10 @@
* then delete the session to avoid leaving it dandling and open5gs-smfd trying to restore it (PFCP Sess Est Req)
* on other tests executed afterwards and making them fail due to unexpected msg received:
*/
- // f_prometheus_expect(valueof(t_Metrics_Expect(1, 0)), wait_converge := true);
- // setverdict(pass);
- f_s5s8_delete_session(omit, Request_accepted);
- setverdict(fail, "https://github.com/open5gs/open5gs/issues/4860");
+ f_prometheus_expect(valueof(t_Metrics_Expect(1, 0)), wait_converge := true);
+ setverdict(pass);
+ //f_s5s8_delete_session(omit, Request_accepted);
+ //setverdict(fail, "https://github.com/open5gs/open5gs/issues/4860");
}
testcase TC_pfcp_heartbeat_timeout() runs on SMF_Test_CT {
var SMF_Session_CT vc_conn;
To view, visit change 43886. To unsubscribe, or for help writing mail filters, visit settings.