<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18890">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sgsn: Add series of tests on suspend/resume and paging behavior<br><br>Let's test whether paging si triggered after T3314 expiration, as well<br>as suspend and explicit and implicit resume work as expected<br><br>Change-Id: I83b7a453958e30dfc727ba3140168217c209833f<br>Related: OS#4616<br>---<br>M sgsn/SGSN_Tests.ttcn<br>1 file changed, 162 insertions(+), 0 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/90/18890/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn</span><br><span>index c157d39..7a405ca 100644</span><br><span>--- a/sgsn/SGSN_Tests.ttcn</span><br><span>+++ b/sgsn/SGSN_Tests.ttcn</span><br><span>@@ -2901,6 +2901,163 @@</span><br><span>      f_cleanup();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private altstep as_nopaging_ps(integer ran_idx := 0) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+var PDU_BSSGP rx;</span><br><span style="color: hsl(120, 100%, 40%);">+[] BSSGP_SIG[ran_idx].receive(tr_BSSGP_PS_PAGING(?)) -> value rx {</span><br><span style="color: hsl(120, 100%, 40%);">+        setverdict(fail, "Received unexpected PS PAGING: ", rx);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* SUSPEND, then DL traffic: should not pass + no paging expected */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_suspend_nopaging(charstring id) runs on BSSGP_ConnHdlr {</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 default d;</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+      /* then activate PDP context */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pdp_ctx_act(apars);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* then transceive a downlink PDU */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* now suspend GPRS */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_bssgp_suspend();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  d := activate(as_nopaging_ps());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* at this point we don't expect any downlink traffic at all, neither actual LLC/SNDCP data,</span><br><span style="color: hsl(120, 100%, 40%);">+       * nor any related paging requests */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_gtpu_xceive_mt(apars, f_rnd_octstring(100), expect_fwd := false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_suspend_nopaging() 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%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_suspend_nopaging), testcasename(), g_gb, 48);</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_cleanup();</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* SUSPEND, then RESUME: data expected to flow after explicit resume */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_suspend_resume(charstring id) runs on BSSGP_ConnHdlr {</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 OCT1 susp_ref;</span><br><span style="color: hsl(120, 100%, 40%);">+    var default d;</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+      /* then activate PDP context */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pdp_ctx_act(apars);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* then transceive a downlink PDU */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* now suspend GPRS */</span><br><span style="color: hsl(120, 100%, 40%);">+        susp_ref := f_bssgp_suspend();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      d := activate(as_nopaging_ps());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* at this point we don't expect any downlink traffic at all, neither actual LLC/SNDCP data,</span><br><span style="color: hsl(120, 100%, 40%);">+       * nor any related paging requests */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_gtpu_xceive_mt(apars, f_rnd_octstring(100), expect_fwd := false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* resume GPRS */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_bssgp_resume(susp_ref);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* now data should be flowing again */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_suspend_resume() 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%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_suspend_resume), testcasename(), g_gb, 49);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_cleanup();</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%);">+/* SUSPEND, then RAU: data expected to flow after implicit resume */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_suspend_rau(charstring id) runs on BSSGP_ConnHdlr {</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 default d;</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+      /* then activate PDP context */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pdp_ctx_act(apars);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* then transceive a downlink PDU */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* now suspend GPRS */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_bssgp_suspend();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  d := activate(as_nopaging_ps());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* at this point we don't expect any downlink traffic at all, neither actual LLC/SNDCP data,</span><br><span style="color: hsl(120, 100%, 40%);">+       * nor any related paging requests */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_gtpu_xceive_mt(apars, f_rnd_octstring(100), expect_fwd := false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* perform RAU (implicit RESUME) */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_routing_area_update(g_pars.ra);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* now data should be flowing again */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</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%);">+testcase TC_suspend_rau() 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%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_suspend_rau), testcasename(), g_gb, 50);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_cleanup();</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* wait for T3314 expiration and check that PS PAGING is created on DL PDU */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_paging_ps(charstring id) runs on BSSGP_ConnHdlr {</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 default d;</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+      /* then activate PDP context */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pdp_ctx_act(apars);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* then transceive a downlink PDU */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* now wait for T3314 expiration (test_CT below has reduced it to 3s) */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(5.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* now data should be flowing again, but with PS PAGING */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_gtpu_xceive_mt(apars, f_rnd_octstring(100));</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSGP_SIG[0].receive(tr_BSSGP_PS_PAGING(?));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* FIXME: simulate paging response */</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: verify PDU actually arrives only after paging response was successful */</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%);">+testcase TC_paging_ps() 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%);">+     f_vty_config(SGSNVTY, "sgsn", "timer 3314 3");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_paging_ps), testcasename(), g_gb, 51);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(SGSNVTY, "sgsn", "timer 3314 default");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_cleanup();</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%);">+</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%);">+</span><br><span> control {</span><br><span>       execute( TC_attach() );</span><br><span>      execute( TC_attach_mnc3() );</span><br><span>@@ -2958,6 +3115,11 @@</span><br><span>        execute( TC_llc_sabm_dm_llgmm() );</span><br><span>   execute( TC_llc_sabm_dm_ll5() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_suspend_nopaging() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_suspend_resume() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_suspend_rau() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_paging_ps() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* At the end, may crash osmo-sgsn, see OS#3957, OS#4245 */</span><br><span>  execute( TC_attach_req_id_req_ra_update() );</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18890">change 18890</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/c/osmo-ttcn3-hacks/+/18890"/><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-Change-Id: I83b7a453958e30dfc727ba3140168217c209833f </div>
<div style="display:none"> Gerrit-Change-Number: 18890 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>