pespin has uploaded this change for review.

View Change

hnbgw: Handle PFCP Assoc Setup procedure in test_CT

Handle PFCP Assoc Setup Req during PFCP initialization in main test_CT.
This simplifies test logic.

Depends: osmo-hnbgw.git Change-Id Ic71df8df83e97f4015077677e426c803f84d31ea
Change-Id: Ic5edecea86b9465c60f008e245a44cfce64c8ddb
---
M hnbgw/ConnHdlr.ttcn
M hnbgw/HNBGW_Tests.ttcn
2 files changed, 60 insertions(+), 26 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/19/38619/1
diff --git a/hnbgw/ConnHdlr.ttcn b/hnbgw/ConnHdlr.ttcn
index 44dfbc3..f6bde48 100644
--- a/hnbgw/ConnHdlr.ttcn
+++ b/hnbgw/ConnHdlr.ttcn
@@ -769,19 +769,6 @@
f_rab_ass_resp_cs();
}

-function f_pfcp_wait_assoc_setup_req() runs on ConnHdlr {
- /* ask PFCPEM to route all PDUs to us */
- f_PFCPEM_subscribe_bcast();
-
- var PDU_PFCP m;
-
- m := f_pfcp_expect(tr_PFCP_Assoc_Setup_Req(), wait_time := 15.0);
- PFCP.send(ts_PFCP_Assoc_Setup_Resp(m.sequence_number, g_pars.pfcp_pars.upf_node_id,
- ts_PFCP_Cause(REQUEST_ACCEPTED), 1234));
- /* ask PFCPEM to *not* route all PDUs to us anymore */
- f_PFCPEM_unsubscribe_bcast();
-}
-
function f_rab_ass_req_ps_with_pfcp() runs on ConnHdlr {
var RANAP_PDU tx;
var RANAP_PDU rx;
diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index 26d069f..09ddd9c 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -247,7 +247,7 @@

const integer NUM_HNB := 2;

-type component test_CT extends CTRL_Adapter_CT, StatsD_Checker_CT {
+type component test_CT extends CTRL_Adapter_CT, StatsD_ConnHdlr, PFCP_ConnHdlr {
var boolean g_initialized := false;

/********************* Iu side */
@@ -314,6 +314,46 @@
vc_MGCP.start(MGCP_Emulation.main(ops, pars, id));
}

+private function f_statsd_pfcp_associated() runs on test_CT return boolean
+{
+ var charstring key_name := mp_statsd_prefix & "upf.0.pfcp_associated";
+ var StatsDMetricKeys statsd_keys := { valueof(ts_StatsDMetricKey(key_name, "g")) };
+ var StatsDMetrics statsd_snapshot;
+ var boolean pfcp_associated;
+
+ statsd_snapshot := f_statsd_snapshot(statsd_keys, since_last_snapshot := false);
+ pfcp_associated := statsd_snapshot[0].val == 1;
+
+ return pfcp_associated;
+}
+
+private function f_pfcp_wait_assoc_setup_req() runs on test_CT {
+ var PDU_PFCP m;
+ timer T := 15.0;
+ /* ask PFCPEM to route all PDUs to us */
+ f_PFCPEM_subscribe_bcast();
+
+ T.start;
+ alt {
+ [] PFCP.receive(tr_PFCP_Assoc_Setup_Req()) -> value m {
+ setverdict(pass);
+ }
+ [] PFCP.receive(PDU_PFCP:?) {
+ setverdict(fail, "Got an unexpected PFCP message, was waiting for ", tr_PFCP_Assoc_Setup_Req());
+ mtc.stop;
+ }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for PFCP ", tr_PFCP_Assoc_Setup_Req());
+ mtc.stop;
+ }
+ }
+ T.stop;
+ PFCP.send(ts_PFCP_Assoc_Setup_Resp(m.sequence_number, ts_PFCP_Node_ID_fqdn(mp_pfcp_upf_node_id),
+ ts_PFCP_Cause(REQUEST_ACCEPTED), 1234));
+ /* ask PFCPEM to *not* route all PDUs to us anymore */
+ f_PFCPEM_unsubscribe_bcast();
+}
+
function f_init_pfcp(charstring id) runs on test_CT {
id := id & "-PFCP";

@@ -327,6 +367,19 @@

vc_PFCP := PFCP_Emulation_CT.create(id) alive;
vc_PFCP.start(PFCP_Emulation.main(pfcp_cfg));
+
+ if (mp_enable_pfcp_tests) {
+ /* Temporarily access Statsd during test startup: */
+ connect(self:STATSD_PROC, vc_STATSD:STATSD_PROC);
+ if (not f_statsd_pfcp_associated()) {
+ connect(self:PFCP, vc_PFCP:CLIENT);
+ connect(self:PFCP_PROC, vc_PFCP:CLIENT_PROC);
+ f_pfcp_wait_assoc_setup_req();
+ disconnect(self:PFCP, vc_PFCP:CLIENT);
+ disconnect(self:PFCP_PROC, vc_PFCP:CLIENT_PROC);
+ }
+ disconnect(self:STATSD_PROC, vc_STATSD:STATSD_PROC);
+ }
}

function f_init_hnodeb(charstring id, integer hnb_idx, RuaOps rua_ops) runs on test_CT {
@@ -420,6 +473,10 @@
activate(as_Tguard());

f_init_statsd("VirtHNBGW", vc_STATSD, mp_local_statsd_ip, mp_local_statsd_port);
+ f_init_vty("VirtHNBGW");
+ f_ipa_ctrl_start_client(mp_hnbgw_ip, mp_hnbgw_ctrl_port);
+
+ f_init_pfcp(id);

/* RUA/RANAP emulation on top of lower-layer Iuh */
var RuaOps rua_ops := {
@@ -437,9 +494,6 @@
f_init_hnodeb(testcasename(), i, rua_ops);
}

- f_init_vty("VirtHNBGW");
- f_ipa_ctrl_start_client(mp_hnbgw_ip, mp_hnbgw_ctrl_port);
-
/* MSC emulation */

/* Make sure each MSC's internal state is "DISCONNECTED" at first */
@@ -564,10 +618,8 @@

connect(vc_conn:STATSD_PROC, vc_STATSD:STATSD_PROC);

- if (isbound(vc_PFCP)) {
- connect(vc_conn:PFCP, vc_PFCP:CLIENT);
- connect(vc_conn:PFCP_PROC, vc_PFCP:CLIENT_PROC);
- }
+ connect(vc_conn:PFCP, vc_PFCP:CLIENT);
+ connect(vc_conn:PFCP_PROC, vc_PFCP:CLIENT_PROC);

return vc_conn;
}
@@ -1368,10 +1420,6 @@
friend function f_tc_ps_rab_assignment(charstring id) runs on ConnHdlr {
var RANAP_PDU tx;

- if (g_pars.pfcp_pars.pfcp_enabled) {
- f_pfcp_wait_assoc_setup_req();
- }
-
tx := f_build_initial_ue(g_pars);
f_iuh2iu_connect(tx);

@@ -1385,7 +1433,6 @@
var ConnHdlr vc_conn;
g_num_hnbs := 1;
f_init();
- f_init_pfcp(testcasename());
f_sleep(1.0);

vc_conn := f_start_handler_with_pars(refers(f_tc_ps_rab_assignment), f_TestHdlrParams(7, ps_domain := true));

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

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