ofono: try a different way to catch missing dbus interfaces
The nested wait was definitely a bad idea. This here is certainly not very
nice either, but an attempt to catch cases where a dbus interface cannot
be used yet despite being signalled by ofono (sporadically happens).
Change-Id: I2ac7eb0f5174250f4b97e2bf758666410d8cb854
diff --git a/src/osmo_gsm_tester/ofono_client.py b/src/osmo_gsm_tester/ofono_client.py
index ed62536..b983548 100644
--- a/src/osmo_gsm_tester/ofono_client.py
+++ b/src/osmo_gsm_tester/ofono_client.py
@@ -127,18 +127,21 @@
except:
self.log_exn()
- def _interface_really_present(self, interface_name):
- try:
- self.dbus_obj()[interface_name]
- return True
- except:
- return False
-
def _on_interface_enabled(self, interface_name):
self.dbg('Interface enabled:', interface_name)
- test.wait(self._interface_really_present, interface_name)
if interface_name == I_SMS:
- self.dbus_obj()[I_SMS].IncomingMessage.connect(self._on_incoming_message)
+ while True:
+ retries = 3
+ try:
+ self.dbus_obj()[I_SMS].IncomingMessage.connect(self._on_incoming_message)
+ break
+ except:
+ self.dbg('Interface not yet available:', I_SMS)
+ retries -= 1
+ time.sleep(1)
+ if retries <= 0:
+ self.err('Interface enabled by signal, but not available:', I_SMS)
+ raise
def _on_interface_disabled(self, interface_name):
self.dbg('Interface disabled:', interface_name)