Merge lp:~bjornt/landscape-client/apt-hardy-fixes into lp:~landscape/landscape-client/trunk

Proposed by Björn Tillenius
Status: Merged
Approved by: Free Ekanayaka
Approved revision: 420
Merged at revision: 417
Proposed branch: lp:~bjornt/landscape-client/apt-hardy-fixes
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 238 lines (+85/-9)
7 files modified
landscape/package/facade.py (+14/-1)
landscape/package/taskhandler.py (+3/-3)
landscape/package/tests/test_changer.py (+4/-1)
landscape/package/tests/test_facade.py (+5/-1)
landscape/package/tests/test_reporter.py (+7/-1)
landscape/package/tests/test_skeleton.py (+4/-0)
landscape/package/tests/test_taskhandler.py (+48/-2)
To merge this branch: bzr merge lp:~bjornt/landscape-client/apt-hardy-fixes
Reviewer Review Type Date Requested Status
Free Ekanayaka (community) Approve
Alberto Donato (community) Approve
Review via email: mp+85097@code.launchpad.net

Description of the change

Fix Apt related failures in hardy.

    * Ignore a FutureWarning from the apt module
    * Skip tests using AptFacade on hardy
    * Make hardy always use SmartFacade.

Hardy has a really old version of python-apt, and making AptFacade work
with it isn't trivial. So landscape client will keep using SmartFacade
on hardy.

There are still test failures on hardy, but this branch fixes the Apt
related ones. I'll look at the remaining failures next.

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote :

Looks good, +1!

review: Approve
Revision history for this message
Free Ekanayaka (free.ekanayaka) wrote :

Great, +1!

[1]

+try:
+ from apt.progress.text import AcquireProgress

I take there's no way to introspect the actual version number of the APT package?

review: Approve
Revision history for this message
Björn Tillenius (bjornt) wrote :

On Mon, Dec 12, 2011 at 09:09:23AM -0000, Free Ekanayaka wrote:
> Review: Approve
>
> Great, +1!
>
> [1]
>
> +try:
> + from apt.progress.text import AcquireProgress
>
> I take there's no way to introspect the actual version number of the
> APT package?

Not easily, no. Also, this is generally the pattern for dealing with
different versions.

