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
=== modified file 'landscape/package/facade.py'
--- landscape/package/facade.py 2011-12-01 13:03:23 +0000
+++ landscape/package/facade.py 2011-12-09 10:30:30 +0000
@@ -9,10 +9,23 @@
99
10import smart10import smart
1111
12# Importing apt throws a FutureWarning on hardy, that we don't want to
13# see.
14import warnings
15warnings.filterwarnings("ignore", module="apt", category=FutureWarning)
16del warnings
17
12import apt18import apt
13import apt_inst19import apt_inst
14import apt_pkg20import apt_pkg
21
22has_new_enough_apt = True
15from aptsources.sourceslist import SourcesList23from aptsources.sourceslist import SourcesList
24try:
25 from apt.progress.text import AcquireProgress
26except ImportError:
27 AcquireProgress = object
28 has_new_enough_apt = False
1629
17from landscape.lib.fs import append_file, create_file, read_file30from landscape.lib.fs import append_file, create_file, read_file
18from landscape.package.skeleton import build_skeleton, build_skeleton_apt31from landscape.package.skeleton import build_skeleton, build_skeleton_apt
@@ -41,7 +54,7 @@
41 """Raised when channels fail to load."""54 """Raised when channels fail to load."""
4255
4356
44class LandscapeAcquireProgress(apt.progress.text.AcquireProgress):57class LandscapeAcquireProgress(AcquireProgress):
4558
46 def _winch(self, *dummy):59 def _winch(self, *dummy):
47 """Override trying to get the column count of the buffer.60 """Override trying to get the column count of the buffer.
4861
=== modified file 'landscape/package/taskhandler.py'
--- landscape/package/taskhandler.py 2011-11-15 09:06:01 +0000
+++ landscape/package/taskhandler.py 2011-12-09 10:30:30 +0000
@@ -266,11 +266,11 @@
266 package_store = cls.package_store_class(config.store_filename)266 package_store = cls.package_store_class(config.store_filename)
267 # Delay importing of the facades so that we don't267 # Delay importing of the facades so that we don't
268 # import Smart unless we need to.268 # import Smart unless we need to.
269 if os.environ.get("USE_APT_FACADE"):269 from landscape.package.facade import (
270 from landscape.package.facade import AptFacade270 AptFacade, SmartFacade, has_new_enough_apt)
271 if os.environ.get("USE_APT_FACADE") and has_new_enough_apt:
271 package_facade = AptFacade()272 package_facade = AptFacade()
272 else:273 else:
273 from landscape.package.facade import SmartFacade
274 package_facade = SmartFacade()274 package_facade = SmartFacade()
275275
276 def finish():276 def finish():
277277
=== modified file 'landscape/package/tests/test_changer.py'
--- landscape/package/tests/test_changer.py 2011-11-14 13:29:57 +0000
+++ landscape/package/tests/test_changer.py 2011-12-09 10:30:30 +0000
@@ -15,7 +15,7 @@
15 POLICY_ALLOW_ALL_CHANGES)15 POLICY_ALLOW_ALL_CHANGES)
16from landscape.package.store import PackageStore16from landscape.package.store import PackageStore
17from landscape.package.facade import (17from landscape.package.facade import (
18 DependencyError, TransactionError, SmartError)18 DependencyError, TransactionError, SmartError, has_new_enough_apt)
19from landscape.package.changer import (19from landscape.package.changer import (
20 PackageChangerConfiguration, ChangePackagesResult)20 PackageChangerConfiguration, ChangePackagesResult)
21from landscape.tests.mocker import ANY21from landscape.tests.mocker import ANY
@@ -1040,6 +1040,9 @@
10401040
1041class AptPackageChangerTest(LandscapeTest, PackageChangerTestMixin):1041class AptPackageChangerTest(LandscapeTest, PackageChangerTestMixin):
10421042
1043 if not has_new_enough_apt:
1044 skip = "Can't use AptFacade on hardy"
1045
1043 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]1046 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]
10441047
1045 def setUp(self):1048 def setUp(self):
10461049
=== modified file 'landscape/package/tests/test_facade.py'
--- landscape/package/tests/test_facade.py 2011-12-06 15:06:55 +0000
+++ landscape/package/tests/test_facade.py 2011-12-09 10:30:30 +0000
@@ -21,7 +21,8 @@
2121
22from landscape.lib.fs import read_file22from landscape.lib.fs import read_file
23from landscape.package.facade import (23from landscape.package.facade import (
24 TransactionError, DependencyError, ChannelError, SmartError, AptFacade)24 TransactionError, DependencyError, ChannelError, SmartError, AptFacade,
25 has_new_enough_apt)
2526
26from landscape.tests.mocker import ANY27from landscape.tests.mocker import ANY
27from landscape.tests.helpers import LandscapeTest28from landscape.tests.helpers import LandscapeTest
@@ -54,6 +55,9 @@
5455
55class AptFacadeTest(LandscapeTest):56class AptFacadeTest(LandscapeTest):
5657
58 if not has_new_enough_apt:
59 skip = "Can't use AptFacade on hardy"
60
57 helpers = [AptFacadeHelper]61 helpers = [AptFacadeHelper]
5862
59 def version_sortkey(self, version):63 def version_sortkey(self, version):
6064
=== modified file 'landscape/package/tests/test_reporter.py'
--- landscape/package/tests/test_reporter.py 2011-12-06 10:53:50 +0000
+++ landscape/package/tests/test_reporter.py 2011-12-09 10:30:30 +0000
@@ -17,7 +17,7 @@
17 PackageReporter, HASH_ID_REQUEST_TIMEOUT, main, find_reporter_command,17 PackageReporter, HASH_ID_REQUEST_TIMEOUT, main, find_reporter_command,
18 PackageReporterConfiguration, FakeGlobalReporter, FakeReporter)18 PackageReporterConfiguration, FakeGlobalReporter, FakeReporter)
19from landscape.package import reporter19from landscape.package import reporter
20from landscape.package.facade import AptFacade20from landscape.package.facade import AptFacade, has_new_enough_apt
21from landscape.package.tests.helpers import (21from landscape.package.tests.helpers import (
22 SmartFacadeHelper, AptFacadeHelper, SimpleRepositoryHelper,22 SmartFacadeHelper, AptFacadeHelper, SimpleRepositoryHelper,
23 HASH1, HASH2, HASH3, PKGNAME1)23 HASH1, HASH2, HASH3, PKGNAME1)
@@ -1620,6 +1620,9 @@
16201620
1621class PackageReporterAptTest(LandscapeTest, PackageReporterTestMixin):1621class PackageReporterAptTest(LandscapeTest, PackageReporterTestMixin):
16221622
1623 if not has_new_enough_apt:
1624 skip = "Can't use AptFacade on hardy"
1625
1623 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]1626 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]
16241627
1625 Facade = AptFacade1628 Facade = AptFacade
@@ -1950,6 +1953,9 @@
1950class GlobalPackageReporterAptTest(LandscapeTest,1953class GlobalPackageReporterAptTest(LandscapeTest,
1951 GlobalPackageReporterTestMixin):1954 GlobalPackageReporterTestMixin):
19521955
1956 if not has_new_enough_apt:
1957 skip = "Can't use AptFacade on hardy"
1958
1953 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]1959 helpers = [AptFacadeHelper, SimpleRepositoryHelper, BrokerServiceHelper]
19541960
1955 def setUp(self):1961 def setUp(self):
19561962
=== modified file 'landscape/package/tests/test_skeleton.py'
--- landscape/package/tests/test_skeleton.py 2011-10-14 08:38:13 +0000
+++ landscape/package/tests/test_skeleton.py 2011-12-09 10:30:30 +0000
@@ -5,6 +5,7 @@
5from landscape.package.interface import (5from landscape.package.interface import (
6 install_landscape_interface, uninstall_landscape_interface)6 install_landscape_interface, uninstall_landscape_interface)
77
8from landscape.package.facade import has_new_enough_apt
8from landscape.package.skeleton import (9from landscape.package.skeleton import (
9 build_skeleton, PackageTypeError, build_skeleton_apt, DEB_PROVIDES,10 build_skeleton, PackageTypeError, build_skeleton_apt, DEB_PROVIDES,
10 DEB_NAME_PROVIDES, DEB_REQUIRES, DEB_OR_REQUIRES, DEB_UPGRADES,11 DEB_NAME_PROVIDES, DEB_REQUIRES, DEB_OR_REQUIRES, DEB_UPGRADES,
@@ -287,6 +288,9 @@
287class SkeletonAptTest(LandscapeTest, SkeletonTestMixin):288class SkeletonAptTest(LandscapeTest, SkeletonTestMixin):
288 """C{PackageSkeleton} tests for apt packages."""289 """C{PackageSkeleton} tests for apt packages."""
289290
291 if not has_new_enough_apt:
292 skip = "Can't use AptFacade on hardy"
293
290 helpers = [AptFacadeHelper, SkeletonTestHelper]294 helpers = [AptFacadeHelper, SkeletonTestHelper]
291295
292 def setUp(self):296 def setUp(self):
293297
=== modified file 'landscape/package/tests/test_taskhandler.py'
--- landscape/package/tests/test_taskhandler.py 2011-11-17 08:46:12 +0000
+++ landscape/package/tests/test_taskhandler.py 2011-12-09 10:30:30 +0000
@@ -9,6 +9,7 @@
9from landscape.package.taskhandler import (9from landscape.package.taskhandler import (
10 PackageTaskHandlerConfiguration, PackageTaskHandler, run_task_handler,10 PackageTaskHandlerConfiguration, PackageTaskHandler, run_task_handler,
11 LazyRemoteBroker)11 LazyRemoteBroker)
12from landscape.package import facade as facade_module
12from landscape.package.facade import AptFacade, SmartFacade13from landscape.package.facade import AptFacade, SmartFacade
13from landscape.package.store import HashIdStore, PackageStore14from landscape.package.store import HashIdStore, PackageStore
14from landscape.package.tests.helpers import AptFacadeHelper, SmartFacadeHelper15from landscape.package.tests.helpers import AptFacadeHelper, SmartFacadeHelper
@@ -419,14 +420,16 @@
419 result = run_task_handler(HandlerMock, ["-c", self.config_filename])420 result = run_task_handler(HandlerMock, ["-c", self.config_filename])
420 return result.addCallback(assert_task_handler)421 return result.addCallback(assert_task_handler)
421422
422 def test_run_task_handler_use_apt_facade(self):423 def test_run_task_handler_use_apt_facade_new_apt(self):
423 """424 """
424 The L{run_task_handler} creates an AptFacade instead of425 The L{run_task_handler} creates an AptFacade instead of
425 SmartFacade, if the USE_APT_FACADE environment variable is set.426 SmartFacade, if the USE_APT_FACADE environment variable is set
427 and C{python-apt} is new enough.
426 """428 """
427429
428 HandlerMock, handler_args = self._mock_run_task_handler()430 HandlerMock, handler_args = self._mock_run_task_handler()
429 os.environ["USE_APT_FACADE"] = "1"431 os.environ["USE_APT_FACADE"] = "1"
432 self._set_new_enough_apt(True)
430433
431 def assert_task_handler(ignored):434 def assert_task_handler(ignored):
432435
@@ -447,6 +450,49 @@
447 result = run_task_handler(HandlerMock, ["-c", self.config_filename])450 result = run_task_handler(HandlerMock, ["-c", self.config_filename])
448 return result.addCallback(assert_task_handler)451 return result.addCallback(assert_task_handler)
449452
453 def _set_new_enough_apt(self, value):
454 """Override landscape.package.facade.has_new_enough_apt.
455
456 The previous value of that attribute is replaced when the test
457 is finished.
458 """
459
460 def reset_new_enough_apt():
461 facade_module.has_new_enough_apt = old_has_new_enough_apt
462
463 old_has_new_enough_apt = facade_module.has_new_enough_apt
464 facade_module.has_new_enough_apt = value
465 self.addCleanup(reset_new_enough_apt)
466
467
468 def test_run_task_handler_use_apt_facade_old_apt(self):
469 """
470 If the C{python-apt} module isn't new enough,
471 C{run_task_handler} will create a C{SmartFacade}, even when
472 USE_APT_FACADE is set, since C{AptFacade} doesn't work with old
473 versions of C{python-apt}.
474
475 Hardy has a too old version of C{python-apt}, but lucid and
476 onwards should have a new enough version.
477 """
478
479 HandlerMock, handler_args = self._mock_run_task_handler()
480 os.environ["USE_APT_FACADE"] = "1"
481 self._set_new_enough_apt(False)
482
483 def assert_task_handler(ignored):
484
485 store, facade, broker, config = handler_args
486
487 try:
488 self.assertEqual(type(facade), SmartFacade)
489 finally:
490 # Put reactor back in place before returning.
491 self.mocker.reset()
492
493 result = run_task_handler(HandlerMock, ["-c", self.config_filename])
494 return result.addCallback(assert_task_handler)
495
450 def test_run_task_handler_when_already_locked(self):496 def test_run_task_handler_when_already_locked(self):
451497
452 lock_path(os.path.join(self.data_path, "package", "default.lock"))498 lock_path(os.path.join(self.data_path, "package", "default.lock"))

Subscribers

People subscribed via source and target branches

to all changes: