<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14424">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hlr: add create-subscriber-on-demand tests<br><br>Test all possible code paths where a subscriber on demand can be<br>created:<br>* Check IMEI early<br>* Location Update<br>* Send Auth Info<br><br>I have noticed that the HLR does not yet abort a location update if a<br>subscriber was created without a MSISDN. This patch assumes, that the<br>HLR returns a "GPRS services and non GRPS services not allowed" error in<br>that case, and a suitable patch for osmo-hlr.git is in [1].<br><br>[1] Change-Id: If1b2f3c9ddfba55bd02510f2dfd481bca2602e3a<br><br>Related: OS#2542<br>Change-Id: Id544fa906ad442c2bbbccff437c18d04ddccde2e<br>---<br>M hlr/HLR_Tests.ttcn<br>M hlr/osmo-hlr.cfg<br>2 files changed, 133 insertions(+), 1 deletion(-)<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/24/14424/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn</span><br><span>index 4c158fd..d4f861c 100644</span><br><span>--- a/hlr/HLR_Tests.ttcn</span><br><span>+++ b/hlr/HLR_Tests.ttcn</span><br><span>@@ -407,7 +407,8 @@</span><br><span> }</span><br><span> </span><br><span> function f_perform_UL(hexstring imsi, template hexstring msisdn,</span><br><span style="color: hsl(0, 100%, 40%);">-                    template (omit) integer exp_err_cause := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+                        template (omit) integer exp_err_cause := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                        boolean isd_match_msisdn := true)</span><br><span> runs on HLR_ConnHdlr return GSUP_PDU {</span><br><span>  var GSUP_PDU ret;</span><br><span>    timer T := 3.0;</span><br><span>@@ -440,6 +441,11 @@</span><br><span>               isd_done := true;</span><br><span>            repeat;</span><br><span>              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not exp_fail and not isd_done and not isd_match_msisdn] GSUP.receive(tr_GSUP_ISD_REQ(imsi, ?)) -> value ret {</span><br><span style="color: hsl(120, 100%, 40%);">+             GSUP.send(ts_GSUP_ISD_RES(imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+             isd_done := true;</span><br><span style="color: hsl(120, 100%, 40%);">+             repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>    [not exp_fail and isd_done] GSUP.receive(tr_GSUP_UL_RES(imsi)) -> value ret {</span><br><span>             setverdict(pass);</span><br><span>            }</span><br><span>@@ -1196,6 +1202,118 @@</span><br><span>  vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test create-subscriber-on-demand during Check IMEI (OsmoMSC would be set to "check-imei-rqd early") */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_subscr_create_on_demand_check_imei_early() runs on HLR_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  var GSUP_PDU res; /* save various return values to prevent ttcn3 compiler warnings */</span><br><span style="color: hsl(120, 100%, 40%);">+ var charstring imsi_pattern := "*IMSI: " & hex2str(g_pars.sub.imsi) & "*";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Random MSISDN and CS+PS NAM (UL must pass) */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_config(VTY, "hlr", "subscriber-create-on-demand 3 cs+ps");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_perform_CHECK_IMEI(g_pars.sub.imsi, '12345678901234'H, result := OSMO_GSUP_IMEI_RESULT_ACK);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, isd_match_msisdn := false);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_subscr_delete(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Random MSISDN and no NAM (UL must fail) */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(VTY, "hlr", "subscriber-create-on-demand 3 none");</span><br><span style="color: hsl(120, 100%, 40%);">+   f_perform_CHECK_IMEI(g_pars.sub.imsi, '12345678901234'H, result := OSMO_GSUP_IMEI_RESULT_ACK);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, 7 /* GPRS services not allowed */);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_subscr_delete(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No MSISDN and no NAM (UL must fail) */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_config(VTY, "hlr", "subscriber-create-on-demand no-msisdn none");</span><br><span style="color: hsl(120, 100%, 40%);">+   f_perform_CHECK_IMEI(g_pars.sub.imsi, '12345678901234'H, result := OSMO_GSUP_IMEI_RESULT_ACK);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, 7 /* GPRS services not allowed */);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_subscr_delete(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* No MSISDN and CS+PS NAM (UL must fail) */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_config(VTY, "hlr", "subscriber-create-on-demand no-msisdn cs+ps");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_perform_CHECK_IMEI(g_pars.sub.imsi, '12345678901234'H, result := OSMO_GSUP_IMEI_RESULT_ACK);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, 8 /* GPRS services + non GPRS services not allowed */);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_subscr_delete(VTY, g_pars.sub);</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%);">+testcase TC_subscr_create_on_demand_check_imei_early() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var hexstring imsi := f_rnd_imsi('26242'H);</span><br><span style="color: hsl(120, 100%, 40%);">+   var HLR_ConnHdlrPars pars := valueof(t_Pars(imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+   var HLR_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(false);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn := f_start_handler(refers(f_TC_gsup_check_imei_unknown_imsi), pars);</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 style="color: hsl(120, 100%, 40%);">+/* Test create-subscriber-on-demand during LU (Location Update) */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_subscr_create_on_demand_ul() runs on HLR_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+     var GSUP_PDU res;</span><br><span style="color: hsl(120, 100%, 40%);">+     var charstring imsi_pattern := "*IMSI: " & hex2str(g_pars.sub.imsi) & "*";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Create with random 3 digit MSISDN and CS+PS NAM (LU must pass) */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_config(VTY, "hlr", "subscriber-create-on-demand 3 cs+ps");</span><br><span style="color: hsl(120, 100%, 40%);">+  res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, isd_match_msisdn := false);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_subscr_delete(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Create without CS or PS NAM (LU must fail) */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_config(VTY, "hlr", "subscriber-create-on-demand 3 none");</span><br><span style="color: hsl(120, 100%, 40%);">+   res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, 7 /* GPRS services not allowed */);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_subscr_delete(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Create without CS or PS NAM and without MSISDN (LU must fail) */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_config(VTY, "hlr", "subscriber-create-on-demand no-msisdn none");</span><br><span style="color: hsl(120, 100%, 40%);">+   res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, 7 /* GPRS services not allowed */);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_subscr_delete(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Create with CS+PS NAM and without MSISDN (LU must fail) */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(VTY, "hlr", "subscriber-create-on-demand no-msisdn cs+ps");</span><br><span style="color: hsl(120, 100%, 40%);">+  res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, 8 /* GPRS services + non GPRS services not allowed */);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_subscr_delete(VTY, g_pars.sub);</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%);">+testcase TC_subscr_create_on_demand_ul() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var hexstring imsi := f_rnd_imsi('26242'H);</span><br><span style="color: hsl(120, 100%, 40%);">+   var HLR_ConnHdlrPars pars := valueof(t_Pars(imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+   var HLR_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(false);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn := f_start_handler(refers(f_TC_subscr_create_on_demand_ul), pars);</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 style="color: hsl(120, 100%, 40%);">+/* Test create-subscriber-on-demand during SAI (SendAuthInfo) */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_subscr_create_on_demand_sai() runs on HLR_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      var GSUP_PDU res;</span><br><span style="color: hsl(120, 100%, 40%);">+     var charstring imsi_pattern := "*IMSI: " & hex2str(g_pars.sub.imsi) & "*";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_config(VTY, "hlr", "subscriber-create-on-demand 3 cs+ps");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* HLR creates the subscriber on demand. Then the IMSI is known, but there is no auth data, so the HLR returns</span><br><span style="color: hsl(120, 100%, 40%);">+         * the "slightly inaccurate cause 'IMSI Unknown' via GSUP". The MS is able to do a LU afterwards. */</span><br><span style="color: hsl(120, 100%, 40%);">+        res := f_perform_SAI(g_pars.sub.imsi, 2 /* IMSI Unknown */ );</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_subscr_show(VTY, g_pars.sub, pattern imsi_pattern); /* verify that it was created before the LU */</span><br><span style="color: hsl(120, 100%, 40%);">+      res := f_perform_UL(g_pars.sub.imsi, g_pars.sub.msisdn, isd_match_msisdn := false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_subscr_delete(VTY, g_pars.sub);</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%);">+testcase TC_subscr_create_on_demand_sai() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var hexstring imsi := f_rnd_imsi('26242'H);</span><br><span style="color: hsl(120, 100%, 40%);">+   var HLR_ConnHdlrPars pars := valueof(t_Pars(imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+   var HLR_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(false);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn := f_start_handler(refers(f_TC_subscr_create_on_demand_sai), pars);</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> /* TODO:</span><br><span>   * UL with ISD error</span><br><span>   * UL with ISD timeout</span><br><span>@@ -1236,6 +1354,9 @@</span><br><span>   execute( TC_gsup_check_imei() );</span><br><span>     execute( TC_gsup_check_imei_invalid_len() );</span><br><span>         execute( TC_gsup_check_imei_unknown_imsi() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_subscr_create_on_demand_check_imei_early() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_subscr_create_on_demand_ul() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_subscr_create_on_demand_sai() );</span><br><span> };</span><br><span> </span><br><span> };</span><br><span>diff --git a/hlr/osmo-hlr.cfg b/hlr/osmo-hlr.cfg</span><br><span>index a17881e..71859c9 100644</span><br><span>--- a/hlr/osmo-hlr.cfg</span><br><span>+++ b/hlr/osmo-hlr.cfg</span><br><span>@@ -21,3 +21,14 @@</span><br><span>  ussd route prefix *#100 internal own-msisdn</span><br><span>  ussd route prefix *#101 internal own-imsi</span><br><span>  ussd route prefix *100 external foobar</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+log gsmtap 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging filter all 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging color 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print level 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print category 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print category-hex 0</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print file basename last</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print extended-timestamp 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging level set-all debug</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14424">change 14424</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/+/14424"/><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: Id544fa906ad442c2bbbccff437c18d04ddccde2e </div>
<div style="display:none"> Gerrit-Change-Number: 14424 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>