Change in osmo-ttcn3-hacks[master]: sgsn: Add Test to verify Recovery procedure during CreatePdpResp

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Tue Jul 17 13:50:34 UTC 2018


Pau Espin Pedrol has uploaded this change for review. ( https://gerrit.osmocom.org/10023


Change subject: sgsn: Add Test to verify Recovery procedure during CreatePdpResp
......................................................................

sgsn: Add Test to verify Recovery procedure during CreatePdpResp

Change-Id: Ic81b854967492194367b7ce8a667c29c777791bf
---
M library/GTP_Templates.ttcn
M sgsn/SGSN_Tests.ttcn
M sgsn/expected-results.xml
3 files changed, 60 insertions(+), 10 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/23/10023/1

diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn
index a222b2e..a9d2394 100644
--- a/library/GTP_Templates.ttcn
+++ b/library/GTP_Templates.ttcn
@@ -308,11 +308,12 @@
 	template GTPC_PDUs ts_CreatePdpRespPDU(OCT1 cause, OCT4 teid_data, OCT4 teid_ctrl, BIT4 nsapi,
 						octetstring ggsn_ip_sign, octetstring ggsn_ip_data,
 						OCT4 chg_id, template EndUserAddress eua := omit,
+						template Recovery_gtpc recovery := omit,
 						template ProtConfigOptions pco := omit) := {
 		createPDPContextResponse := {
 			cause := { '00'O, cause },
 			reorderingRequired := ts_ReorderReq(false),
-			recovery := omit,
+			recovery := recovery,
 			teidDataI := {
 				type_gtpc := '00'O,
 				teidDataI := teid_data
@@ -352,12 +353,13 @@
 						 BIT4 nsapi, octetstring ggsn_ip_sign,
 						 octetstring ggsn_ip_data, OCT4 chg_id,
 						 template EndUserAddress eua := omit,
+						 template Recovery_gtpc recovery := omit,
 						 template ProtConfigOptions pco := omit) := {
 		peer := peer,
 		gtpc := ts_GTP1C_PDU(createPDPContextResponse, teid,
 					valueof(ts_CreatePdpRespPDU(cause, teid_data, teid_ctrl, nsapi,
 								ggsn_ip_sign, ggsn_ip_data, chg_id,
-								eua, pco)), seq)
+								eua, recovery, pco)), seq)
 	}
 
 	/* PCO send base template */
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 782d89c..d7e956f 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -903,9 +903,14 @@
 	f_gtp_register_teid(apars.ggsn_tei_u);
 }
 
-function f_pdp_ctx_act(inout PdpActPars apars) runs on BSSGP_ConnHdlr {
+function f_pdp_ctx_act(inout PdpActPars apars, boolean send_recovery := false) runs on BSSGP_ConnHdlr {
 	var boolean exp_rej := ispresent(apars.exp_rej_cause);
 	var Gtp1cUnitdata g_ud;
+	var template Recovery_gtpc recovery := omit;
+
+	if (send_recovery) {
+		recovery := ts_Recovery(apars.ggsn_restart_ctr);
+	}
 
 	BSSGP.send(ts_SM_ACT_PDP_REQ(apars.tid, apars.nsapi, apars.sapi, apars.qos, apars.addr,
 				     apars.apn, apars.pco));
@@ -916,7 +921,8 @@
 						apars.sgsn_tei_c, apars.gtp_resp_cause,
 						apars.ggsn_tei_c, apars.ggsn_tei_u,
 						apars.nsapi,
-						apars.ggsn_ip_c, apars.ggsn_ip_u, apars.chg_id));
+						apars.ggsn_ip_c, apars.ggsn_ip_u, apars.chg_id,
+						omit, recovery));
 	}
 	alt {
 	[exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, apars.exp_rej_cause))) {
@@ -1263,7 +1269,7 @@
 	vc_conn.done;
 }
 
-private function f_TC_attach_restart_ctr_dettach(charstring id) runs on BSSGP_ConnHdlr {
+private function f_TC_attach_restart_ctr_echo(charstring id) runs on BSSGP_ConnHdlr {
 	var Gtp1cUnitdata g_ud;
 	var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
 
@@ -1294,15 +1300,55 @@
 	}
 	setverdict(pass);
 }
