Hi!
I've played a bit with the depsolving test cases. Patch is not ready for
acceptance yet - but may be someone is interested in having a look on it...
Expect final patch set the following days.
Have fun
Florian
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 11c7fc3..f2b9c8c 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -1,17 +1,19 @@
import unittest
import settestpath
-from yum import depsolve
+from yum import YumBase
from yum import transactioninfo
from yum import packages
from yum import packageSack
-
+from yum.config import YumConf
class FakeConf(object):
def __init__(self):
self.installonlypkgs = []
-
+ self.exclude = []
+ self.debuglevel = 0
+ self.obsoletes = True
class FakeRepo(object):
@@ -21,7 +23,7 @@ class FakeRepo(object):
class FakePackage(packages.PackageObject, packages.RpmBase):
- def __init__(self, name, version, release, epoch, arch):
+ def __init__(self, name, version='1', release='1', epoch='0', arch='noarch'):
packages.PackageObject.__init__(self)
packages.RpmBase.__init__(self)
@@ -33,7 +35,7 @@ class FakePackage(packages.PackageObject, packages.RpmBase):
self.epoch = epoch
self.arch = arch
- self.prco['provides'].append((name, '=', (epoch, version, release)))
+ self.prco['provides'].append((name, 'EQ', (epoch, version, release)))
self.repo = FakeRepo()
self.repoid = None
@@ -41,16 +43,27 @@ class FakePackage(packages.PackageObject, packages.RpmBase):
# Just a unique integer
self.id = self.__hash__()
- def addRequires(self, name, flag, evr):
+ def addRequires(self, name, flag=None, evr=(None, None, None)):
self.prco['requires'].append((name, flag, evr))
+ def addProvides(self, name, flag=None, evr=(None, None, None)):
+ self.prco['provides'].append((name, flag, evr))
+
+ def addObsoletes(self, name, flag=None, evr=(None, None, None)):
+ self.prco['obsoletes'].append((name, flag, evr))
+
+ def addConflicts(self, name, flag=None, evr=(None, None, None)):
+ self.prco['conflicts'].append((name, flag, evr))
+
+ def addFile(self, name, ftype='file'):
+ self.files[ftype].append(name)
-class TestingDepsolve(depsolve.Depsolve):
+class TestingDepsolve(YumBase):
def __init__(self, tsInfo, rpmdb, pkgSack):
- depsolve.Depsolve.__init__(self)
+ YumBase.__init__(self)
- self.conf = FakeConf()
+ self.conf = YumConf()
self.tsInfo = tsInfo
self._tsInfo = tsInfo
self.rpmdb = rpmdb
@@ -61,8 +74,12 @@ class TestingDepsolve(depsolve.Depsolve):
pkgtup[4], pkgtup[1])[0]
-def build_depsolver(tsInfo, rpmdb=packageSack.PackageSack(),
- pkgSack=packageSack.PackageSack()):
+def build_depsolver(tsInfo, rpmdb=None, pkgSack=None):
+ if rpmdb is None:
+ rpmdb = packageSack.PackageSack()
+ if pkgSack is None:
+ pkgSack=packageSack.PackageSack()
+
# XXX this side-affect is hacky:
tsInfo.setDatabases(rpmdb, pkgSack)
@@ -71,6 +88,9 @@ def build_depsolver(tsInfo, rpmdb=packageSack.PackageSack(),
class DepsolveTests(unittest.TestCase):
+ """ TODO:
+
+ """
def testInstallSinglePackageNoRequires(self):
po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -81,7 +101,7 @@ class DepsolveTests(unittest.TestCase):
solver = build_depsolver(tsInfo)
res = solver.resolveDeps()
- self.assertEquals(2, res[0])
+ self.assertEquals(2, res[0], "Resolving failed")
def testInstallSinglePackageRequireNotProvided(self):
po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -93,7 +113,7 @@ class DepsolveTests(unittest.TestCase):
solver = build_depsolver(tsInfo)
res = solver.resolveDeps()
- self.assertEquals(1, res[0])
+ self.assertEquals(1, res[0], "Resolving didn't report an error")
def testInstallSinglePackageRequireInstalled(self):
po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -109,8 +129,145 @@ class DepsolveTests(unittest.TestCase):
solver = build_depsolver(tsInfo, rpmdb)
res = solver.resolveDeps()
- self.assertEquals(2, res[0])
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(po.pkgtup), "Package not installed")
+
+ def testUpdateForDependency(self):
+ po = FakePackage('zsh', '1', '1', '0', 'i386')
+ po.addRequires('zip', 'EQ', ('0', '2', '1'))
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+ rpmdb = packageSack.PackageSack()
+ rpmdb.addPackage(installedpo)
+
+ updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+ pkgSack = packageSack.PackageSack()
+ pkgSack.addPackage(updatepo)
+
+ solver = build_depsolver(tsInfo, rpmdb, pkgSack)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(po.pkgtup), "Package not installed")
+
+ def testUpdateSplitPackage(self):
+ po = FakePackage('zsh', '1', '1', '0', 'i386')
+ po.addRequires('libzip', 'EQ', ('0', '2', '1'))
+
+ tsInfo = transactioninfo.TransactionData()
+
+ installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+ installedpo.addProvides('libzip', 'EQ', ('0', '1', '1'))
+ rpmdb = packageSack.PackageSack()
+ rpmdb.addPackage(installedpo)
+
+ pkgSack = packageSack.PackageSack()
+
+ updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+ updatepo.addRequires('zip-libs', 'EQ', ('0', '2', '1'))
+ pkgSack.addPackage(updatepo)
+ updatepo = FakePackage('zip-libs', '2', '1', '0', 'i386')
+ updatepo.addProvides('libzip', 'EQ', ('0', '2', '1'))
+ pkgSack.addPackage(updatepo)
+
+ tsInfo.addInstall(po)
+ solver = build_depsolver(tsInfo, rpmdb, pkgSack)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(po.pkgtup), "Package not installed")
+
+ def testUpdateForConflict(self):
+ po = FakePackage('zsh', '1', '1', '0', 'i386')
+ po.addConflicts('zip', 'LE', ('0', '1', '1'))
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+ rpmdb = packageSack.PackageSack()
+ rpmdb.addPackage(installedpo)
+
+ updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+ pkgSack = packageSack.PackageSack()
+ pkgSack.addPackage(updatepo)
+
+ solver = build_depsolver(tsInfo, rpmdb, pkgSack)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+ def testUpdateForConflict2(self):
+ po = FakePackage('zsh', '1', '1', '0', 'i386')
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+ installedpo.addConflicts('zsh', 'LE', ('0', '1', '1'))
+ rpmdb = packageSack.PackageSack()
+ rpmdb.addPackage(installedpo)
+
+ updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+ pkgSack = packageSack.PackageSack()
+ pkgSack.addPackage(updatepo)
+
+ solver = build_depsolver(tsInfo, rpmdb, pkgSack)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+
+ def testUpdateForConflictProvide(self):
+ po = FakePackage('zsh', '1', '1', '0', 'i386')
+ po.addConflicts('zippy', 'LE', ('0', '1', '1'))
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+ installedpo.addProvides('zippy', 'EQ', ('0', '1', '1'))
+ rpmdb = packageSack.PackageSack()
+ rpmdb.addPackage(installedpo)
+
+ updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+ pkgSack = packageSack.PackageSack()
+ pkgSack.addPackage(updatepo)
+
+ solver = build_depsolver(tsInfo, rpmdb, pkgSack)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+
+ def testUpdateForConflictProvide2(self):
+ po = FakePackage('zsh', '1', '1', '0', 'i386')
+ po.addProvides('zippy', 'EQ', ('0', '2', '1'))
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+ installedpo.addConflicts('zippy', 'GT', ('0', '1', '1'))
+ installedpo.addConflicts('zippy', 'LT', ('0', '1', '1'))
+ rpmdb = packageSack.PackageSack()
+ rpmdb.addPackage(installedpo)
+
+ updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+ updatepo.addConflicts('zippy', 'GT', ('0', '2', '1'))
+ updatepo.addConflicts('zippy', 'LT', ('0', '2', '1'))
+ pkgSack = packageSack.PackageSack()
+ pkgSack.addPackage(updatepo)
+
+ solver = build_depsolver(tsInfo, rpmdb, pkgSack)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0], "Resolving failed")
+ self.assert_(tsInfo.getMembers(updatepo.pkgtup), "Not updated")
def suite():
suite = unittest.TestSuite()
diff --git a/yum/__init__.py b/yum/__init__.py
index eeeb51e..e1c9801 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -610,7 +610,7 @@ class YumBase(depsolve.Depsolve):
for r in self.repos.listEnabled():
costs[r.cost] = 1
- if len(costs.keys()) == 1: # if all of our costs are the same then return
+ if len(costs.keys()) <= 1: # if all of our costs are the same then return
return
def _sort_by_cost(a, b):
diff --git a/yum/packageSack.py b/yum/packageSack.py
index eeb139f..c5086ba 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -89,7 +89,7 @@ class PackageSackBase(object):
"""return list of package obsoleting the name (any evr and flag)"""
raise NotImplementedError()
- def returnObsoletes(self):
+ def returnObsoletes(self, newest=False):
"""returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
raise NotImplementedError()
@@ -510,7 +510,7 @@ class PackageSack(PackageSackBase):
else:
return []
- def returnObsoletes(self):
+ def returnObsoletes(self, newest=False):
"""returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
obs = {}
for po in self.returnPackages():
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index c6877bd..c04a4dd 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -392,7 +392,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return result
- def returnObsoletes(self):
+ def returnObsoletes(self, newest=False):
obsoletes = {}
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel