pgw: Introduce test TC_s2b_createSession_v4_apco
Make sure APCO IE is properly handled and answered back.
Change-Id: Ib01fe0512866924a5afc4d6719ceacb0b4b54df2
diff --git a/pgw/PGW_Tests.ttcn b/pgw/PGW_Tests.ttcn
index e39bd62..ea9f056 100644
--- a/pgw/PGW_Tests.ttcn
+++ b/pgw/PGW_Tests.ttcn
@@ -676,7 +676,9 @@
/* create a session on the PGW */
private function f_create_session(template (value) FullyQualifiedTEID fteid_c_ie,
template (value) FullyQualifiedTEID fteid_u_ie,
- template (omit) UserLocationInfo uli_ie := omit) runs on PGW_Session_CT {
+ template (omit) UserLocationInfo uli_ie := omit,
+ template (omit) APCO apco := omit,
+ template APCO exp_apco := *) runs on PGW_Session_CT {
var PDU_GTPCv2 rx;
/* Defaults used for s5/s8: */
@@ -698,7 +700,8 @@
teid_list := { fteid_u_ie },
chg_car := '0000'O,
bearer_id := g_pars.bearer.ebi,
- uli := uli_ie);
+ uli := uli_ie,
+ apco := apco);
g2c.gtpcv2_pdu.createSessionRequest.servingNetwork := ts_GTP2C_ServingNetwork('001'H, '01F'H);
GTP2.send(g2c);
@@ -715,7 +718,8 @@
alt {
[] GTP2.receive(tr_GTP2C_CreateSessionResp(d_teid := g_pars.teic_local,
cause := Request_accepted,
- apn_restriction := apn_restriction)) -> value rx {
+ apn_restriction := apn_restriction,
+ exp_apco := exp_apco)) -> value rx {
/* extract TEIDs */
var CreateSessionResponse resp := rx.gtpcv2_pdu.createSessionResponse;
g_pars.teic_remote := resp.fullyQualifiedTEID[0].tEID_GRE_Key;
@@ -780,7 +784,8 @@
}
/* create a session on the PGW on a S2b interface (from ePDG)*/
-private function f_s2b_create_session() runs on PGW_Session_CT {
+private function f_s2b_create_session(template (omit) APCO apco := omit,
+ template APCO exp_apco := *) runs on PGW_Session_CT {
var template (value) FullyQualifiedTEID fteid_c_ie, fteid_u_ie;
var template (value) UserLocationInfo uli_ie;
@@ -788,13 +793,12 @@
f_inet_addr(mp_local_hostname_c), omit);
fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.bearer.teid_local, 5,
f_inet_addr(mp_local_hostname_u), omit);
- f_create_session(fteid_c_ie, fteid_u_ie);
- /* open5gs up to 1.2.3 won't accept it without ULI, despite not mandatory */
+
var template (value) TAI tai := { '0'H, '0'H, '1'H, 'F'H, '0'H, '1'H, '0001'O };
var template (value) ECGI ecgi := { '0'H, '0'H, '1'H, 'F'H, '0'H, '1'H, '0'H, 23 };
uli_ie := ts_GTP2C_UserLocInfo(tai := tai, ecgi := ecgi);
- f_create_session(fteid_c_ie, fteid_u_ie, uli_ie);
+ f_create_session(fteid_c_ie, fteid_u_ie, uli_ie := uli_ie, apco := apco, exp_apco := exp_apco);
}
@@ -1048,7 +1052,9 @@
/* create a session, expect it to succeed */
private function f_TC_s2b_createSession_v4_noapco() runs on PGW_Session_CT {
- f_s2b_create_session();
+ var template (omit) APCO apco := omit;
+ var template APCO exp_apco := omit;
+ f_s2b_create_session(apco, exp_apco);
setverdict(pass);
}
testcase TC_s2b_createSession_v4_noapco() runs on PGW_Test_CT {
@@ -1061,6 +1067,27 @@
vc_conn.done;
}
+private function f_TC_s2b_createSession_v4_apco() runs on PGW_Session_CT {
+ var template (omit) APCO apco := ts_GTP2C_APCO('0000'B,
+ {ts_GTP2C_PCO_P_DNS_IPv4(''O),
+ ts_GTP2C_PCO_P_PCSCF_IPv4(''O)});
+ var template APCO exp_apco := tr_GTP2C_APCO('0000'B,
+ {tr_GTP2C_PCO_P_DNS_IPv4(?),
+ *, /* open5gs-smfd can contain several DNS servers */
+ tr_GTP2C_PCO_P_PCSCF_IPv4(?)});
+ f_s2b_create_session(apco, exp_apco);
+ setverdict(pass);
+}
+testcase TC_s2b_createSession_v4_apco() runs on PGW_Test_CT {
+ var PGW_Session_CT vc_conn;
+ var SessionPars pars := valueof(t_SessionPars('001010123456789'H,
+ "tun22",
+ rat_type := GTP2C_RAT_WLAN));
+ f_init();
+ vc_conn := f_start_handler(refers(f_TC_s2b_createSession_v4_apco), pars);
+ vc_conn.done;
+}
+
control {
execute( TC_tx_echo() );
execute( TC_createSession() );
@@ -1070,6 +1097,7 @@
execute( TC_deleteSession_unknown() );
execute( TC_gy_charging_cc_time() );
execute( TC_s2b_createSession_v4_noapco() );
+ execute( TC_s2b_createSession_v4_apco() );
}