~free.ekanayaka/landscape-client/lucid-1.4.4-0ubuntu0.10.04

« back to all changes in this revision

Viewing changes to landscape/package/tests/test_facade.py

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2009-12-16 10:50:05 UTC
  • mfrom: (1.1.12 upstream)
  • Revision ID: james.westby@ubuntu.com-20091216105005-svplwdorkgz6vja7
Tags: 1.4.0-0ubuntu0.10.04.0
* New upstream release with several bug fixes:
  - Fix landscape daemons fail to start when too many groups are
    available (LP: #456124)
  - Fix landscape programs wake up far too much. (LP: #340843)
  - Fix Package manager fails with 'no such table: task' (LP #465846)
  - Fix test suite leaving temporary files around (LP #476418)
  - Fix the 1hr long wait for user data to be uploaded following a
    resynchronisation (LP #369000)

* Add support for Ubuntu release upgrades:
  - Add helper function to fetch many files at once (LP: #450629)
  - Handle release-upgrade messages in the packagemanager
    plugin (LP: #455217)
  - Add a release-upgrader task handler (LP: #462543)
  - Support upgrade-tool environment variables (LP: #463321)

* Add initial support for Smart package locking:
  - Detect and report changes about Smart package locks (#488108)

* Packaging fixes:
  - Turn unnecessary Pre-Depends on python-gobject into a regular Depends
  - If it's empty, remove /etc/landscape upon purge

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
import smart
15
15
 
16
16
from landscape.package.facade import (
17
 
    TransactionError, DependencyError, ChannelError, SmartError,
18
 
    make_apt_deb_channel, make_deb_dir_channel)
 
17
    TransactionError, DependencyError, ChannelError, SmartError)
19
18
 
20
19
from landscape.tests.mocker import ANY
21
20
from landscape.tests.helpers import LandscapeTest
22
21
from landscape.package.tests.helpers import (
23
 
    SmartFacadeHelper, HASH1, HASH2, HASH3, PKGNAME1)
 
22
    SmartFacadeHelper, HASH1, HASH2, HASH3, PKGNAME1,
 
23
    create_full_repository)
24
24
 
25
25
 
26
26
class SmartFacadeTest(LandscapeTest):
419
419
 
420
420
        self.assertEquals(self.facade.get_channels(), dict(channels))
421
421
 
422
 
    def test_make_channels(self):
423
 
 
424
 
        channel0 = make_apt_deb_channel("http://my.url/dir", "hardy", "main")
425
 
        channel1 = make_deb_dir_channel("/my/repo")
426
 
 
427
 
        self.assertEquals(channel0, {"baseurl": "http://my.url/dir",
428
 
                                     "distribution": "hardy",
429
 
                                     "components": "main",
430
 
                                     "type": "apt-deb"})
431
 
 
432
 
        self.assertEquals(channel1, {"path": "/my/repo",
433
 
                                     "type": "deb-dir"})
 
422
    def test_add_apt_deb_channel(self):
 
423
        """
 
424
        The L{SmartFacade.add_channel_apt_deb} add a Smart channel of
 
425
        type C{"apt-deb"}.
 
426
        """
 
427
        self.facade.reset_channels()
 
428
        self.facade.add_channel_apt_deb("http://url/", "name", "component")
 
429
        self.assertEquals(self.facade.get_channels(),
 
430
                          {"name": {"baseurl": "http://url/",
 
431
                                        "distribution": "name",
 
432
                                        "components": "component",
 
433
                                        "type": "apt-deb"}})
 
434
 
 
435
    def test_add_deb_dir_channel(self):
 
436
        """
 
437
        The L{SmartFacade.add_channel_deb_dir} add a Smart channel of
 
438
        type C{"deb-dir"}.
 
439
        """
 
440
        self.facade.reset_channels()
 
441
        self.facade.add_channel_deb_dir("/my/repo")
 
442
        self.assertEquals(self.facade.get_channels(),
 
443
                          {"/my/repo": {"path": "/my/repo",
 
444
                                        "type": "deb-dir"}})
434
445
 
435
446
    def test_get_arch(self):
436
447
        """
452
463
 
453
464
    def test_set_arch_multiple_times(self):
454
465
 
455
 
        repository_dir = os.path.join(os.path.dirname(__file__), "repository")
456
 
 
457
 
        alias = "alias"
458
 
        channel = {"baseurl": "file://%s" % repository_dir,
459
 
                   "distribution": "hardy",
460
 
                   "components": "main",
461
 
                   "type": "apt-deb"}
 
466
        repo = create_full_repository(self.makeDir())
462
467
 
463
468
        self.facade.set_arch("i386")
464
469
        self.facade.reset_channels()
465
 
        self.facade.add_channel(alias, channel)
 
470
        self.facade.add_channel_apt_deb(repo.url, repo.codename,
 
471
                                        repo.components)
466
472
        self.facade.reload_channels()
467
473
 
468
474
        pkgs = self.facade.get_packages()
469
 
        self.assertEquals(len(pkgs), 1)
 
475
        self.assertEquals(len(pkgs), 2)
470
476
        self.assertEquals(pkgs[0].name, "syslinux")
 
477
        self.assertEquals(pkgs[1].name, "kairos")
471
478
 
472
479
        self.facade.deinit()
473
480
        self.facade.set_arch("amd64")
474
481
        self.facade.reset_channels()
475
 
        self.facade.add_channel(alias, channel)
 
482
        self.facade.add_channel_apt_deb(repo.url, repo.codename,
 
483
                                        repo.components)
476
484
        self.facade.reload_channels()
477
485
 
478
486
        pkgs = self.facade.get_packages()
479
 
        self.assertEquals(len(pkgs), 1)
 
487
        self.assertEquals(len(pkgs), 2)
480
488
        self.assertEquals(pkgs[0].name, "libclthreads2")
 
489
        self.assertEquals(pkgs[1].name, "kairos")
481
490
 
482
491
    def test_set_caching_with_reload_error(self):
483
492
 
505
514
        self.facade.reload_channels()
506
515
        self.assertTrue(smart.sysconf.get("use-landscape-proxies"))
507
516
        self.assertIn("smart.plugins.landscape", sys.modules)
 
517
 
 
518
    def test_get_package_locks_with_no_lock(self):
 
519
        """
 
520
        If no package locks are set, L{SmartFacade.get_package_locks} returns
 
521
        an empty C{list}.
 
522
        """
 
523
        self.assertEquals(self.facade.get_package_locks(), [])
 
524
 
 
525
    def test_get_package_locks_with_one_lock(self):
 
526
        """
 
527
        If one lock is set, the list of locks contains one item.
 
528
        """
 
529
        self.facade.set_package_lock("name1", "<", "version1")
 
530
        self.assertEquals(self.facade.get_package_locks(),
 
531
                          [("name1", "<", "version1")])
 
532
 
 
533
    def test_get_package_locks_with_many_locks(self):
 
534
        """
 
535
        It's possible to have more than one package lock and several conditions
 
536
        for each of them.
 
537
        """
 
538
        self.facade.set_package_lock("name1", "<", "version1")
 
539
        self.facade.set_package_lock("name1", ">=", "version3")
 
540
        self.facade.set_package_lock("name2")
 
541
        self.assertEquals(sorted(self.facade.get_package_locks()),
 
542
                          sorted([("name1", "<", "version1"),
 
543
                                  ("name1", ">=", "version3"),
 
544
                                  ("name2", "", "")]))
 
545
 
 
546
    def test_set_package_lock(self):
 
547
        """
 
548
        It is possible to lock a package by simply specifying its name.
 
549
        """
 
550
        self.facade.set_package_lock("name1")
 
551
        self.facade.reload_channels()
 
552
        [package] = self.facade.get_locked_packages()
 
553
        self.assertEquals(package.name, "name1")
 
554
 
 
555
    def test_set_package_lock_with_matching_condition(self):
 
556
        """
 
557
        It is possible to set a package lock specifying both a
 
558
        package name and version condition. Any matching package
 
559
        will be locked.
 
560
        """
 
561
        self.facade.set_package_lock("name1", "<", "version2")
 
562
        self.facade.reload_channels()
 
563
        [package] = self.facade.get_locked_packages()
 
564
        self.assertEquals(package.name, "name1")
 
565
 
 
566
    def test_set_package_lock_with_non_matching_condition(self):
 
567
        """
 
568
        If the package lock conditions do not match any package,
 
569
        no package will be locked.
 
570
        """
 
571
        self.facade.set_package_lock("name1", "<", "version1")
 
572
        self.facade.reload_channels()
 
573
        self.assertEquals(self.facade.get_locked_packages(), [])
 
574
 
 
575
    def test_set_package_lock_with_missing_version(self):
 
576
        """
 
577
        When specifing a relation for a package lock condition, a version
 
578
        must be provided as well.
 
579
        """
 
580
        error = self.assertRaises(RuntimeError, self.facade.set_package_lock,
 
581
                                  "name1", "<", "")
 
582
        self.assertEquals(str(error), "Package lock version not provided")
 
583
 
 
584
    def test_set_package_lock_with_missing_relation(self):
 
585
        """
 
586
        When specifing a version for a package lock condition, a relation
 
587
        must be provided as well.
 
588
        """
 
589
        error = self.assertRaises(RuntimeError, self.facade.set_package_lock,
 
590
                                  "name1", "", "version1")
 
591
        self.assertEquals(str(error), "Package lock relation not provided")
 
592
 
 
593
    def test_remove_package_lock(self):
 
594
        """
 
595
        It is possibly to remove a package lock without any version condition.
 
596
        """
 
597
        self.facade.set_package_lock("name1")
 
598
        self.facade.remove_package_lock("name1")
 
599
        self.assertEquals(self.facade.get_locked_packages(), [])
 
600
 
 
601
    def test_remove_package_lock_with_condition(self):
 
602
        """
 
603
        It is possibly to remove a package lock with a version condition.
 
604
        """
 
605
        self.facade.set_package_lock("name1", "<", "version1")
 
606
        self.facade.remove_package_lock("name1", "<", "version1")
 
607
        self.assertEquals(self.facade.get_locked_packages(), [])