rendered paste bodydiff --git a/src/core/wader/test/test_dbus.py b/src/core/wader/test/test_dbus.py
index d818b84..8d90500 100644
--- a/src/core/wader/test/test_dbus.py
+++ b/src/core/wader/test/test_dbus.py
@@ -37,7 +37,8 @@ import time
import dbus
import dbus.mainloop.glib
import gconf
-from twisted.internet import defer
+from twisted.internet import defer, reactor
+from twisted.internet.task import deferLater
from twisted.trial import unittest
from wader.common.utils import (get_bands, get_network_modes,
@@ -194,6 +195,31 @@ class DBusTestCase(unittest.TestCase):
self.device.Enable(False, dbus_interface=MDM_INTFACE)
self.device = device = None
+ def do_when_registered(self, callback, errback=None):
+ """
+ Waits for registration then fires callback
+ Many prior tests can leave the card unregistered, use this if you need
+ registration for your test to be successful
+ """
+ reply = self.device.GetRegistrationInfo(dbus_interface=NET_INTFACE)
+ status, numeric_oper = reply[:2]
+ # we must be registered to our home network or roaming
+ if status in [1, 5]:
+ d = defer.succeed(status)
+ d.addCallback(callback)
+ return d
+ elif status == 2:
+ return deferLater(reactor, 5, self.do_when_registered,
+ callback, errback)
+ else:
+ if errback is None:
+ raise unittest.FailTest("Device is neither registered or"
+ " trying: status == %d" % status)
+ else:
+ d = defer.fail(status)
+ d.addErrback(errback)
+ return d
+
# org.freedesktop.ModemManager.Modem tests
def test_ModemDeviceProperty(self):
if sys.platform != 'linux2':
@@ -548,9 +574,12 @@ class DBusTestCase(unittest.TestCase):
def test_NetworkGetSignalQuality(self):
"""Test for Network.GetSignalQuality"""
- quality = self.device.GetSignalQuality(dbus_interface=NET_INTFACE)
- self.failUnlessIsInstance(quality, (dbus.UInt32, int))
- self.failUnlessIn(quality, range(1, 101))
+ def cb(*args):
+ quality = self.device.GetSignalQuality(dbus_interface=NET_INTFACE)
+ self.failUnlessIsInstance(quality, (dbus.UInt32, int))
+ self.failUnlessIn(quality, range(1, 101))
+
+ return self.do_when_registered(cb)
def test_NetworkScan(self):
"""Test for Network.Scan"""
@@ -982,18 +1011,23 @@ class DBusTestCase(unittest.TestCase):
def test_Ussd(self):
"""Test for working ussd implementation"""
- # get the IMSI and check if we have a suitable ussd request/regex
- imsi = self.device.GetImsi(dbus_interface=CRD_INTFACE)
- if imsi.startswith("21401"):
- request, regex = ('*118#', '^Spain.*$')
- elif imsi.startswith("23415"):
- request, regex = ('*#100#', '^07\d{9}$')
- else:
- raise unittest.SkipTest("Untested")
+ def cb(*args):
+ # get the IMSI and check if we have a suitable ussd request/regex
+ imsi = self.device.GetImsi(dbus_interface=CRD_INTFACE)
+ if imsi.startswith("21401"):
+ request, regex = ('*118#', '^Spain.*$')
+ elif imsi.startswith("23415"):
+ request, regex = ('*#100#', '^07\d{9}$')
+ else:
+ raise unittest.SkipTest("Untested")
+
+ response = self.device.Initiate(request)
+
+ self.failUnless(re.compile(regex).match(response))
- response = self.device.Initiate(request)
+ return self.do_when_registered(cb)
- self.failUnless(re.compile(regex).match(response))
+ test_Ussd.timeout = 60
def test_ZDisableReEnable(self):
"""Test last for disable device and reenable"""