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)
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)
26
26
class SmartFacadeTest(LandscapeTest):
420
420
self.assertEquals(self.facade.get_channels(), dict(channels))
422
def test_make_channels(self):
424
channel0 = make_apt_deb_channel("http://my.url/dir", "hardy", "main")
425
channel1 = make_deb_dir_channel("/my/repo")
427
self.assertEquals(channel0, {"baseurl": "http://my.url/dir",
428
"distribution": "hardy",
429
"components": "main",
432
self.assertEquals(channel1, {"path": "/my/repo",
422
def test_add_apt_deb_channel(self):
424
The L{SmartFacade.add_channel_apt_deb} add a Smart channel of
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",
435
def test_add_deb_dir_channel(self):
437
The L{SmartFacade.add_channel_deb_dir} add a Smart channel of
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",
435
446
def test_get_arch(self):
453
464
def test_set_arch_multiple_times(self):
455
repository_dir = os.path.join(os.path.dirname(__file__), "repository")
458
channel = {"baseurl": "file://%s" % repository_dir,
459
"distribution": "hardy",
460
"components": "main",
466
repo = create_full_repository(self.makeDir())
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,
466
472
self.facade.reload_channels()
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")
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,
476
484
self.facade.reload_channels()
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")
482
491
def test_set_caching_with_reload_error(self):
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)
518
def test_get_package_locks_with_no_lock(self):
520
If no package locks are set, L{SmartFacade.get_package_locks} returns
523
self.assertEquals(self.facade.get_package_locks(), [])
525
def test_get_package_locks_with_one_lock(self):
527
If one lock is set, the list of locks contains one item.
529
self.facade.set_package_lock("name1", "<", "version1")
530
self.assertEquals(self.facade.get_package_locks(),
531
[("name1", "<", "version1")])
533
def test_get_package_locks_with_many_locks(self):
535
It's possible to have more than one package lock and several conditions
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"),
546
def test_set_package_lock(self):
548
It is possible to lock a package by simply specifying its name.
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")
555
def test_set_package_lock_with_matching_condition(self):
557
It is possible to set a package lock specifying both a
558
package name and version condition. Any matching package
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")
566
def test_set_package_lock_with_non_matching_condition(self):
568
If the package lock conditions do not match any package,
569
no package will be locked.
571
self.facade.set_package_lock("name1", "<", "version1")
572
self.facade.reload_channels()
573
self.assertEquals(self.facade.get_locked_packages(), [])
575
def test_set_package_lock_with_missing_version(self):
577
When specifing a relation for a package lock condition, a version
578
must be provided as well.
580
error = self.assertRaises(RuntimeError, self.facade.set_package_lock,
582
self.assertEquals(str(error), "Package lock version not provided")
584
def test_set_package_lock_with_missing_relation(self):
586
When specifing a version for a package lock condition, a relation
587
must be provided as well.
589
error = self.assertRaises(RuntimeError, self.facade.set_package_lock,
590
"name1", "", "version1")
591
self.assertEquals(str(error), "Package lock relation not provided")
593
def test_remove_package_lock(self):
595
It is possibly to remove a package lock without any version condition.
597
self.facade.set_package_lock("name1")
598
self.facade.remove_package_lock("name1")
599
self.assertEquals(self.facade.get_locked_packages(), [])
601
def test_remove_package_lock_with_condition(self):
603
It is possibly to remove a package lock with a version condition.
605
self.facade.set_package_lock("name1", "<", "version1")
606
self.facade.remove_package_lock("name1", "<", "version1")
607
self.assertEquals(self.facade.get_locked_packages(), [])