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

Reply via email to