Merge lp:~mvo/software-center/fix-dataprovider-dbus-tests into lp:software-center

Proposed by Michael Vogt
Status: Merged
Merged at revision: 3194
Proposed branch: lp:~mvo/software-center/fix-dataprovider-dbus-tests
Merge into: lp:software-center
Diff against target: 94 lines (+28/-15)
2 files modified
softwarecenter/db/dataprovider.py (+1/-1)
tests/test_dataprovider.py (+27/-14)
To merge this branch: bzr merge lp:~mvo/software-center/fix-dataprovider-dbus-tests
Reviewer Review Type Date Requested Status
Gary Lasker Pending
Review via email: mp+124895@code.launchpad.net

Description of the change

This properly isolates the dbus test for the dataprovider from the
session bus. For the upload of 5.3.14 this test was disabled to get
the upload out quickly but this branch now fixes this properly.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'softwarecenter/db/dataprovider.py'
--- softwarecenter/db/dataprovider.py 2012-09-17 12:42:08 +0000
+++ softwarecenter/db/dataprovider.py 2012-09-18 11:44:21 +0000
@@ -1,4 +1,4 @@
1# Copyright (C) 2009 Canonical1# Copyright (C) 2012 Canonical
2#2#
3# Authors:3# Authors:
4# Michael Vogt4# Michael Vogt
55
=== modified file 'tests/test_dataprovider.py'
--- tests/test_dataprovider.py 2012-09-18 09:21:16 +0000
+++ tests/test_dataprovider.py 2012-09-18 11:44:21 +0000
@@ -1,12 +1,13 @@
11import copy
2import dbus2import dbus
3import os
4import subprocess
3import time5import time
4import unittest6import unittest
57
6from dbus.mainloop.glib import DBusGMainLoop8from dbus.mainloop.glib import DBusGMainLoop
7DBusGMainLoop(set_as_default=True)9DBusGMainLoop(set_as_default=True)
810
9from multiprocessing import Process
10from mock import Mock11from mock import Mock
1112
12from tests.utils import (13from tests.utils import (
@@ -19,40 +20,52 @@
19from softwarecenter.db.application import AppDetails20from softwarecenter.db.application import AppDetails
20from softwarecenter.db.dataprovider import (21from softwarecenter.db.dataprovider import (
21 SoftwareCenterDataProvider,22 SoftwareCenterDataProvider,
22 dbus_main,
23 DBUS_BUS_NAME,23 DBUS_BUS_NAME,
24 DBUS_DATA_PROVIDER_IFACE,24 DBUS_DATA_PROVIDER_IFACE,
25 DBUS_DATA_PROVIDER_PATH,25 DBUS_DATA_PROVIDER_PATH,
26 )26 )
2727
2828
29def start_data_provider_daemon(dbus_address):
30 """Start the dbus data provider as a subprocess"""
31 os.environ["DBUS_SESSION_BUS_ADDRESS"] = dbus_address
32 testdir = os.path.dirname(__file__)
33 basedir = os.path.abspath(os.path.join(testdir, ".."))
34 data_provider_bin = os.path.join(basedir, "software-center-dbus")
35 stderr = open(os.devnull, "w")
36 # uncomment this for a flurry of debug output
37 #stderr = None
38 # this is more reliable than e.g. threading.Thead or multiprocess.Process
39 p = subprocess.Popen([data_provider_bin], stderr=stderr)
40 return p
41
42
29class DbusForRealTestCase(unittest.TestCase):43class DbusForRealTestCase(unittest.TestCase):
30 """Test the dataprovider over a real dbus bus"""44 """Test the dataprovider over a real dbus bus"""
3145
32 @classmethod46 @classmethod
33 def setUpClass(cls):47 def setUpClass(cls):
34 cls.p = Process(target=dbus_main)48 cls.dbus_daemon_proc, dbus_address = start_dbus_daemon()
35 cls.p.start()49 cls.bus = dbus.bus.BusConnection(dbus_address)
50 cls.data_provider_proc = start_data_provider_daemon(dbus_address)
36 time.sleep(1)51 time.sleep(1)
3752
38 @classmethod53 @classmethod
39 def tearDownClass(cls):54 def tearDownClass(cls):
40 print "down"55 kill_process(cls.data_provider_proc)
41 cls.p.terminate()56 kill_process(cls.dbus_daemon_proc)
42 cls.p.join()
4357
44 def setUp(self):58 def setUp(self):
45 bus = dbus.SessionBus()59 obj = self.bus.get_object(bus_name=DBUS_BUS_NAME,
46 obj = bus.get_object(bus_name=DBUS_BUS_NAME,
47 object_path=DBUS_DATA_PROVIDER_PATH,60 object_path=DBUS_DATA_PROVIDER_PATH,
48 follow_name_owner_changes=True)61 follow_name_owner_changes=True)
49 self.proxy = dbus.Interface(object=obj,62 self.proxy = dbus.Interface(object=obj,
50 dbus_interface=DBUS_DATA_PROVIDER_IFACE)63 dbus_interface=DBUS_DATA_PROVIDER_IFACE)
5164
52 @unittest.skip("not reliable yet")65 def test_dbus_on_real_bus(self):
53 def test_dbus_for_real(self):66 result = self.proxy.GetAppDetails("", "gimp")
54 result = self.proxy.GetAppDetails("", "gedit")67 self.assertEqual(result["pkgname"], "gimp")
55 self.assertEqual(result["pkgname"], "gedit")68 self.assertEqual(result["icon"], "gimp")
5669
5770
58class PropertyDictExceptionsTestCase(unittest.TestCase):71class PropertyDictExceptionsTestCase(unittest.TestCase):

Subscribers

People subscribed via source and target branches