Change in osmo-gsm-tester[master]: sysmocom: Introduce suite to test emergency calls

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/.

pespin gerrit-no-reply at lists.osmocom.org
Thu Oct 15 15:50:48 UTC 2020


pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20668 )

Change subject: sysmocom: Introduce suite to test emergency calls
......................................................................

sysmocom: Introduce suite to test emergency calls

Change-Id: I2e851c94311ded0abd4ff072b8cc72316d972750
---
M src/osmo_gsm_tester/obj/bts.py
M src/osmo_gsm_tester/obj/ms.py
M src/osmo_gsm_tester/obj/ms_ofono.py
M src/osmo_gsm_tester/obj/msc_osmo.py
M src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
M src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl
A sysmocom/suites/emergency/emergency_mo_mt_call.py
A sysmocom/suites/emergency/suite.conf
8 files changed, 109 insertions(+), 2 deletions(-)

Approvals:
  pespin: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/osmo_gsm_tester/obj/bts.py b/src/osmo_gsm_tester/obj/bts.py
index 56e5aaa..5b43642 100644
--- a/src/osmo_gsm_tester/obj/bts.py
+++ b/src/osmo_gsm_tester/obj/bts.py
@@ -19,7 +19,10 @@
 
 import copy
 from abc import ABCMeta, abstractmethod
