pespin has uploaded this change for review.

View Change

smf: Introduce test TC_5g_pfcp_heartbeat_recovery_timestamp

Change-Id: Ie1511ef9cfad49e089bd5f2f0638feaf24c6e4c2
---
M smf/SMF_Tests.ttcn
M smf/expected-results.xml
2 files changed, 54 insertions(+), 0 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/06/43906/1
diff --git a/smf/SMF_Tests.ttcn b/smf/SMF_Tests.ttcn
index 9a58434..17de880 100644
--- a/smf/SMF_Tests.ttcn
+++ b/smf/SMF_Tests.ttcn
@@ -869,6 +869,58 @@
f_shutdown();
}

+/* Validate IUT detects PFCP Heartbeat Recovery Timestamp change and recovers from it restoring
+ * existing subscriber connections: */
+private template (value) PrometheusExpects t_TC_5g_pfcp_heartbeat_recovery_timestamp(integer pfcp_peers_active, integer ues_active) := {
+ ts_PrometheusExpect("pfcp_peers_active", GAUGE, min := pfcp_peers_active, max := pfcp_peers_active),
+ ts_PrometheusExpect("ues_active", GAUGE, min := ues_active, max := ues_active),
+ ts_PrometheusExpect("pfcp_sessions_active", GAUGE, min := ues_active, max := ues_active)
+};
+private function f_TC_5g_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_TC_5g_pfcp_heartbeat_recovery_timestamp(1, 0)), wait_converge := true);
+
+ f_PFCPEM_subscribe_bcast();
+ as_pfcp_handle_heartbeat_req(rts);
+
+ f_n11_create_session();
+ f_prometheus_expect(valueof(t_TC_5g_pfcp_heartbeat_recovery_timestamp(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_TC_5g_pfcp_heartbeat_recovery_timestamp(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_n11_delete_session();
+ setverdict(pass);
+}
+testcase TC_5g_pfcp_heartbeat_recovery_timestamp() runs on SMF_Test_CT {
+ var SMF_Session_CT vc_conn;
+ var SessionPars pars := f_SessionPars(12,
+ rat_type := GTP2C_RAT_NR);
+ g_pfcp_answer_heartbeat_req := false;
+ f_init(guard_timeout := 60.0);
+ vc_conn := f_start_handler(refers(f_TC_5g_pfcp_heartbeat_recovery_timestamp), pars);
+ vc_conn.done;
+ f_shutdown();
+}
+
control {
execute( TC_tx_echo() );
execute( TC_createSession_deleteSession() );
@@ -894,6 +946,7 @@
execute( TC_n11_createSession_deleteSession_250_ipv6() );
execute( TC_n11_createSession_deleteSession_250_ipv4v6() );
execute( TC_5g_pfcp_heartbeat_timeout() );
+ execute( TC_5g_pfcp_heartbeat_recovery_timestamp() );
}


diff --git a/smf/expected-results.xml b/smf/expected-results.xml
index 77ba9ca..2d5c61c 100644
--- a/smf/expected-results.xml
+++ b/smf/expected-results.xml
@@ -22,4 +22,5 @@
<testcase classname='SMF_Tests' name='TC_n11_createSession_deleteSession_250_ipv6' time='MASKED'/>
<testcase classname='SMF_Tests' name='TC_n11_createSession_deleteSession_250_ipv4v6' time='MASKED'/>
<testcase classname='SMF_Tests' name='TC_5g_pfcp_heartbeat_timeout' time='MASKED'/>
+ <testcase classname='SMF_Tests' name='TC_5g_pfcp_heartbeat_recovery_timestamp' time='MASKED'/>
</testsuite>

To view, visit change 43906. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ie1511ef9cfad49e089bd5f2f0638feaf24c6e4c2
Gerrit-Change-Number: 43906
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>