<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18535">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved

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

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6cd057e34b4df6a1a73695355dd6406d7e039546 </div>
<div style="display:none"> Gerrit-Change-Number: 18535 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: srs_andre <andre@softwareradiosystems.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: srs_andre <andre@softwareradiosystems.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>