<p>Pau Espin Pedrol has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10023">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sgsn: Add Test to verify Recovery procedure during CreatePdpResp<br><br>Change-Id: Ic81b854967492194367b7ce8a667c29c777791bf<br>---<br>M library/GTP_Templates.ttcn<br>M sgsn/SGSN_Tests.ttcn<br>M sgsn/expected-results.xml<br>3 files changed, 60 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/23/10023/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn</span><br><span>index a222b2e..a9d2394 100644</span><br><span>--- a/library/GTP_Templates.ttcn</span><br><span>+++ b/library/GTP_Templates.ttcn</span><br><span>@@ -308,11 +308,12 @@</span><br><span>     template GTPC_PDUs ts_CreatePdpRespPDU(OCT1 cause, OCT4 teid_data, OCT4 teid_ctrl, BIT4 nsapi,</span><br><span>                                               octetstring ggsn_ip_sign, octetstring ggsn_ip_data,</span><br><span>                                          OCT4 chg_id, template EndUserAddress eua := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             template Recovery_gtpc recovery := omit,</span><br><span>                                             template ProtConfigOptions pco := omit) := {</span><br><span>                 createPDPContextResponse := {</span><br><span>                        cause := { '00'O, cause },</span><br><span>                   reorderingRequired := ts_ReorderReq(false),</span><br><span style="color: hsl(0, 100%, 40%);">-                     recovery := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     recovery := recovery,</span><br><span>                        teidDataI := {</span><br><span>                               type_gtpc := '00'O,</span><br><span>                          teidDataI := teid_data</span><br><span>@@ -352,12 +353,13 @@</span><br><span>                                                BIT4 nsapi, octetstring ggsn_ip_sign,</span><br><span>                                                octetstring ggsn_ip_data, OCT4 chg_id,</span><br><span>                                               template EndUserAddress eua := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          template Recovery_gtpc recovery := omit,</span><br><span>                                             template ProtConfigOptions pco := omit) := {</span><br><span>                peer := peer,</span><br><span>                gtpc := ts_GTP1C_PDU(createPDPContextResponse, teid,</span><br><span>                                         valueof(ts_CreatePdpRespPDU(cause, teid_data, teid_ctrl, nsapi,</span><br><span>                                                              ggsn_ip_sign, ggsn_ip_data, chg_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                             eua, pco)), seq)</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              eua, recovery, pco)), seq)</span><br><span>   }</span><br><span> </span><br><span>        /* PCO send base template */</span><br><span>diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn</span><br><span>index 782d89c..d7e956f 100644</span><br><span>--- a/sgsn/SGSN_Tests.ttcn</span><br><span>+++ b/sgsn/SGSN_Tests.ttcn</span><br><span>@@ -903,9 +903,14 @@</span><br><span>     f_gtp_register_teid(apars.ggsn_tei_u);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_pdp_ctx_act(inout PdpActPars apars) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_pdp_ctx_act(inout PdpActPars apars, boolean send_recovery := false) runs on BSSGP_ConnHdlr {</span><br><span>      var boolean exp_rej := ispresent(apars.exp_rej_cause);</span><br><span>       var Gtp1cUnitdata g_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+       var template Recovery_gtpc recovery := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (send_recovery) {</span><br><span style="color: hsl(120, 100%, 40%);">+          recovery := ts_Recovery(apars.ggsn_restart_ctr);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> </span><br><span>        BSSGP.send(ts_SM_ACT_PDP_REQ(apars.tid, apars.nsapi, apars.sapi, apars.qos, apars.addr,</span><br><span>                                   apars.apn, apars.pco));</span><br><span>@@ -916,7 +921,8 @@</span><br><span>                                           apars.sgsn_tei_c, apars.gtp_resp_cause,</span><br><span>                                              apars.ggsn_tei_c, apars.ggsn_tei_u,</span><br><span>                                          apars.nsapi,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            apars.ggsn_ip_c, apars.ggsn_ip_u, apars.chg_id));</span><br><span style="color: hsl(120, 100%, 40%);">+                                             apars.ggsn_ip_c, apars.ggsn_ip_u, apars.chg_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               omit, recovery));</span><br><span>    }</span><br><span>    alt {</span><br><span>        [exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, apars.exp_rej_cause))) {</span><br><span>@@ -1263,7 +1269,7 @@</span><br><span>    vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_TC_attach_restart_ctr_dettach(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_attach_restart_ctr_echo(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>        var Gtp1cUnitdata g_ud;</span><br><span>      var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));</span><br><span> </span><br><span>@@ -1294,15 +1300,55 @@</span><br><span>     }</span><br><span>    setverdict(pass);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_attach_restart_ctr_dettach() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+/* ATTACH + trigger Recovery procedure through EchoResp */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_attach_restart_ctr_echo() runs on test_CT {</span><br><span>        var BSSGP_ConnHdlr vc_conn;</span><br><span>  g_use_echo := true</span><br><span>   f_init();</span><br><span style="color: hsl(0, 100%, 40%);">-       vc_conn := f_start_handler(refers(f_TC_attach_restart_ctr_dettach), testcasename(), g_gb[0], 23, 30.0);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_TC_attach_restart_ctr_echo), testcasename(), g_gb[0], 23, 30.0);</span><br><span>         vc_conn.done;</span><br><span>        g_use_echo := false</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_attach_restart_ctr_create(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ var Gtp1cUnitdata g_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+       var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer seq_nr := 23;</span><br><span style="color: hsl(120, 100%, 40%);">+     var GtpPeer peer;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* first perform regular attach */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_attach(id);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Use this CTX ACT to send initial Restart counter to SGSN. */</span><br><span style="color: hsl(120, 100%, 40%);">+       apars.gtp_resp_cause := int2oct(199, 1);        /* no resources available */</span><br><span style="color: hsl(120, 100%, 40%);">+  apars.exp_rej_cause := '1a'O;                   /* insufficient resources */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_pdp_ctx_act(apars, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Increment restart_ctr. This will fake a restarted GGSN when CreatePdpResp is</span><br><span style="color: hsl(120, 100%, 40%);">+/* received. */</span><br><span style="color: hsl(120, 100%, 40%);">+      apars.ggsn_restart_ctr := int2oct(oct2int(apars.ggsn_restart_ctr) + 1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* FIXME: Once we can easily handle different pdp ctx simultaneously, it</span><br><span style="color: hsl(120, 100%, 40%);">+         would be great to have an active pdp context here before triggering</span><br><span style="color: hsl(120, 100%, 40%);">+           Recovery, and making sure the the DEACT request is sent by the SGSN.</span><br><span style="color: hsl(120, 100%, 40%);">+       */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Activate a pdp context against the GGSN, send incremented Recovery</span><br><span style="color: hsl(120, 100%, 40%);">+    IE. This should trigger the recovery path, but still this specific</span><br><span style="color: hsl(120, 100%, 40%);">+    CTX activation should work. */</span><br><span style="color: hsl(120, 100%, 40%);">+     apars.exp_rej_cause := omit; /* default value for tests */</span><br><span style="color: hsl(120, 100%, 40%);">+    apars.gtp_resp_cause := int2oct(128, 1);  /* default value for tests */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pdp_ctx_act(apars, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+/* ATTACH + trigger Recovery procedure through CreatePdpResp */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_attach_restart_ctr_create() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSSGP_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_TC_attach_restart_ctr_create), testcasename(), g_gb[0], 24, 30.0);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* ATTACH + PDP CTX ACT + user plane traffic + PDP CTX DEACT in MT direction + trigger T3395 */</span><br><span> private function f_TC_attach_pdp_act_deact_mt_t3395_expire(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>  var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));</span><br><span>@@ -1713,7 +1759,8 @@</span><br><span>   execute( TC_attach_pdp_act_user_deact_mo() );</span><br><span>        execute( TC_attach_pdp_act_user_deact_mt() );</span><br><span>        execute( TC_attach_second_attempt() );</span><br><span style="color: hsl(0, 100%, 40%);">-  execute( TC_attach_restart_ctr_dettach() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_attach_restart_ctr_echo() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_attach_restart_ctr_create() );</span><br><span>   execute( TC_attach_pdp_act_deact_mt_t3395_expire() );</span><br><span> }</span><br><span> </span><br><span>diff --git a/sgsn/expected-results.xml b/sgsn/expected-results.xml</span><br><span>index f2bf327..5b756cd 100644</span><br><span>--- a/sgsn/expected-results.xml</span><br><span>+++ b/sgsn/expected-results.xml</span><br><span>@@ -1,5 +1,5 @@</span><br><span> <?xml version="1.0"?></span><br><span style="color: hsl(0, 100%, 40%);">-<testsuite name='Titan' tests='28' failures='4' errors='3' skipped='0' inconc='0' time='MASKED'></span><br><span style="color: hsl(120, 100%, 40%);">+<testsuite name='Titan' tests='29' failures='4' errors='3' skipped='0' inconc='0' time='MASKED'></span><br><span>   <testcase classname='SGSN_Tests' name='TC_attach' time='MASKED'/></span><br><span>   <testcase classname='SGSN_Tests' name='TC_attach_mnc3' time='MASKED'/></span><br><span>   <testcase classname='SGSN_Tests' name='TC_attach_umts_aka_umts_res' time='MASKED'/></span><br><span>@@ -60,6 +60,7 @@</span><br><span>   <testcase classname='SGSN_Tests' name='TC_attach_second_attempt' time='MASKED'></span><br><span>     <error type='DTE'></error></span><br><span>   </testcase></span><br><span style="color: hsl(0, 100%, 40%);">-  <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_dettach' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_echo' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_create' time='MASKED'/></span><br><span>   <testcase classname='SGSN_Tests' name='TC_attach_pdp_act_deact_mt_t3395_expire' time='MASKED'/></span><br><span> </testsuite></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10023">change 10023</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10023"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ic81b854967492194367b7ce8a667c29c777791bf </div>
<div style="display:none"> Gerrit-Change-Number: 10023 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>