<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/21670">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">keep Ctrl connections open for bsc, msc and nitb objects<br><br>The pattern to use 'with' to keep a CTRL connection open adds indents to<br>every test script that wants to avoid multiple reconnections to the<br>CTRL. Instead, keeping a single open connection that is cleaned up on<br>{bsc,msc,nitb} object cleanup ensures that a) the program started up<br>successfully and opened a CTRL port, b) always has a CTRL open without<br>having to worry about it and c) keeps test scripts less<br>complex/indented/crufted.<br><br>(These are all current users of the OsmoCtrl API.)<br><br>Change-Id: I53fedbe569c5ccbc4b1a17dafe1f8d1bb8200b24<br>---<br>M src/osmo_gsm_tester/obj/bsc_osmo.py<br>M src/osmo_gsm_tester/obj/msc_osmo.py<br>M src/osmo_gsm_tester/obj/nitb_osmo.py<br>M src/osmo_gsm_tester/testenv.py<br>4 files changed, 37 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/70/21670/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/obj/bsc_osmo.py b/src/osmo_gsm_tester/obj/bsc_osmo.py</span><br><span>index 510063a..877db29 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/bsc_osmo.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/bsc_osmo.py</span><br><span>@@ -50,6 +50,7 @@</span><br><span>         self.mgw = mgw</span><br><span>         self.stp = stp</span><br><span>         self.vty = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl = None</span><br><span> </span><br><span>     def start(self):</span><br><span>         self.log('Starting osmo-bsc')</span><br><span>@@ -84,6 +85,9 @@</span><br><span>         self.vty = OsmoBscVty(self)</span><br><span>         self.vty.connect()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl = OsmoBscCtrl(self)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl.connect()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def configure(self):</span><br><span>         self.config_file = self.run_dir.new_file('osmo-bsc.cfg')</span><br><span>         self.dbg(config_file=self.config_file)</span><br><span>@@ -149,10 +153,8 @@</span><br><span>         # over this list, we have a 1:1 match in indexes.</span><br><span>         return self.bts.index(bts)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def bts_is_connected(self, bts, use_ctrl=None):</span><br><span style="color: hsl(0, 100%, 40%);">-        if use_ctrl is None:</span><br><span style="color: hsl(0, 100%, 40%);">-            use_ctrl = self.ctrl()</span><br><span style="color: hsl(0, 100%, 40%);">-        return use_ctrl.bts_is_connected(self.bts_num(bts))</span><br><span style="color: hsl(120, 100%, 40%);">+    def bts_is_connected(self, bts):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.ctrl.bts_is_connected(self.bts_num(bts))</span><br><span> </span><br><span>     def running(self):</span><br><span>         return not self.process.terminated()</span><br><span>@@ -161,9 +163,9 @@</span><br><span>         if self.vty is not None:</span><br><span>             self.vty.disconnect()</span><br><span>             self.vty = None</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def ctrl(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        return OsmoBscCtrl(self)</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.ctrl is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.ctrl.disconnect()</span><br><span style="color: hsl(120, 100%, 40%);">+            self.ctrl = None</span><br><span> </span><br><span> class OsmoBscCtrl(osmo_ctrl.OsmoCtrl):</span><br><span>     def __init__(self, bsc, port=4249):</span><br><span>diff --git a/src/osmo_gsm_tester/obj/msc_osmo.py b/src/osmo_gsm_tester/obj/msc_osmo.py</span><br><span>index 5a7c0ba..550fb87 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/msc_osmo.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/msc_osmo.py</span><br><span>@@ -49,6 +49,7 @@</span><br><span>         self.mgw = mgw</span><br><span>         self.stp = stp</span><br><span>         self.smsc = smsc.Smsc((ip_address.get('addr'), 2775))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl = None</span><br><span> </span><br><span>     def start(self):</span><br><span>         self.log('Starting osmo-msc')</span><br><span>@@ -75,6 +76,9 @@</span><br><span>         self.testenv.remember_to_stop(self.process)</span><br><span>         self.process.launch()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl = OsmoMscCtrl(self)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl.connect()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def configure(self):</span><br><span>         self.config_file = self.run_dir.new_file('osmo-msc.cfg')</span><br><span>         self.dbg(config_file=self.config_file)</span><br><span>@@ -147,7 +151,7 @@</span><br><span>         return all([(imsi in attached) for imsi in imsis])</span><br><span> </span><br><span>     def imsi_list_attached(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        return OsmoMscCtrl(self).subscriber_list_active()</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.ctrl.subscriber_list_active()</span><br><span> </span><br><span>     def set_emergency_call_msisdn(self, msisdn):</span><br><span>         self.dbg('Setting Emergency Call MSISDN', msisdn=msisdn)</span><br><span>@@ -156,6 +160,11 @@</span><br><span>     def running(self):</span><br><span>         return not self.process.terminated()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def cleanup(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.ctrl is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.ctrl.disconnect()</span><br><span style="color: hsl(120, 100%, 40%);">+            self.ctrl = None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> class OsmoMscCtrl(osmo_ctrl.OsmoCtrl):</span><br><span>     def __init__(self, msc, port=4255):</span><br><span>diff --git a/src/osmo_gsm_tester/obj/nitb_osmo.py b/src/osmo_gsm_tester/obj/nitb_osmo.py</span><br><span>index ea00a75..a978b71 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/nitb_osmo.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/nitb_osmo.py</span><br><span>@@ -36,6 +36,7 @@</span><br><span>         self.ip_address = ip_address</span><br><span>         self.bts = []</span><br><span>         self.smsc = smsc.Smsc((ip_address.get('addr'), 2775))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl = None</span><br><span> </span><br><span>     def start(self):</span><br><span>         self.log('Starting osmo-nitb')</span><br><span>@@ -62,6 +63,9 @@</span><br><span>         self.testenv.remember_to_stop(self.process)</span><br><span>         self.process.launch()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl = OsmoNitbCtrl(self)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ctrl.connect()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def configure(self):</span><br><span>         self.config_file = self.run_dir.new_file('osmo-nitb.cfg')</span><br><span>         self.dbg(config_file=self.config_file)</span><br><span>@@ -134,11 +138,11 @@</span><br><span>             raise log.Error("Auth algo %r selected and no KI specified" % algo)</span><br><span> </span><br><span>         self.log('Add subscriber', msisdn=msisdn, imsi=modem.imsi())</span><br><span style="color: hsl(0, 100%, 40%);">-        OsmoNitbCtrl(self).subscriber_add(modem.imsi(), msisdn, modem.ki(), algo)</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.ctrl.subscriber_add(modem.imsi(), msisdn, modem.ki(), algo)</span><br><span> </span><br><span>     def subscriber_delete(self, modem):</span><br><span>         self.log('Delete subscriber', imsi=modem.imsi())</span><br><span style="color: hsl(0, 100%, 40%);">-        OsmoNitbCtrl(self).subscriber_delete(modem.imsi())</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.ctrl.subscriber_delete(modem.imsi())</span><br><span> </span><br><span>     def subscriber_attached(self, *modems):</span><br><span>         return self.imsi_attached(*[m.imsi() for m in modems])</span><br><span>@@ -149,14 +153,18 @@</span><br><span>         return all([(imsi in attached) for imsi in imsis])</span><br><span> </span><br><span>     def imsi_list_attached(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        return OsmoNitbCtrl(self).subscriber_list_active()</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.ctrl.subscriber_list_active()</span><br><span> </span><br><span>     def bts_is_connected(self, bts):</span><br><span style="color: hsl(0, 100%, 40%);">-        return OsmoNitbCtrl(self).bts_is_connected(self.bts_num(bts))</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.ctrl.bts_is_connected(self.bts_num(bts))</span><br><span> </span><br><span>     def running(self):</span><br><span>         return not self.process.terminated()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def cleanup(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.ctrl is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.ctrl.disconnect()</span><br><span style="color: hsl(120, 100%, 40%);">+            self.ctrl = None</span><br><span> </span><br><span> class OsmoNitbCtrl(osmo_ctrl.OsmoCtrl):</span><br><span>     def __init__(self, nitb, port=4249):</span><br><span>diff --git a/src/osmo_gsm_tester/testenv.py b/src/osmo_gsm_tester/testenv.py</span><br><span>index b3db84f..dc7aee0 100644</span><br><span>--- a/src/osmo_gsm_tester/testenv.py</span><br><span>+++ b/src/osmo_gsm_tester/testenv.py</span><br><span>@@ -194,7 +194,9 @@</span><br><span>         from .obj.nitb_osmo import OsmoNitb</span><br><span>         if ip_address is None:</span><br><span>             ip_address = self.ip_address()</span><br><span style="color: hsl(0, 100%, 40%);">-        return OsmoNitb(self, ip_address)</span><br><span style="color: hsl(120, 100%, 40%);">+        nitb_obj = OsmoNitb(self, ip_address)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.register_for_cleanup(nitb_obj)</span><br><span style="color: hsl(120, 100%, 40%);">+        return nitb_obj</span><br><span> </span><br><span>     def hlr(self, ip_address=None):</span><br><span>         from .obj.hlr_osmo import OsmoHlr</span><br><span>@@ -230,7 +232,9 @@</span><br><span>         from .obj import msc_osmo</span><br><span>         if ip_address is None:</span><br><span>             ip_address = self.ip_address()</span><br><span style="color: hsl(0, 100%, 40%);">-        return msc_osmo.OsmoMsc(self, hlr, mgcpgw, stp, ip_address)</span><br><span style="color: hsl(120, 100%, 40%);">+        msc_obj = msc_osmo.OsmoMsc(self, hlr, mgcpgw, stp, ip_address)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.register_for_cleanup(msc_obj)</span><br><span style="color: hsl(120, 100%, 40%);">+        return msc_obj</span><br><span> </span><br><span>     def bsc(self, msc, mgw, stp, ip_address=None):</span><br><span>         from .obj.bsc_osmo import OsmoBsc</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/21670">change 21670</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/+/21670"/><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: I53fedbe569c5ccbc4b1a17dafe1f8d1bb8200b24 </div>
<div style="display:none"> Gerrit-Change-Number: 21670 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>