-testcase TC_attach_restart_ctr_dettach() runs on test_CT {
+/* ATTACH + trigger Recovery procedure through EchoResp */
+testcase TC_attach_restart_ctr_echo() runs on test_CT {
 	var BSSGP_ConnHdlr vc_conn;
 	g_use_echo := true
 	f_init();
-	vc_conn := f_start_handler(refers(f_TC_attach_restart_ctr_dettach), testcasename(), g_gb[0], 23, 30.0);
+	vc_conn := f_start_handler(refers(f_TC_attach_restart_ctr_echo), testcasename(), g_gb[0], 23, 30.0);
 	vc_conn.done;
 	g_use_echo := false
 }
 
+private function f_TC_attach_restart_ctr_create(charstring id) runs on BSSGP_ConnHdlr {
+	var Gtp1cUnitdata g_ud;
+	var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
+	var integer seq_nr := 23;
+	var GtpPeer peer;
+	/* first perform regular attach */
+	f_TC_attach(id);
+
+	/* Use this CTX ACT to send initial Restart counter to SGSN. */
+	apars.gtp_resp_cause := int2oct(199, 1);	/* no resources available */
+	apars.exp_rej_cause := '1a'O;			/* insufficient resources */
+	f_pdp_ctx_act(apars, true);
+
+	/* Increment restart_ctr. This will fake a restarted GGSN when CreatePdpResp is
+/* received. */
+	apars.ggsn_restart_ctr := int2oct(oct2int(apars.ggsn_restart_ctr) + 1, 1);
+
+	/* FIXME: Once we can easily handle different pdp ctx simultaneously, it
+	   would be great to have an active pdp context here before triggering
+	   Recovery, and making sure the the DEACT request is sent by the SGSN.
+	*/
+
+	/* Activate a pdp context against the GGSN, send incremented Recovery
+	   IE. This should trigger the recovery path, but still this specific
+	   CTX activation should work. */
+	apars.exp_rej_cause := omit; /* default value for tests */
+	apars.gtp_resp_cause := int2oct(128, 1);  /* default value for tests */
+	f_pdp_ctx_act(apars, true);
+
+	setverdict(pass);
+}
+/* ATTACH + trigger Recovery procedure through CreatePdpResp */
+testcase TC_attach_restart_ctr_create() runs on test_CT {
+	var BSSGP_ConnHdlr vc_conn;
+	f_init();
+	vc_conn := f_start_handler(refers(f_TC_attach_restart_ctr_create), testcasename(), g_gb[0], 24, 30.0);
+	vc_conn.done;
+}
+
 /* ATTACH + PDP CTX ACT + user plane traffic + PDP CTX DEACT in MT direction + trigger T3395 */
 private function f_TC_attach_pdp_act_deact_mt_t3395_expire(charstring id) runs on BSSGP_ConnHdlr {
 	var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
@@ -1713,7 +1759,8 @@
 	execute( TC_attach_pdp_act_user_deact_mo() );
 	execute( TC_attach_pdp_act_user_deact_mt() );
 	execute( TC_attach_second_attempt() );
-	execute( TC_attach_restart_ctr_dettach() );
+	execute( TC_attach_restart_ctr_echo() );
+	execute( TC_attach_restart_ctr_create() );
 	execute( TC_attach_pdp_act_deact_mt_t3395_expire() );
 }
 
diff --git a/sgsn/expected-results.xml b/sgsn/expected-results.xml
index f2bf327..5b756cd 100644
--- a/sgsn/expected-results.xml
+++ b/sgsn/expected-results.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<testsuite name='Titan' tests='28' failures='4' errors='3' skipped='0' inconc='0' time='MASKED'>
+<testsuite name='Titan' tests='29' failures='4' errors='3' skipped='0' inconc='0' time='MASKED'>
   <testcase classname='SGSN_Tests' name='TC_attach' time='MASKED'/>
   <testcase classname='SGSN_Tests' name='TC_attach_mnc3' time='MASKED'/>
   <testcase classname='SGSN_Tests' name='TC_attach_umts_aka_umts_res' time='MASKED'/>
@@ -60,6 +60,7 @@
   <testcase classname='SGSN_Tests' name='TC_attach_second_attempt' time='MASKED'>
     <error type='DTE'></error>
   </testcase>
-  <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_dettach' time='MASKED'/>
+  <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_echo' time='MASKED'/>
+  <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_create' time='MASKED'/>
   <testcase classname='SGSN_Tests' name='TC_attach_pdp_act_deact_mt_t3395_expire' time='MASKED'/>
 </testsuite>

-- 
To view, visit https://gerrit.osmocom.org/10023
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic81b854967492194367b7ce8a667c29c777791bf
Gerrit-Change-Number: 10023
Gerrit-PatchSet: 1
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180717/63edac08/attachment.htm>


More information about the gerrit-log mailing list