Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-04-23 17:12:10 (GMT)
committer Dan Williams <dcbw@redhat.com>2007-04-23 17:12:10 (GMT)
commit857aa1dcbfc6755777e93e345cffb962c2cf475d (patch)
treeccdf3aaf0862726c08b43324008e4c4c45b029d1 /tests
parent86ab6ca36b2ab0b45096bd209bbfb72db47683f4 (diff)
Rework mock ps start/stop; test BuddyAppeared signals
Diffstat (limited to 'tests')
-rwxr-xr-xtests/presence/mockps.py19
-rwxr-xr-xtests/presence/test-ps-bindings.py121
2 files changed, 113 insertions, 27 deletions
diff --git a/tests/presence/mockps.py b/tests/presence/mockps.py
index d279fb2..725ba4a 100755
--- a/tests/presence/mockps.py
+++ b/tests/presence/mockps.py
@@ -180,6 +180,7 @@ class TestOwner(TestBuddy):
_PRESENCE_SERVICE = "org.laptop.Sugar.Presence"
_PRESENCE_INTERFACE = "org.laptop.Sugar.Presence"
+_PRESENCE_TEST_INTERFACE = "org.laptop.Sugar.Presence._Test"
_PRESENCE_PATH = "/org/laptop/Sugar/Presence"
class TestPresenceService(dbus.service.Object):
@@ -269,6 +270,24 @@ class TestPresenceService(dbus.service.Object):
def GetPreferredConnection(self):
return "bar.baz.foo", "/bar/baz/foo"
+ # Private methods used for testing
+ @dbus.service.method(_PRESENCE_TEST_INTERFACE, in_signature="ayss")
+ def AddBuddy(self, pubkey, nick, color):
+ pubkey = ''.join([chr(item) for item in pubkey])
+ objid = self._get_next_object_id()
+ buddy = TestBuddy(self._bus_name, objid, pubkey, nick, color)
+ self._buddies[pubkey] = buddy
+ self.BuddyAppeared(buddy._object_path)
+
+ @dbus.service.method(_PRESENCE_TEST_INTERFACE, in_signature="ay")
+ def RemoveBuddy(self, pubkey):
+ pubkey = ''.join([chr(item) for item in pubkey])
+ if self._buddies.has_key(pubkey):
+ del self._buddies[pubkey]
+ self.BuddyDisappeared(buddy._object_path)
+ return
+ raise NotFoundError("Buddy not found")
+
def main():
loop = gobject.MainLoop()
ps = TestPresenceService()
diff --git a/tests/presence/test-ps-bindings.py b/tests/presence/test-ps-bindings.py
index df99cb1..c232bdc 100755
--- a/tests/presence/test-ps-bindings.py
+++ b/tests/presence/test-ps-bindings.py
@@ -23,34 +23,42 @@ from sugar.presence import presenceservice
import mockps
-class PSBindingsTestCase(unittest.TestCase):
+def start_ps():
+ argv = ["mockps.py", "mockps.py"]
+ (pid, stdin, stdout, stderr) = gobject.spawn_async(argv, flags=gobject.SPAWN_LEAVE_DESCRIPTORS_OPEN)
+
+ # Wait until it shows up on the bus
+ tries = 0
+ bus = dbus.SessionBus()
+ while tries < 10:
+ time.sleep(0.5)
+ bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
+ try:
+ if bus_object.GetNameOwner(presenceservice.DBUS_SERVICE, dbus_interface='org.freedesktop.DBus'):
+ break
+ except dbus.exceptions.DBusException, err:
+ pass
+ tries += 1
+
+ if tries >= 5:
+ stop_ps(pid)
+ raise RuntimeError("Couldn't start the mock presence service")
+
+ return pid
+
+def stop_ps(pid):
+ if pid >= 0:
+ os.kill(pid, 15)
+
+
+class BuddyTests(unittest.TestCase):
def setUp(self):
- argv = ["mockps.py", "mockps.py"]
- (self._pspid, stdin, stdout, stderr) = gobject.spawn_async(argv, flags=gobject.SPAWN_LEAVE_DESCRIPTORS_OPEN)
- print "Presence service started, pid %d" % self._pspid
-
- # Wait until it shows up on the bus
- tries = 0
- bus = dbus.SessionBus()
- while tries < 5:
- bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
- try:
- if bus_object.GetNameOwner(presenceservice.DBUS_SERVICE, dbus_interface='org.freedesktop.DBus'):
- break
- except dbus.exceptions.DBusException, err:
- pass
- time.sleep(1)
- tries += 1
-
- if tries >= 5:
- self.tearDown()
- raise RuntimeError("Couldn't start the mock presence service")
+ self._pspid = start_ps()
def tearDown(self):
- if self._pspid >= 0:
- os.kill(self._pspid, 15)
+ if self._pspid > 0:
+ stop_ps(self._pspid)
self._pspid = -1
- print "Presence service stopped."
def _handle_error(self, err, user_data):
user_data["success"] = False
@@ -59,7 +67,7 @@ class PSBindingsTestCase(unittest.TestCase):
def _testOwner_helper(self, user_data):
try:
- ps = presenceservice.PresenceService(False)
+ ps = presenceservice.get_instance(False)
except RuntimeError, err:
self._handle_error(err, user_data)
return False
@@ -88,13 +96,72 @@ class PSBindingsTestCase(unittest.TestCase):
assert owner.props.nick == mockps._OWNER_NICK, "Owner nickname doesn't match expected"
assert owner.props.color == mockps._OWNER_COLOR, "Owner color doesn't match expected"
+ _BA_PUBKEY = "akjadskjjfahfdahfdsahjfhfewaew3253232832832q098qewa98fdsafa98fa"
+ _BA_NICK = "BuddyAppearedTestBuddy"
+ _BA_COLOR = "#23adfb,#56bb11"
+
+ def _testBuddyAppeared_helper_timeout(self, user_data):
+ self._handle_error("Timeout waiting for buddy-appeared signal", user_data)
+ return False
+
+ def _testBuddyAppeared_helper_cb(self, ps, buddy, user_data):
+ user_data["buddy"] = buddy
+ user_data["success"] = True
+ gtk.main_quit()
+
+ def _testBuddyAppeared_helper(self, user_data):
+ ps = presenceservice.get_instance(False)
+ ps.connect('buddy-appeared', self._testBuddyAppeared_helper_cb, user_data)
+ # Wait 5 seconds max for signal to be emitted
+ gobject.timeout_add(5000, self._testBuddyAppeared_helper_timeout, user_data)
+
+ busobj = dbus.SessionBus().get_object(mockps._PRESENCE_SERVICE,
+ mockps._PRESENCE_PATH)
+ try:
+ testps = dbus.Interface(busobj, mockps._PRESENCE_TEST_INTERFACE)
+ except dbus.exceptions.DBusException, err:
+ self._handle_error(err, user_data)
+ return False
+
+ try:
+ testps.AddBuddy(self._BA_PUBKEY, self._BA_NICK, self._BA_COLOR)
+ except dbus.exceptions.DBusException, err:
+ self._handle_error(err, user_data)
+ return False
+
+ return False
+
+ def testBuddyAppeared(self):
+ ps = presenceservice.get_instance(False)
+ assert ps, "Couldn't get presence service"
+
+ user_data = {"success": False, "err": "", "buddy": None, "ps": ps}
+ gobject.idle_add(self._testBuddyAppeared_helper, user_data)
+ gtk.main()
+
+ assert user_data["success"] == True, user_data["err"]
+ assert user_data["buddy"], "Buddy was not received"
+
+ buddy = user_data["buddy"]
+ assert buddy.props.key == self._BA_PUBKEY, "Public key doesn't match expected"
+ assert buddy.props.nick == self._BA_NICK, "Nickname doesn't match expected"
+ assert buddy.props.color == self._BA_COLOR, "Color doesn't match expected"
+
+ # Try to get buddy by public key
+ buddy2 = ps.get_buddy(self._BA_PUBKEY)
+ assert buddy2, "Couldn't get buddy by public key"
+ assert buddy2.props.key == self._BA_PUBKEY, "Public key doesn't match expected"
+ assert buddy2.props.nick == self._BA_NICK, "Nickname doesn't match expected"
+ assert buddy2.props.color == self._BA_COLOR, "Color doesn't match expected"
+
def addToSuite(suite):
- suite.addTest(PSBindingsTestCase("testOwner"))
+ suite.addTest(BuddyTests("testOwner"))
+ suite.addTest(BuddyTests("testBuddyAppeared"))
addToSuite = staticmethod(addToSuite)
def main():
suite = unittest.TestSuite()
- PSBindingsTestCase.addToSuite(suite)
+ BuddyTests.addToSuite(suite)
runner = unittest.TextTestRunner()
runner.run(suite)