-from ..core import log, config, schema
+from ..core import log
+from ..core import config
+from ..core import schema
+from ..core import util
 
 def on_register_schemas():
     resource_schema = {
@@ -31,6 +34,7 @@
         'ciphers[]': schema.CIPHER,
         'channel_allocator': schema.CHAN_ALLOCATOR,
         'gprs_mode': schema.GPRS_MODE,
+        'emergency_calls_allowed': schema.BOOL_STR,
         'num_trx': schema.UINT,
         'max_trx': schema.UINT,
         'trx_list[].addr': schema.IPV4,
@@ -132,6 +136,8 @@
         if self.bvci is not None:
             config.overlay(values, { 'bvci': self.bvci })
 
+        config.overlay(values, { 'emergency_calls_allowed': util.str2bool(values.get('emergency_calls_allowed', 'false')) } )
+
         conf = copy.deepcopy(self.conf)
         trx_list = conf.get('trx_list')
         if trx_list and len(trx_list) != self.num_trx():
diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py
index 60103d7..70ce558 100644
--- a/src/osmo_gsm_tester/obj/ms.py
+++ b/src/osmo_gsm_tester/obj/ms.py
@@ -120,5 +120,8 @@
             self.set_msisdn(self.testenv.msisdn())
         return self._msisdn
 
+    def emergency_numbers(self):
+        return ['112']
+
     def get_counter(self, counter_name):
         raise log.Error('get_counter() not implemented!')
diff --git a/src/osmo_gsm_tester/obj/ms_ofono.py b/src/osmo_gsm_tester/obj/ms_ofono.py
index 38fa4d4..a5ee3ea 100644
--- a/src/osmo_gsm_tester/obj/ms_ofono.py
+++ b/src/osmo_gsm_tester/obj/ms_ofono.py
@@ -834,4 +834,10 @@
         service_type, response = ss.Initiate(command)
         return response
 
+    def emergency_numbers(self):
+        cmgr = self.dbus.interface(I_CALLMGR)
+        props = cmgr.GetProperties()
+        self.dbg('got Call properties', props)
+        return props.get('EmergencyNumbers', [])
+
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/obj/msc_osmo.py b/src/osmo_gsm_tester/obj/msc_osmo.py
index 173bc94..67e1d31 100644
--- a/src/osmo_gsm_tester/obj/msc_osmo.py
+++ b/src/osmo_gsm_tester/obj/msc_osmo.py
@@ -27,6 +27,7 @@
 def on_register_schemas():
     resource_schema = {
         'path': schema.STR,
+        'emergency_call_msisdn': schema.MSISDN,
         }
     schema.register_resource_schema('modem', resource_schema)
 
@@ -43,6 +44,7 @@
         self.use_osmux = "off"
         self.testenv = testenv
         self.ip_address = ip_address
+        self._emergency_call_msisdn = None
         self.hlr = hlr
         self.mgw = mgw
         self.stp = stp
@@ -94,7 +96,8 @@
         if self.authentication is not None:
             config.overlay(values, dict(msc=dict(net=dict(authentication=self.authentication))))
         config.overlay(values, dict(msc=dict(use_osmux=self.use_osmux)))
-
+        if self._emergency_call_msisdn is not None:
+            config.overlay(values, dict(msc=dict(emergency_call_msisdn=self._emergency_call_msisdn)))
 
         self.config = values
 
@@ -146,6 +149,10 @@
     def imsi_list_attached(self):
         return OsmoMscCtrl(self).subscriber_list_active()
 
+    def set_emergency_call_msisdn(self, msisdn):
+        self.dbg('Setting Emergency Call MSISDN', msisdn=msisdn)
+        self._emergency_call_msisdn = msisdn
+
     def running(self):
         return not self.process.terminated()
 
diff --git a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
index a03bb0b..66fa9e5 100644
--- a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
@@ -58,6 +58,11 @@
 % endif
   ip.access unit_id ${bts.ipa_unit_id} 0
   oml ip.access stream_id ${bts.stream_id} line 0
+% if bts.get('emergency_calls_allowed', False):
+  rach emergency call allowed 1
+% else:
+  rach emergency call allowed 0
+%endif
 % if bts.get('sgsn', False) and bts['gprs_mode'] != 'none':
   gprs mode ${bts.gprs_mode}
   gprs routing area ${bts.routing_area_code}
@@ -105,6 +110,7 @@
 msc
  core-mobile-country-code ${bsc.net.mcc}
  core-mobile-network-code ${bsc.net.mnc}
+ allow-emergency allow
  ip.access rtp-base 25000
  mgw remote-ip ${mgw.ip_address.addr}
  mgw remote-port 2427
diff --git a/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl
index 8d0ab23..bf7fc2b 100644
--- a/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl
@@ -31,6 +31,9 @@
  mgw bts-base 8000
  osmux ${msc.use_osmux}
  assign-tmsi
+%if msc.get('emergency_call_msisdn', None) is not None:
+ emergency-call route-to-msisdn ${msc.emergency_call_msisdn}
+%endif
  cs7-instance-iu 0
  cs7-instance-a 0
 ctrl
diff --git a/sysmocom/suites/emergency/emergency_mo_mt_call.py b/sysmocom/suites/emergency/emergency_mo_mt_call.py
new file mode 100755
index 0000000..7fa9b6f
--- /dev/null
+++ b/sysmocom/suites/emergency/emergency_mo_mt_call.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+hlr = tenv.hlr()
+bts = tenv.bts()
+mgw_msc = tenv.mgw()
+mgw_bsc = tenv.mgw()
+stp = tenv.stp()
+msc = tenv.msc(hlr, mgw_msc, stp)
+bsc = tenv.bsc(msc, mgw_bsc, stp)
+ms_mo = tenv.modem()
+ms_mt = tenv.modem()
+
+hlr.start()
+stp.start()
+
+# Set MSC to route emergency call to ms_mt:
+msc.set_emergency_call_msisdn(ms_mt.msisdn())
+msc.start()
+
+mgw_msc.start()
+mgw_bsc.start()
+
+bsc.bts_add(bts)
+bsc.start()
+
+bts.start()
+wait(bsc.bts_is_connected, bts)
+
+hlr.subscriber_add(ms_mo)
+hlr.subscriber_add(ms_mt)
+
+ms_mo.connect(msc.mcc_mnc())
+ms_mt.connect(msc.mcc_mnc())
+
+ms_mo.log_info()
+ms_mt.log_info()
+
+print('waiting for modems to attach...')
+wait(ms_mo.is_registered, msc.mcc_mnc())
+wait(ms_mt.is_registered, msc.mcc_mnc())
+wait(msc.subscriber_attached, ms_mo, ms_mt)
+
+assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0
+# Calling emergency number should be redirected to ms_mt as configured further above:
+emerg_numbers = ms_mo.emergency_numbers()
+assert len(emerg_numbers) > 0
+print('dialing Emergency Number %s' % (emerg_numbers[0]))
+mo_cid = ms_mo.call_dial(emerg_numbers[0])
+mt_cid = ms_mt.call_wait_incoming(ms_mo)
+print('dial success')
+
+assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid)
+ms_mt.call_answer(mt_cid)
+wait(ms_mo.call_is_active, mo_cid)
+wait(ms_mt.call_is_active, mt_cid)
+print('answer success, call established and ongoing')
+
+sleep(5) # maintain the call active for 5 seconds
+
+assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid)
+ms_mt.call_hangup(mt_cid)
+wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0)
+print('hangup success')
diff --git a/sysmocom/suites/emergency/suite.conf b/sysmocom/suites/emergency/suite.conf
new file mode 100644
index 0000000..eb0de71
--- /dev/null
+++ b/sysmocom/suites/emergency/suite.conf
@@ -0,0 +1,12 @@
+resources:
+  ip_address:
+  - times: 6 # msc, bsc, hlr, stp, mgw*2
+  bts:
+  - times: 1
+  modem:
+  - times: 2
+    features:
+    - voice
+modifiers:
+  bts:
+  - emergency_calls_allowed: true

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20668
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-gsm-tester
Gerrit-Branch: master
Gerrit-Change-Id: I2e851c94311ded0abd4ff072b8cc72316d972750
Gerrit-Change-Number: 20668
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201015/7df62fe1/attachment.htm>


More information about the gerrit-log mailing list