--
Björn Tillenius | https://launchpad.net/~bjornt

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'landscape/package/facade.py'
2--- landscape/package/facade.py 2011-12-01 13:03:23 +0000
3+++ landscape/package/facade.py 2011-12-09 10:30:30 +0000
4@@ -9,10 +9,23 @@
5
6 import smart
7
8+# Importing apt throws a FutureWarning on hardy, that we don't want to
9+# see.
10+import warnings
11+warnings.filterwarnings("ignore", module="apt", category=FutureWarning)
12+del warnings
13+
14 import apt
15 import apt_inst
16 import apt_pkg
17+
18+has_new_enough_apt = True
19 from aptsources.sourceslist import SourcesList
20+try:
21+ from apt.progress.text import AcquireProgress
22+except ImportError:
23+ AcquireProgress = object
24+ has_new_enough_apt = False
25
26 from landscape.lib.fs import append_file, create_file, read_file
27 from landscape.package.skeleton import build_skeleton, build_skeleton_apt
28@@ -41,7 +54,7 @@
29 """Raised when channels fail to load."""
30
31
32-class LandscapeAcquireProgress(apt.progress.text.AcquireProgress):
33+class LandscapeAcquireProgress(AcquireProgress):
34
35 def _winch(self, *dummy):
36 """Override trying to get the column count of the buffer.
37
38=== modified file 'landscape/package/taskhandler.py'
39--- landscape/package/taskhandler.py 2011-11-15 09:06:01 +0000
40+++ landscape/package/taskhandler.py 2011-12-09 10:30:30 +0000
41@@ -266,11 +266,11 @@
42 package_store = cls.package_store_class(config.store_filename)
43 # Delay importing of the facades so that we don't
44 # import Smart unless we need to.
45- if os.environ.get("USE_APT_FACADE"):
46- from landscape.package.facade import AptFacade
47+ from landscape.package.facade import (
48+ AptFacade, SmartFacade, has_new_enough_apt)
49+ if os.environ.get("USE_APT_FACADE") and has_new_enough_apt:
50 package_facade = AptFacade()
51 else:
52- from landscape.package.facade import SmartFacade
53 package_facade = SmartFacade()
54
55 def finish():
56
57=== modified file 'landscape/package/tests/test_changer.py'
58--- landscape/package/tests/test_changer.py 2011-11-14 13:29:57 +0000
59+++ landscape/package/tests/test_changer.py 2011-12-09 10:30:30 +0000
60@@ -15,7 +15,7 @@
61 POLICY_ALLOW_ALL_CHANGES)
62 from landscape.package.store import PackageStore
63 from landscape.package.facade import (
64- DependencyError, TransactionError, SmartError)
65+ DependencyError, TransactionError, SmartError, has_new_enough_apt)
66 from landscape.package.changer import (
67 PackageChangerConfiguration, ChangePackagesResult)
68 from landscape.tests.mocker import ANY
69@@ -1040,6 +1040,9 @@
70
71 class AptPackageChangerTest(LandscapeTest, PackageChangerTestMixin):
72
73+ if not has_new_enough_apt:
74+ skip = "Can't use AptFacade on hardy"
75+
76 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]
77
78 def setUp(self):
79
80=== modified file 'landscape/package/tests/test_facade.py'
81--- landscape/package/tests/test_facade.py 2011-12-06 15:06:55 +0000
82+++ landscape/package/tests/test_facade.py 2011-12-09 10:30:30 +0000
83@@ -21,7 +21,8 @@
84
85 from landscape.lib.fs import read_file
86 from landscape.package.facade import (
87- TransactionError, DependencyError, ChannelError, SmartError, AptFacade)
88+ TransactionError, DependencyError, ChannelError, SmartError, AptFacade,
89+ has_new_enough_apt)
90
91 from landscape.tests.mocker import ANY
92 from landscape.tests.helpers import LandscapeTest
93@@ -54,6 +55,9 @@
94
95 class AptFacadeTest(LandscapeTest):
96
97+ if not has_new_enough_apt:
98+ skip = "Can't use AptFacade on hardy"
99+
100 helpers = [AptFacadeHelper]
101
102 def version_sortkey(self, version):
103
104=== modified file 'landscape/package/tests/test_reporter.py'
105--- landscape/package/tests/test_reporter.py 2011-12-06 10:53:50 +0000
106+++ landscape/package/tests/test_reporter.py 2011-12-09 10:30:30 +0000
107@@ -17,7 +17,7 @@
108 PackageReporter, HASH_ID_REQUEST_TIMEOUT, main, find_reporter_command,
109 PackageReporterConfiguration, FakeGlobalReporter, FakeReporter)
110 from landscape.package import reporter
111-from landscape.package.facade import AptFacade
112+from landscape.package.facade import AptFacade, has_new_enough_apt
113 from landscape.package.tests.helpers import (
114 SmartFacadeHelper, AptFacadeHelper, SimpleRepositoryHelper,
115 HASH1, HASH2, HASH3, PKGNAME1)
116@@ -1620,6 +1620,9 @@
117
118 class PackageReporterAptTest(LandscapeTest, PackageReporterTestMixin):
119
120+ if not has_new_enough_apt:
121+ skip = "Can't use AptFacade on hardy"
122+
123 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]
124
125 Facade = AptFacade
126@@ -1950,6 +1953,9 @@
127 class GlobalPackageReporterAptTest(LandscapeTest,
128 GlobalPackageReporterTestMixin):
129
130+ if not has_new_enough_apt:
131+ skip = "Can't use AptFacade on hardy"
132+
133 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]
134
135 def setUp(self):
136
137=== modified file 'landscape/package/tests/test_skeleton.py'
138--- landscape/package/tests/test_skeleton.py 2011-10-14 08:38:13 +0000
139+++ landscape/package/tests/test_skeleton.py 2011-12-09 10:30:30 +0000
140@@ -5,6 +5,7 @@
141 from landscape.package.interface import (
142 install_landscape_interface, uninstall_landscape_interface)
143
144+from landscape.package.facade import has_new_enough_apt
145 from landscape.package.skeleton import (
146 build_skeleton, PackageTypeError, build_skeleton_apt, DEB_PROVIDES,
147 DEB_NAME_PROVIDES, DEB_REQUIRES, DEB_OR_REQUIRES, DEB_UPGRADES,
148@@ -287,6 +288,9 @@
149 class SkeletonAptTest(LandscapeTest, SkeletonTestMixin):
150 """C{PackageSkeleton} tests for apt packages."""
151
152+ if not has_new_enough_apt:
153+ skip = "Can't use AptFacade on hardy"
154+
155 helpers = [AptFacadeHelper, SkeletonTestHelper]
156
157 def setUp(self):
158
159=== modified file 'landscape/package/tests/test_taskhandler.py'
160--- landscape/package/tests/test_taskhandler.py 2011-11-17 08:46:12 +0000
161+++ landscape/package/tests/test_taskhandler.py 2011-12-09 10:30:30 +0000
162@@ -9,6 +9,7 @@
163 from landscape.package.taskhandler import (
164 PackageTaskHandlerConfiguration, PackageTaskHandler, run_task_handler,
165 LazyRemoteBroker)
166+from landscape.package import facade as facade_module
167 from landscape.package.facade import AptFacade, SmartFacade
168 from landscape.package.store import HashIdStore, PackageStore
169 from landscape.package.tests.helpers import AptFacadeHelper, SmartFacadeHelper
170@@ -419,14 +420,16 @@
171 result = run_task_handler(HandlerMock, ["-c", self.config_filename])
172 return result.addCallback(assert_task_handler)
173
174- def test_run_task_handler_use_apt_facade(self):
175+ def test_run_task_handler_use_apt_facade_new_apt(self):
176 """
177 The L{run_task_handler} creates an AptFacade instead of
178- SmartFacade, if the USE_APT_FACADE environment variable is set.
179+ SmartFacade, if the USE_APT_FACADE environment variable is set
180+ and C{python-apt} is new enough.
181 """
182
183 HandlerMock, handler_args = self._mock_run_task_handler()
184 os.environ["USE_APT_FACADE"] = "1"
185+ self._set_new_enough_apt(True)
186
187 def assert_task_handler(ignored):
188
189@@ -447,6 +450,49 @@
190 result = run_task_handler(HandlerMock, ["-c", self.config_filename])
191 return result.addCallback(assert_task_handler)
192
193+ def _set_new_enough_apt(self, value):
194+ """Override landscape.package.facade.has_new_enough_apt.
195+
196+ The previous value of that attribute is replaced when the test
197+ is finished.
198+ """
199+
200+ def reset_new_enough_apt():
201+ facade_module.has_new_enough_apt = old_has_new_enough_apt
202+
203+ old_has_new_enough_apt = facade_module.has_new_enough_apt
204+ facade_module.has_new_enough_apt = value
205+ self.addCleanup(reset_new_enough_apt)
206+
207+
208+ def test_run_task_handler_use_apt_facade_old_apt(self):
209+ """
210+ If the C{python-apt} module isn't new enough,
211+ C{run_task_handler} will create a C{SmartFacade}, even when
212+ USE_APT_FACADE is set, since C{AptFacade} doesn't work with old
213+ versions of C{python-apt}.
214+
215+ Hardy has a too old version of C{python-apt}, but lucid and
216+ onwards should have a new enough version.
217+ """
218+
219+ HandlerMock, handler_args = self._mock_run_task_handler()
220+ os.environ["USE_APT_FACADE"] = "1"
221+ self._set_new_enough_apt(False)
222+
223+ def assert_task_handler(ignored):
224+
225+ store, facade, broker, config = handler_args
226+
227+ try:
228+ self.assertEqual(type(facade), SmartFacade)
229+ finally:
230+ # Put reactor back in place before returning.
231+ self.mocker.reset()
232+
233+ result = run_task_handler(HandlerMock, ["-c", self.config_filename])
234+ return result.addCallback(assert_task_handler)
235+
236 def test_run_task_handler_when_already_locked(self):
237
238 lock_path(os.path.join(self.data_path, "package", "default.lock"))

Subscribers

People subscribed via source and target branches

to all changes: