[M] Change in osmo-ttcn3-hacks[master]: smf: Introduce test TC_pfcp_heartbeat_recovery_timestamp
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43880?usp=email ) Change subject: smf: Introduce test TC_pfcp_heartbeat_recovery_timestamp ...................................................................... smf: Introduce test TC_pfcp_heartbeat_recovery_timestamp Change-Id: I15ad5c295fc47ed9f38b91b6392b674bd0b4c4d7 --- M smf/SMF_Session_CT.ttcn M smf/SMF_Tests.ttcn M smf/expected-results.xml 3 files changed, 75 insertions(+), 4 deletions(-) Approvals: Jenkins Builder: Verified osmith: Looks good to me, but someone else must approve fixeria: Looks good to me, approved diff --git a/smf/SMF_Session_CT.ttcn b/smf/SMF_Session_CT.ttcn index e89fd0c..5eab61b 100644 --- a/smf/SMF_Session_CT.ttcn +++ b/smf/SMF_Session_CT.ttcn @@ -392,11 +392,12 @@ return rx; } -function f_Session_tr_PFCP_Session_Est_Req() runs on SMF_Session_CT return template (present) PDU_PFCP +function f_Session_tr_PFCP_Session_Est_Req(boolean exp_sess_restoration := false) runs on SMF_Session_CT return template (present) PDU_PFCP { var template (present) Create_PDR_list create_pdr := ?; var template (present) Create_FAR_list create_far := ?; var template Create_URR_list create_urr := *; + var template PFCPSEReq_Flags pfcpSEReq_flags := *; if (g_pars.pfcp_pars.pdn_type == c_PFCP_PDN_Type_IPv6 or g_pars.pfcp_pars.pdn_type == c_PFCP_PDN_Type_IPv4v6) { @@ -435,17 +436,39 @@ }; } + if (exp_sess_restoration) { + pfcpSEReq_flags := tr_PFCPSEReq_Flags(resti := '1'B); + } + return tr_PFCP_Session_Est_Req(create_pdr := create_pdr, create_far := create_far, create_urr := create_urr, - pdn_type := tr_PFCP_PDN_Type(g_pars.pfcp_pars.pdn_type)); + pdn_type := tr_PFCP_PDN_Type(g_pars.pfcp_pars.pdn_type), + pfcpSEReq_flags := pfcpSEReq_flags); } -altstep as_pfcp_sess_est_req() +altstep as_pfcp_sess_est_req(boolean exp_sess_restoration := false) runs on SMF_Session_CT { - var template (present) PDU_PFCP exp_req := f_Session_tr_PFCP_Session_Est_Req(); + var template (present) PDU_PFCP exp_req := f_Session_tr_PFCP_Session_Est_Req(exp_sess_restoration := exp_sess_restoration); var PDU_PFCP req; [] PFCP.receive(exp_req) -> value req { + var PFCP_Session_Establishment_Request sreq := req.message_body.pfcp_session_establishment_request; + if (exp_sess_restoration) { + /* "NOTE 4: The UP function shall accept the CP function allocated GTP-U + * F-TEID and/or UE IP address in the PFCP Session Establishment Request + * message with the RESTI flag set to "1", if the requested GTP-U F-TEID + * and/or UE IP address are available." */ + for (var integer i := 0; i < lengthof(sreq.create_PDR_list); i := i + 1) { + var template (present) Create_PDR exp_pdr; + exp_pdr := tr_PFCP_Create_PDR(pdr_id := ?, + pdi := tr_PFCP_PDI(src_iface := ?, + local_F_TEID := ?)); + if (not match(sreq.create_PDR_list[i], exp_pdr)){ + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Got CreatePDR ", sreq.create_PDR_list[i], " vs exp ", exp_pdr)); + } + } + } f_pfcp_sess_est_resp(req); } } diff --git a/smf/SMF_Tests.ttcn b/smf/SMF_Tests.ttcn index 6d7f020..3a6b1d6 100644 --- a/smf/SMF_Tests.ttcn +++ b/smf/SMF_Tests.ttcn @@ -625,6 +625,52 @@ } +/* Validate IUT detects PFCP Heartbeat Recovery Timestamp change and recovers from it restoring + * existing subscriber connections: */ +private function f_TC_pfcp_heartbeat_recovery_timestamp() runs on SMF_Session_CT { + var PDU_PFCP m; + var integer rts := f_PFCPEM_get_recovery_timestamp(); + + f_prometheus_expect(valueof(t_Metrics_Expect(1, 0)), wait_converge := true); + + f_PFCPEM_subscribe_bcast(); + as_pfcp_handle_heartbeat_req(rts); + + f_s5s8_create_session(); + f_prometheus_expect(valueof(t_Metrics_Expect(1, 1)), wait_converge := true); + + rts := rts + 1; + as_pfcp_handle_heartbeat_req(rts); + activate(as_pfcp_handle_heartbeat_req(rts, do_repeat := true)); + + /* Wait for IUT to detect during rx of Heartbeat Response that peer restarted, ie. wait for a + * 2nd ASSOC SETUP REQ after Heartbeat timeout: */ + PFCP.receive(tr_PFCP_Assoc_Setup_Req()) -> value m; + + f_prometheus_expect(valueof(t_Metrics_Expect(0, 1)), 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), + rts, + up_function_features := ts_PFCP_UP_Function_Features(ftup := '1'B, + vtime := '1'B))); + + /* IUT restores existing subscriber connections */ + as_pfcp_sess_est_req(exp_sess_restoration := true); + + f_s5s8_delete_session(omit, Request_accepted); + setverdict(pass); +} +testcase TC_pfcp_heartbeat_recovery_timestamp() runs on SMF_Test_CT { + var SMF_Session_CT vc_conn; + var SessionPars pars := f_SessionPars(800); + g_pfcp_answer_heartbeat_req := false; + f_init(guard_timeout := 60.0); + vc_conn := f_start_handler(refers(f_TC_pfcp_heartbeat_recovery_timestamp), pars); + vc_conn.done; + f_shutdown(); +} + /* create an IPv4 session from 5G AMF, then delete it again */ private function f_TC_n11_createSession_deleteSession() runs on SMF_Session_CT { var PrometheusExpects expects0 := valueof({ @@ -727,6 +773,7 @@ execute( TC_s2b_createSession_v4_apco() ); execute( TC_pfcp_heartbeat_timeout() ); + execute( TC_pfcp_heartbeat_recovery_timestamp() ); execute( TC_n11_createSession_deleteSession() ); execute( TC_n11_createSession_deleteSession_ipv6() ); diff --git a/smf/expected-results.xml b/smf/expected-results.xml index 1deaf2c..aab8202 100644 --- a/smf/expected-results.xml +++ b/smf/expected-results.xml @@ -13,6 +13,7 @@ <testcase classname='SMF_Tests' name='TC_s2b_createSession_v4_noapco' time='MASKED'/> <testcase classname='SMF_Tests' name='TC_s2b_createSession_v4_apco' time='MASKED'/> <testcase classname='SMF_Tests' name='TC_pfcp_heartbeat_timeout' time='MASKED'/> + <testcase classname='SMF_Tests' name='TC_pfcp_heartbeat_recovery_timestamp' time='MASKED'/> <testcase classname='SMF_Tests' name='TC_n11_createSession_deleteSession' time='MASKED'/> <testcase classname='SMF_Tests' name='TC_n11_createSession_deleteSession_ipv6' time='MASKED'/> <testcase classname='SMF_Tests' name='TC_n11_createSession_deleteSession_ipv4v6' time='MASKED'/> -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43880?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I15ad5c295fc47ed9f38b91b6392b674bd0b4c4d7 Gerrit-Change-Number: 43880 Gerrit-PatchSet: 7 Gerrit-Owner: pespin <pespin@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> Gerrit-Reviewer: osmith <osmith@sysmocom.de> Gerrit-Reviewer: pespin <pespin@sysmocom.de>
participants (1)
-
pespin