Change in osmo-gsm-tester[master]: ms_srs: refactor UE state getter functions

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
Wed Jun 10 15:39:32 UTC 2020


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

Change subject: ms_srs: refactor UE state getter functions
......................................................................

ms_srs: refactor UE state getter functions

rename UE helper functions to query RRC connected/idle state
and adapt tests accordingly

also add helper to retrieve assinged IP address

Change-Id: I6cd057e34b4df6a1a73695355dd6406d7e039546
---
M src/osmo_gsm_tester/obj/ms.py
M src/osmo_gsm_tester/obj/ms_amarisoft.py
M src/osmo_gsm_tester/obj/ms_ofono.py
M src/osmo_gsm_tester/obj/ms_srs.py
M sysmocom/suites/4g/handover.py
M sysmocom/suites/4g/iperf3_dl.py
M sysmocom/suites/4g/iperf3_ul.py
M sysmocom/suites/4g/ping.py
8 files changed, 53 insertions(+), 10 deletions(-)

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



diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py
index e74377d..b39d3ee 100644
--- a/src/osmo_gsm_tester/obj/ms.py
+++ b/src/osmo_gsm_tester/obj/ms.py
@@ -77,6 +77,20 @@
             raise log.Error('MS type not supported:', ms_type)
         return ms_class(testenv, conf)
 
+    @abstractmethod
+    def is_registered(self, mcc_mnc=None):
+        '''Check whether MS is considered registered with the target network. In
+        2G networks, and MS is registered if it had a successful Location Update
+        in CS. In 4G networks, an UE is considered registered with the core
+        network if it has obtained and IP address. If MCC/MNC are given it tries
+        to manually register against that specific network.'''
+        pass
+
+    @abstractmethod
+    def get_assigned_addr(self, ipv6=False):
+        ''' Returns last assigned IP address '''
+        pass
+
 ###################
 # PUBLIC (test API included)
 ###################
diff --git a/src/osmo_gsm_tester/obj/ms_amarisoft.py b/src/osmo_gsm_tester/obj/ms_amarisoft.py
index e99cca3..432f759 100644
--- a/src/osmo_gsm_tester/obj/ms_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/ms_amarisoft.py
@@ -296,13 +296,19 @@
             self.rem_host.scp('scp-cfg-rf-to-remote', self.config_rf_file, self.remote_config_rf_file)
             self.rem_host.scp('scp-ifup-to-remote', self.ifup_file, self.remote_ifup_file)
 
-    def is_connected(self, mcc_mnc=None):
+    def is_registered(self, mcc_mnc=None):
         # lteue doesn't call the ifup script until after it becomes attached, so
         # simply look for our ifup script output at the end of it:
         return 'netns %s configured' % (self.netns()) in (self.process.get_stdout() or '')
 
+    def is_rrc_connected(self):
+        return self.is_registered()
+
     def is_attached(self):
-        return self.is_connected()
+        return self.is_registered()
+
+    def get_assigned_addr(self, ipv6=False):
+        raise log.Error('API not implemented!')
 
     def running(self):
         return not self.process.terminated()
diff --git a/src/osmo_gsm_tester/obj/ms_ofono.py b/src/osmo_gsm_tester/obj/ms_ofono.py
index e1ddbc8..e03427e 100644
--- a/src/osmo_gsm_tester/obj/ms_ofono.py
+++ b/src/osmo_gsm_tester/obj/ms_ofono.py
@@ -487,6 +487,9 @@
             return self._apn_ipaddr
         return 'dynamic'
 
+    def get_assigned_addr(self, ipv6=False):
+        raise log.Error('API not implemented!')
+
     def features(self):
         return self._conf.get('features', [])
 
@@ -501,7 +504,7 @@
     def _on_netreg_property_changed(self, name, value):
         self.dbg('%r.PropertyChanged() -> %s=%s' % (I_NETREG, name, value))
 
-    def is_connected(self, mcc_mnc=None):
+    def is_registered(self, mcc_mnc=None):
         netreg = self.dbus.interface(I_NETREG)
         prop = netreg.GetProperties()
         status = prop.get('Status')
@@ -516,6 +519,10 @@
             return True
         return False
 
+    def is_connected(self, mcc_mnc=None):
+        '''Convenience helper to keep old test API'''
+        return self.is_registered(mcc_mnc)
+
     def schedule_scan_register(self, mcc_mnc):
         if self.register_attempts > NETREG_MAX_REGISTER_ATTEMPTS:
             raise log.Error('Failed to find Network Operator', mcc_mnc=mcc_mnc, attempts=self.register_attempts)
diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py
index 1922bef..604d5c7 100644
--- a/src/osmo_gsm_tester/obj/ms_srs.py
+++ b/src/osmo_gsm_tester/obj/ms_srs.py
@@ -19,6 +19,7 @@
 
 import os
 import pprint
+import re
 
 from ..core import log, util, config, template, process, remote
 from ..core import schema
@@ -300,11 +301,26 @@
             self.rem_host.recreate_remote_dir(self.remote_run_dir)
             self.rem_host.scp('scp-cfg-to-remote', self.config_file, self.remote_config_file)
 
-    def is_connected(self, mcc_mnc=None):
+    def is_rrc_connected(self):
+        ''' Check whether UE is RRC connected using console message '''
+        pos_connected = (self.process.get_stdout() or '').rfind('RRC Connected')
+        pos_released = (self.process.get_stdout() or '').rfind('RRC IDLE')
+        return pos_connected > pos_released
+
+    def is_registered(self, mcc_mnc=None):
+        ''' Checks if UE is EMM registered '''
         return 'Network attach successful.' in (self.process.get_stdout() or '')
 
-    def is_attached(self):
-        return self.is_connected()
+    def get_assigned_addr(self, ipv6=False):
+        if ipv6:
+            raise log.Error('IPv6 not implemented!')
+        else:
+            stdout_lines = (self.process.get_stdout() or '').splitlines()
+            for line in reversed(stdout_lines):
+                if line.find('Network attach successful. IP: ') != -1:
+                    ipv4_addr = re.findall( r'[0-9]+(?:\.[0-9]+){3}', line)
+                    return ipv4_addr[0]
+            return None
 
     def running(self):
         return not self.process.terminated()
diff --git a/sysmocom/suites/4g/handover.py b/sysmocom/suites/4g/handover.py
index b0837d8..6bb6456 100755
--- a/sysmocom/suites/4g/handover.py
+++ b/sysmocom/suites/4g/handover.py
@@ -46,7 +46,7 @@
 proc = iperf3cli.prepare_test_proc(iperf3cli.DIR_UL, ue.netns(), duration + 30)
 
 print('waiting for UE to attach...')
-wait(ue.is_connected, None)
+wait(ue.is_rrc_connected)
 print('UE is attached')
 
 rfemu_cell1 = enb.get_rfemu(0)
diff --git a/sysmocom/suites/4g/iperf3_dl.py b/sysmocom/suites/4g/iperf3_dl.py
index d90c80b..055ce97 100755
--- a/sysmocom/suites/4g/iperf3_dl.py
+++ b/sysmocom/suites/4g/iperf3_dl.py
@@ -26,7 +26,7 @@
 proc = iperf3cli.prepare_test_proc(iperf3cli.DIR_DL, ue.netns(), bitrate=max_rate)
 
 print('waiting for UE to attach...')
-wait(ue.is_connected, None)
+wait(ue.is_rrc_connected)
 print('UE is attached')
 
 print("Running iperf3 client to %s through %s" % (str(iperf3cli), ue.netns()))
diff --git a/sysmocom/suites/4g/iperf3_ul.py b/sysmocom/suites/4g/iperf3_ul.py
index 453cdfa..6e24070 100755
--- a/sysmocom/suites/4g/iperf3_ul.py
+++ b/sysmocom/suites/4g/iperf3_ul.py
@@ -26,7 +26,7 @@
 proc = iperf3cli.prepare_test_proc(iperf3cli.DIR_UL, ue.netns(), bitrate=max_rate)
 
 print('waiting for UE to attach...')
-wait(ue.is_connected, None)
+wait(ue.is_rrc_connected)
 print('UE is attached')
 
 print("Running iperf3 client to %s through %s" % (str(iperf3cli), ue.netns()))
diff --git a/sysmocom/suites/4g/ping.py b/sysmocom/suites/4g/ping.py
index c81a35d..0fb2edb 100755
--- a/sysmocom/suites/4g/ping.py
+++ b/sysmocom/suites/4g/ping.py
@@ -16,7 +16,7 @@
 
 ue.connect(enb)
 print('waiting for UE to attach...')
-wait(ue.is_connected, None)
+wait(ue.is_rrc_connected)
 print('UE is attached')
 
 proc = ue.run_netns_wait('ping', ('ping', '-c', '10', epc.tun_addr()))

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18535
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: I6cd057e34b4df6a1a73695355dd6406d7e039546
Gerrit-Change-Number: 18535
Gerrit-PatchSet: 8
Gerrit-Owner: srs_andre <andre at softwareradiosystems.com>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-Reviewer: srs_andre <andre at softwareradiosystems.com>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200610/99623437/attachment.htm>


More information about the gerrit-log mailing list