<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18777">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">EventLoop: Fix log error "Origin parent loop" during wait()<br><br>Setting the log.ctx manually is not needed anymore and it's actually<br>harmful since all palces where it was used, a log.Origin already in path<br>was being passed, causing a origin loop.<br><br>Change-Id: I0511b9f7bc59e3c7f2269ff3155d0c95db58d063<br>---<br>M src/osmo_gsm_tester/core/event_loop.py<br>M src/osmo_gsm_tester/core/process.py<br>M src/osmo_gsm_tester/obj/bts_nanobts.py<br>M src/osmo_gsm_tester/obj/bts_osmotrx.py<br>M src/osmo_gsm_tester/obj/esme.py<br>M src/osmo_gsm_tester/obj/ms_ofono.py<br>M src/osmo_gsm_tester/obj/ms_srs.py<br>M src/osmo_gsm_tester/obj/osmocon.py<br>M src/osmo_gsm_tester/obj/powersupply.py<br>M src/osmo_gsm_tester/obj/powersupply_sispm.py<br>M src/osmo_gsm_tester/testenv.py<br>11 files changed, 29 insertions(+), 31 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/77/18777/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/core/event_loop.py b/src/osmo_gsm_tester/core/event_loop.py</span><br><span>index fe88ef4..4092a66 100644</span><br><span>--- a/src/osmo_gsm_tester/core/event_loop.py</span><br><span>+++ b/src/osmo_gsm_tester/core/event_loop.py</span><br><span>@@ -85,9 +85,8 @@</span><br><span>         self.gctx.iteration(may_block)</span><br><span>         self.deferred_handling.handle_queue()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def wait_no_raise(self, log_obj, condition, condition_args, condition_kwargs, timeout, timestep):</span><br><span style="color: hsl(120, 100%, 40%);">+    def wait_no_raise(self, condition, condition_args, condition_kwargs, timeout, timestep):</span><br><span>         if not timeout or timeout < 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            self = log_obj</span><br><span>             raise log.Error('wait() *must* time out at some point.', timeout=timeout)</span><br><span>         if timestep < 0.1:</span><br><span>             timestep = 0.1</span><br><span>@@ -105,14 +104,13 @@</span><br><span>                 success = wait_req.condition_ack</span><br><span>                 return success</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def wait(self, log_obj, condition, *condition_args, timeout=300, timestep=1, **condition_kwargs):</span><br><span style="color: hsl(0, 100%, 40%);">-        if not self.wait_no_raise(log_obj, condition, condition_args, condition_kwargs, timeout, timestep):</span><br><span style="color: hsl(0, 100%, 40%);">-            log.ctx(log_obj)</span><br><span style="color: hsl(120, 100%, 40%);">+    def wait(self, condition, *condition_args, timeout=300, timestep=1, **condition_kwargs):</span><br><span style="color: hsl(120, 100%, 40%);">+        if not self.wait_no_raise(condition, condition_args, condition_kwargs, timeout, timestep):</span><br><span>             raise log.Error('Wait timeout', condition=condition, timeout=timeout, timestep=timestep)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def sleep(self, log_obj, seconds):</span><br><span style="color: hsl(120, 100%, 40%);">+    def sleep(self, seconds):</span><br><span>         assert seconds > 0.</span><br><span style="color: hsl(0, 100%, 40%);">-        self.wait_no_raise(log_obj, lambda: False, [], {}, timeout=seconds, timestep=seconds)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.wait_no_raise(lambda: False, [], {}, timeout=seconds, timestep=seconds)</span><br><span> </span><br><span> </span><br><span> MainLoop = EventLoop()</span><br><span>diff --git a/src/osmo_gsm_tester/core/process.py b/src/osmo_gsm_tester/core/process.py</span><br><span>index 33ae69a..8954674 100644</span><br><span>--- a/src/osmo_gsm_tester/core/process.py</span><br><span>+++ b/src/osmo_gsm_tester/core/process.py</span><br><span>@@ -347,7 +347,7 @@</span><br><span>         return self.result is not None</span><br><span> </span><br><span>     def wait(self, timeout=300):</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, self.terminated, timeout=timeout)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(self.terminated, timeout=timeout)</span><br><span> </span><br><span>     def stdin_write(self, cmd):</span><br><span>         '''</span><br><span>diff --git a/src/osmo_gsm_tester/obj/bts_nanobts.py b/src/osmo_gsm_tester/obj/bts_nanobts.py</span><br><span>index a818a8f..03730a6 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/bts_nanobts.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/bts_nanobts.py</span><br><span>@@ -139,7 +139,7 @@</span><br><span>                 # Let some time for BTS to restart. It takes much more than 20 secs, and</span><br><span>                 # this way we make sure we don't catch responses in abisip-find prior to</span><br><span>                 # BTS restarting.</span><br><span style="color: hsl(0, 100%, 40%);">-                MainLoop.sleep(self, 20)</span><br><span style="color: hsl(120, 100%, 40%);">+                MainLoop.sleep(20)</span><br><span> </span><br><span>                 self.dbg('Starting to connect id %d trx %d to' % (unitid, trx_i), self.bsc)</span><br><span>                 ipfind = AbisIpFind(self.testenv, self.run_dir, local_bind_ip, 'postconf')</span><br><span>@@ -150,7 +150,7 @@</span><br><span>             else:</span><br><span>                 self.dbg('nanoBTS id %d trx %d no need to change OML IP (%s) and restart' % (unitid, trx_i, running_oml_ip))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, self.bsc.bts_is_connected, self, timeout=600)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(self.bsc.bts_is_connected, self, timeout=600)</span><br><span>         self.log('nanoBTS connected to BSC')</span><br><span> </span><br><span>         #According to roh, it can be configured to use a static IP in a permanent way:</span><br><span>@@ -239,11 +239,11 @@</span><br><span>         return self.get_line_by_ip(ipaddr) is not None</span><br><span> </span><br><span>     def wait_bts_ready(self, ipaddr):</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, self.bts_ready, ipaddr)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(self.bts_ready, ipaddr)</span><br><span>         # There's a period of time after boot in which nanobts answers to</span><br><span>         # abisip-find but tcp RSTs ipacces-config conns. Let's wait in here a</span><br><span>         # bit more time to avoid failing after stating the BTS is ready.</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.sleep(self, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.sleep(2)</span><br><span> </span><br><span> class IpAccessConfig(log.Origin):</span><br><span>     testenv = None</span><br><span>diff --git a/src/osmo_gsm_tester/obj/bts_osmotrx.py b/src/osmo_gsm_tester/obj/bts_osmotrx.py</span><br><span>index 0eeef49..8eed8cf 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/bts_osmotrx.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/bts_osmotrx.py</span><br><span>@@ -173,7 +173,7 @@</span><br><span>             self.trx = OsmoTrx.get_instance_by_type(self.get_osmo_trx_type(), self.testenv, self.conf_for_osmotrx())</span><br><span>             self.trx.start(keepalive)</span><br><span>             self.log('Waiting for %s to start up...' % self.trx.name())</span><br><span style="color: hsl(0, 100%, 40%);">-            MainLoop.wait(self, self.trx.trx_ready)</span><br><span style="color: hsl(120, 100%, 40%);">+            MainLoop.wait(self.trx.trx_ready)</span><br><span> </span><br><span>         self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bts')))</span><br><span>         lib = self.inst.child('lib')</span><br><span>@@ -374,7 +374,7 @@</span><br><span>                 break</span><br><span>             keep_trying = keep_trying - 1</span><br><span>             self.log('Configuring SC5 TRX failed, retrying %d more times' % keep_trying)</span><br><span style="color: hsl(0, 100%, 40%);">-            MainLoop.sleep(self, 5)</span><br><span style="color: hsl(120, 100%, 40%);">+            MainLoop.sleep(5)</span><br><span>         if keep_trying == 0:</span><br><span>             raise log.Error('Failed configuring SC5!')</span><br><span>         self.ready = True</span><br><span>diff --git a/src/osmo_gsm_tester/obj/esme.py b/src/osmo_gsm_tester/obj/esme.py</span><br><span>index 13e1bba..cd416ab 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/esme.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/esme.py</span><br><span>@@ -190,7 +190,7 @@</span><br><span>             umref, self.pdus_pending = self.sms_send(sms_obj, mode, receipt)</span><br><span>             self.dbg('pdus_pending:', self.pdus_pending)</span><br><span>             self.client.set_message_sent_handler(self._process_pdus_pending)</span><br><span style="color: hsl(0, 100%, 40%);">-            MainLoop.wait(self, lambda: len(self.pdus_pending) == 0, timeout=10)</span><br><span style="color: hsl(120, 100%, 40%);">+            MainLoop.wait(lambda: len(self.pdus_pending) == 0, timeout=10)</span><br><span>             return umref</span><br><span>         finally:</span><br><span>             self.client.set_message_sent_handler(old_func)</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 cec6824..b604325 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>@@ -317,7 +317,7 @@</span><br><span>         self.log('Setting', name, val)</span><br><span>         self.interface(iface).SetProperty(name, Variant('b', val))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, self.property_is, name, bool_val)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(self.property_is, name, bool_val)</span><br><span> </span><br><span>     def set_powered(self, powered=True):</span><br><span>         self.set_bool('Powered', powered)</span><br><span>@@ -461,10 +461,10 @@</span><br><span>                 if not self.is_powered():</span><br><span>                         self.set_powered()</span><br><span>                 # wait for SimManager iface to appear after we power on</span><br><span style="color: hsl(0, 100%, 40%);">-                MainLoop.wait(self, self.dbus.has_interface, I_SIMMGR, timeout=10)</span><br><span style="color: hsl(120, 100%, 40%);">+                MainLoop.wait(self.dbus.has_interface, I_SIMMGR, timeout=10)</span><br><span>                 simmgr = self.dbus.interface(I_SIMMGR)</span><br><span>                 # If properties are requested quickly, it may happen that Sim property is still not there.</span><br><span style="color: hsl(0, 100%, 40%);">-                MainLoop.wait(self, lambda: simmgr.GetProperties().get('SubscriberIdentity', None) is not None, timeout=10)</span><br><span style="color: hsl(120, 100%, 40%);">+                MainLoop.wait(lambda: simmgr.GetProperties().get('SubscriberIdentity', None) is not None, timeout=10)</span><br><span>                 props = simmgr.GetProperties()</span><br><span>                 self.dbg('got SIM properties', props)</span><br><span>                 self._imsi = props.get('SubscriberIdentity', None)</span><br><span>@@ -606,7 +606,7 @@</span><br><span>         self.set_powered(False)</span><br><span>         req_ifaces = self._required_ifaces()</span><br><span>         for iface in req_ifaces:</span><br><span style="color: hsl(0, 100%, 40%);">-            MainLoop.wait(self, lambda: not self.dbus.has_interface(iface), timeout=10)</span><br><span style="color: hsl(120, 100%, 40%);">+            MainLoop.wait(lambda: not self.dbus.has_interface(iface), timeout=10)</span><br><span> </span><br><span>     def power_cycle(self):</span><br><span>         'Power the modem and put it online, power cycle it if it was already on'</span><br><span>@@ -618,7 +618,7 @@</span><br><span>             self.dbg('Powering on')</span><br><span>         self.set_powered()</span><br><span>         self.set_online()</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, self.dbus.has_interface, *req_ifaces, timeout=10)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(self.dbus.has_interface, *req_ifaces, timeout=10)</span><br><span> </span><br><span>     def connect(self, mcc_mnc=None):</span><br><span>         'Connect to MCC+MNC'</span><br><span>@@ -671,7 +671,7 @@</span><br><span> </span><br><span>         # Activate can only be called after we are attached</span><br><span>         ctx.SetProperty('Active', Variant('b', True))</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, lambda: ctx.GetProperties()['Active'] == True)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(lambda: ctx.GetProperties()['Active'] == True)</span><br><span>         self.log('context activated', path=ctx_path, apn=apn, user=user, properties=ctx.GetProperties())</span><br><span>         return ctx_path</span><br><span> </span><br><span>@@ -679,7 +679,7 @@</span><br><span>         self.dbg('deactivate_context', path=ctx_id)</span><br><span>         ctx = systembus_get(ctx_id)</span><br><span>         ctx.SetProperty('Active', Variant('b', False))</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, lambda: ctx.GetProperties()['Active'] == False)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(lambda: ctx.GetProperties()['Active'] == False)</span><br><span>         self.dbg('deactivate_context active=false, removing', path=ctx_id)</span><br><span>         connmgr = self.dbus.interface(I_CONNMGR)</span><br><span>         connmgr.RemoveContext(ctx_id)</span><br><span>@@ -770,7 +770,7 @@</span><br><span>         else:</span><br><span>             caller_msisdn = str(caller_msisdn_or_modem)</span><br><span>         self.dbg('Waiting for incoming call from:', caller_msisdn)</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, lambda: self._find_call_msisdn_state(caller_msisdn, 'incoming') is not None, timeout=timeout)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(lambda: self._find_call_msisdn_state(caller_msisdn, 'incoming') is not None, timeout=timeout)</span><br><span>         return self._find_call_msisdn_state(caller_msisdn, 'incoming')</span><br><span> </span><br><span>     def call_answer(self, call_id):</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 0aad954..3aa6b0a 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>@@ -123,7 +123,7 @@</span><br><span>     def sleep_after_stop(self):</span><br><span>         # Only sleep once</span><br><span>         if self.stop_sleep_time > 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            MainLoop.sleep(self, self.stop_sleep_time)</span><br><span style="color: hsl(120, 100%, 40%);">+            MainLoop.sleep(self.stop_sleep_time)</span><br><span>             self.stop_sleep_time = 0</span><br><span> </span><br><span>     def stop(self):</span><br><span>diff --git a/src/osmo_gsm_tester/obj/osmocon.py b/src/osmo_gsm_tester/obj/osmocon.py</span><br><span>index c37cf36..18ee382 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/osmocon.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/osmocon.py</span><br><span>@@ -89,7 +89,7 @@</span><br><span>         self.testenv.remember_to_stop(self.process)</span><br><span>         self.process.launch()</span><br><span>         self.log('Waiting for osmocon to be up and running')</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.wait(self, os.path.exists, self.l2_socket_path())</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.wait(os.path.exists, self.l2_socket_path())</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/powersupply.py b/src/osmo_gsm_tester/obj/powersupply.py</span><br><span>index bc7c0e3..7715a46 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/powersupply.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/powersupply.py</span><br><span>@@ -47,7 +47,7 @@</span><br><span>     def power_cycle(self, sleep=0):</span><br><span>         """Turns off the device, waits N.N seconds, then turn on the device."""</span><br><span>         self.power_set(False)</span><br><span style="color: hsl(0, 100%, 40%);">-        MainLoop.sleep(self, sleep)</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.sleep(sleep)</span><br><span>         self.power_set(True)</span><br><span> </span><br><span> def get_instance_by_type(pwsupply_type, pwsupply_opt):</span><br><span>diff --git a/src/osmo_gsm_tester/obj/powersupply_sispm.py b/src/osmo_gsm_tester/obj/powersupply_sispm.py</span><br><span>index 0b1ad07..4fec83e 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/powersupply_sispm.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/powersupply_sispm.py</span><br><span>@@ -48,7 +48,7 @@</span><br><span>             except USBError as e:</span><br><span>                     if e.errno == 16 or e.errno==110:</span><br><span>                         self.log('skip usb error, retry', repr(e))</span><br><span style="color: hsl(0, 100%, 40%);">-                        MainLoop.sleep(self, 0.1)</span><br><span style="color: hsl(120, 100%, 40%);">+                        MainLoop.sleep(0.1)</span><br><span>                         continue</span><br><span>                     raise e</span><br><span> </span><br><span>diff --git a/src/osmo_gsm_tester/testenv.py b/src/osmo_gsm_tester/testenv.py</span><br><span>index 7ca854b..4709b4c 100644</span><br><span>--- a/src/osmo_gsm_tester/testenv.py</span><br><span>+++ b/src/osmo_gsm_tester/testenv.py</span><br><span>@@ -345,13 +345,13 @@</span><br><span>     log = test.log</span><br><span>     dbg = test.dbg</span><br><span>     err = test.err</span><br><span style="color: hsl(0, 100%, 40%);">-    wait = lambda *args, **kwargs: MainLoop.wait(suite_run, *args, **kwargs)</span><br><span style="color: hsl(0, 100%, 40%);">-    wait_no_raise = lambda *args, **kwargs: MainLoop.wait_no_raise(suite_run, *args, **kwargs)</span><br><span style="color: hsl(0, 100%, 40%);">-    sleep = lambda *args, **kwargs: MainLoop.sleep(suite_run, *args, **kwargs)</span><br><span style="color: hsl(120, 100%, 40%);">+    tenv = TestEnv(suite_run, _test)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait = MainLoop.wait</span><br><span style="color: hsl(120, 100%, 40%);">+    wait_no_raise = MainLoop.wait_no_raise</span><br><span style="color: hsl(120, 100%, 40%);">+    sleep = MainLoop.sleep</span><br><span>     poll = MainLoop.poll</span><br><span>     Sms = Sms_class</span><br><span>     process = process_module</span><br><span style="color: hsl(0, 100%, 40%);">-    tenv = TestEnv(suite_run, _test)</span><br><span>     prompt = tenv.prompt</span><br><span>     return tenv</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18777">change 18777</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/+/18777"/><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: I0511b9f7bc59e3c7f2269ff3155d0c95db58d063 </div>
<div style="display:none"> Gerrit-Change-Number: 18777 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>