[yum-cvs] 11 commits - rpmUtils/updates.py test/alltests.py test/depsolvetests.py test/operationstests.py test/simpleobsoletestests.py test/simpleremovetests.py test/simpleupdatetests.py test/testbase.py yum/depsolve.py yum/packageSack.py yum/transactioninfo.py

Florian Festi ffesti at linux.duke.edu
Thu Nov 29 15:41:46 UTC 2007


 rpmUtils/updates.py          |   29 ---
 test/alltests.py             |   25 +-
 test/depsolvetests.py        |    7 
 test/operationstests.py      |  365 ++++++++-----------------------------------
 test/simpleobsoletestests.py |  226 ++++++++++++++++++++++++++
 test/simpleremovetests.py    |   72 ++++++++
 test/simpleupdatetests.py    |  232 +++++++++++++++++++++++++++
 test/testbase.py             |    2 
 yum/depsolve.py              |    5 
 yum/packageSack.py           |    4 
 yum/transactioninfo.py       |   11 -
 11 files changed, 639 insertions(+), 339 deletions(-)

New commits:
commit cb1da528bb56f2b2d006da0a861126e84ececa13
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Nov 8 11:13:47 2007 +0100

    Packages that are to be removed can't be local packages.
    This fixes remove test cases for now - better criteria still
    needed.

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 22efc44..455fb19 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -445,11 +445,8 @@ class DepsolveTests(DepsolveTests):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        if new_behavior:
-            self.assertEquals('ok', *self.resolveCode())
-            self.assertResult((po, updatepo))
-        else:
-            self.assertEquals('err', *self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
+        self.assertResult((po, updatepo))
 
     def testUpdateForConflict2(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index 29954c8..8aed378 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -153,6 +153,10 @@ class TransactionData:
 
         return result
 
+    def _isLocalPackage(self, txmember):
+        # Is this the right criteria?
+        return txmember.ts_state in ('u', 'i') and not isinstance(txmember.po, (YumInstalledPackage, YumAvailablePackageSqlite))
+
     def add(self, txmember):
         """add a package to the transaction"""
         
@@ -170,9 +174,7 @@ class TransactionData:
         self.pkgdict[txmember.pkgtup].append(txmember)
         self._namedict.setdefault(txmember.name, []).append(txmember)
         self.changed = True
-
-        # Is this the right criteria?
-        if not isinstance(txmember.po, (YumInstalledPackage, YumAvailablePackageSqlite)):
+        if self._isLocalPackage(txmember):
             self.localSack.addPackage(txmember.po)
         elif isinstance(txmember.po, YumAvailablePackageSqlite):
             self.pkgSackPackages += 1
@@ -190,8 +192,7 @@ class TransactionData:
             return
         for txmbr in self.pkgdict[pkgtup]:
             txmbr.po.state = None
-            # Is this the right criteria?
-            if not isinstance(txmbr.po, (YumInstalledPackage, YumAvailablePackageSqlite)):
+            if self._isLocalPackage(txmbr):
                 self.localSack.delPackage(txmbr.po)
             elif isinstance(txmbr.po, YumAvailablePackageSqlite):
                 self.pkgSackPackages -= 1
commit 4ab195d6b7d937b1544d10244802a85a3f8060d5
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Nov 12 14:57:14 2007 +0100

    Work around unreliable result of .update()
    Add test cases

diff --git a/test/operationstests.py b/test/operationstests.py
index 341bb3a..51f3241 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -18,6 +18,40 @@ class ComplicatedTests(OperationsTests):
             self.assert_(res=='ok', msg)
             self.assertResult((p.obsoletes_i386, p.conflicts))
 
+class CombinedUpdateObsoletesTest(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        pkgs.k_1 = FakePackage('k', '3.5')
+        pkgs.kdevel_1 = FakePackage('k-devel', '3.5')
+        pkgs.kdevel_1.addRequires('k')
+        pkgs.klibs_1_i386 = FakePackage('klibs', '3.5', arch='i386')
+        pkgs.klibs_1_x86_64 = FakePackage('klibs', '3.5', arch='x86_64')
+        pkgs.k_2 = FakePackage('k', '3.5', '2')
+        pkgs.kdevel_2 = FakePackage('k-devel', '3.5', '2')
+        pkgs.kdevel_2.addRequires('k')
+        pkgs.klibs_2_i386 = FakePackage('klibs', '3.5', '2', arch='i386')
+        pkgs.klibs_2_i386.addObsoletes('klibs', 'LT', (None, '3.5', '2'))
+        pkgs.klibs_2_i386.addObsoletes('k', 'LT', (None, '3.5', '2'))
+        pkgs.klibs_2_x86_64 = FakePackage('klibs', '3.5', '2', arch='x86_64')
+        pkgs.klibs_2_x86_64.addObsoletes('klibs', 'LT', (None, '3.5', '2'))
+        pkgs.klibs_2_x86_64.addObsoletes('k', 'LT', (None, '3.5', '2'))
+
+    def testSelfObsolete(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.klibs_1_x86_64], [p.klibs_2_i386, p.klibs_2_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.klibs_2_x86_64,))
+
+    def testPackageSplitWithObsoleteAndRequiresForUpdate(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.k_1, p.kdevel_1, p.klibs_1_x86_64],
+                                     [p.k_2, p.kdevel_2, p.klibs_2_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.k_2, p.kdevel_2, p.klibs_2_x86_64,))
+
+
+
 class ComplicatedObsoletesTests(OperationsTests):
 
     @staticmethod
@@ -81,6 +115,7 @@ class ComplicatedObsoletesTests(OperationsTests):
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(ComplicatedObsoletesTests))
+    suite.addTest(unittest.makeSuite(CombinedUpdateObsoletesTest))
     suite.addTest(unittest.makeSuite(ComplicatedTests))
     return suite
 
diff --git a/yum/depsolve.py b/yum/depsolve.py
index e026db2..48dd48c 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -501,9 +501,10 @@ class Depsolve(object):
         # find the best one 
 
         # try updating the already install pkgs
+        length = len(self.tsInfo)
         for pkg in provSack.returnNewestByName():
-            txmbrs = self.update(name=pkg.name, epoch=pkg.epoch, version=pkg.version, rel=pkg.rel)
-            if txmbrs:
+            self.update(name=pkg.name, epoch=pkg.epoch, version=pkg.version, rel=pkg.rel)
+            if len(self.tsInfo) != length:
                 checkdeps = True
                 return checkdeps, missingdep
 
commit 4ac059d65428a241be7f0b574ee2526267b5403d
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Nov 8 13:56:26 2007 +0100

    Add some remove test cases

diff --git a/test/simpleremovetests.py b/test/simpleremovetests.py
new file mode 100644
index 0000000..a6e2015
--- /dev/null
+++ b/test/simpleremovetests.py
@@ -0,0 +1,72 @@
+from testbase import *
+
+class SimpleRemoveTests(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        pkgs.leaf = FakePackage('foo', '2.5', '1.1', '0', 'noarch')
+        pkgs.leaf.addFile('/bin/foo')
+
+        pkgs.requires_leaf = FakePackage('bar', '4')
+        pkgs.requires_leaf.addRequires('foo')
+
+        pkgs.requires_file = FakePackage('barkeeper', '0.8')
+        pkgs.requires_file.addRequires('/bin/foo')
+
+        pkgs.rr_leaf = FakePackage('baz', '5.3')
+        pkgs.rr_leaf.addRequires('bar')
+
+        pkgs.provides_leaf = FakePackage('foo-ng', '2.5')
+        pkgs.provides_leaf.addProvides('foo')
+
+    def testRemoveSingle(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'foo'], [p.leaf], [])
+        self.assert_(res=='ok', msg)
+        self.assertResult( () )
+
+    def testRemoveRequired(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'foo'], [p.leaf, p.requires_leaf], [])
+        self.assert_(res=='ok', msg)
+        self.assertResult( () )
+
+    def testRemoveRequiredMissing(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'bar'], [p.requires_leaf], [])
+        self.assert_(res=='ok', msg)
+        self.assertResult( () )
+
+    def testRemoveRequiredProvided(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'foo'], [p.leaf, p.requires_leaf, p.provides_leaf], [])
+        self.assert_(res=='ok', msg)
+        self.assertResult( (p.requires_leaf, p.provides_leaf) )
+
+    def testRemoveRequiredAvailable(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'foo'], [p.leaf, p.requires_leaf], [p.provides_leaf])
+        self.assert_(res=='ok', msg)
+        self.assertResult( () )
+
+    def testRemoveRequiredChain(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'foo'], [p.leaf, p.requires_leaf, p.rr_leaf], [])
+        self.assert_(res=='ok', msg)
+        self.assertResult( () )
+
+    def testRemoveRequiredFile(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['remove', 'foo'], [p.leaf, p.requires_file], [])
+        self.assert_(res=='ok', msg)
+        self.assertResult( () )
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(SimpleRemoveTests))
+    return suite
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="suite")
+
+
commit 7033402f9d1b297fa3ceddccd7c6aed5554ea114
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Nov 8 12:25:33 2007 +0100

    Fix PackageSack.getProvides to also return files

diff --git a/yum/packageSack.py b/yum/packageSack.py
index f150cf3..408988d 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -482,6 +482,10 @@ class PackageSack(PackageSackBase):
             hits = po.matchingPrcos('provides', (name, flags, version))
             if hits:
                 result[po] = hits
+        if name[0] == '/':
+            hit = (name, None, (None, None, None))
+            for po in self.searchFiles(name):
+                result.setdefault(po, []).append(hit)
         return result
 
     def getRequires(self, name, flags=None, version=(None, None, None)):
commit f3ca137663b7a812e8cba5e7c9fd1e35f54f0dbf
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Nov 6 17:13:22 2007 +0100

    Add ObsoletesChain and ObsoletesCircle test cases

diff --git a/test/operationstests.py b/test/operationstests.py
index fa842d9..341bb3a 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -18,8 +18,69 @@ class ComplicatedTests(OperationsTests):
             self.assert_(res=='ok', msg)
             self.assertResult((p.obsoletes_i386, p.conflicts))
 
+class ComplicatedObsoletesTests(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        pkgs.installed = FakePackage('foo', '1.4', '1')
+        pkgs.obsoletecircle = FakePackage('foo', '1.4', '1')
+        pkgs.obsoletecircle.addObsoletes('baz')
+        pkgs.obsoletes = FakePackage('bar', '1.2', '1')
+        pkgs.obsoletes.addObsoletes('foo')
+        pkgs.obsoletes2 = FakePackage('baz', '1.8', '1')
+        pkgs.obsoletes2.addObsoletes('bar')
+
+    def testObsoleteChain(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed], [p.obsoletes, p.obsoletes2])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.obsoletes2,))
+        else:
+            self.assertResult((p.obsoletes,))
+    def testObsoleteChainNext(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.obsoletes], [p.obsoletes2])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes2,))
+
+    def testObsoleteCircle(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.obsoletecircle], [p.obsoletes, p.obsoletes2])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.obsoletecircle,))
+        else:
+            self.assertResult((p.obsoletes,))
+    def testObsoleteCircleNext(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.obsoletes], [p.obsoletecircle, p.obsoletes, p.obsoletes2])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.obsoletes,))
+        else:
+            self.assertResult((p.obsoletes2,))
+    def testObsoleteCircleNextNext(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.obsoletes2], [p.obsoletecircle, p.obsoletes, p.obsoletes2])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.obsoletes2,))
+        else:
+            self.assertResult((p.obsoletecircle,))
+    def testObsoleteCircleNextNextNext(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.obsoletecircle], [p.obsoletes, p.obsoletes2])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.obsoletecircle,))
+        else:
+            self.assertResult((p.obsoletes,))
+    # continue endlessly
+
 def suite():
     suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(ComplicatedObsoletesTests))
     suite.addTest(unittest.makeSuite(ComplicatedTests))
     return suite
 
commit 60fd07bebda9ee2785079fac2dd8d7ae89039b1e
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Nov 6 17:12:39 2007 +0100

    Make the Update i386,x86_64 -> i386/x86_64 tests stop complaining

diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
index d37ee7e..a872559 100644
--- a/test/simpleupdatetests.py
+++ b/test/simpleupdatetests.py
@@ -179,7 +179,8 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386])
         self.assert_(res=='ok', msg)
         if new_behavior:
-            self.assertResult((p.update_i386,)) # XXX is this right?
+            self.assertResult((p.update_i386, p.installed_x86_64))
+            # self.assertResult((p.update_i386,)) # XXX is this right?
         else:
             self.assertResult((p.update_i386, p.installed_x86_64))
     def testUpdateMultilibToi386ForDependency(self):
@@ -187,7 +188,8 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.requires_update])
         self.assert_(res=='ok', msg)
         if new_behavior:
-            self.assertResult((p.update_i386, p.requires_update)) # XXX is this right?
+            self.assertResult((p.update_i386, p.installed_x86_64, p.requires_update))
+            # self.assertResult((p.update_i386, p.requires_update)) # XXX is this right?
         else:
             self.assertResult((p.update_i386, p.installed_x86_64, p.requires_update))
 
@@ -196,7 +198,8 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_x86_64])
         self.assert_(res=='ok', msg)
         if new_behavior:
-            self.assertResult((p.update_x86_64,)) # XXX is this right?
+            self.assertResult((p.update_x86_64, p.installed_i386))
+            # self.assertResult((p.update_x86_64,)) # XXX is this right?
         else:
             self.assertResult((p.update_x86_64, p.installed_i386))
     def testUpdateMultilibTox86_64ForDependency(self):
@@ -204,7 +207,8 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_x86_64, p.requires_update])
         self.assert_(res=='ok', msg)
         if new_behavior:
-            self.assertResult((p.update_x86_64, p.requires_update)) # XXX is this right?
+            self.assertResult((p.update_x86_64, p.installed_i386, p.requires_update))
+            # self.assertResult((p.update_x86_64, p.requires_update)) # XXX is this right?
         else:
             self.assertResult((p.update_x86_64, p.installed_i386, p.requires_update))
 
commit 6a9dc506d7f28bc416b86e353263afca37f2d408
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Nov 6 17:11:01 2007 +0100

    set default values for the FakePackage constructor

diff --git a/test/testbase.py b/test/testbase.py
index 3c90636..50bd9cb 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -43,7 +43,7 @@ class FakeRepo(object):
 
 class FakePackage(packages.YumAvailablePackage):
 
-    def __init__(self, name, version, release, epoch, arch, repo=None):
+    def __init__(self, name, version='1.0', release='1', epoch='0', arch='noarch', repo=None):
         if repo is None:
             repo = FakeRepo()
         packages.YumAvailablePackage.__init__(self, repo)
commit b6bf93bd26c73673d2ef4c625d2c257b92562335
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Nov 6 16:38:58 2007 +0100

    Move SimpleUpdateTests into an own module

diff --git a/test/operationstests.py b/test/operationstests.py
index 3bab8a4..fa842d9 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -1,226 +1,6 @@
 from testbase import *
 from simpleobsoletestests import SimpleObsoletesTests
 
-class SimpleUpdateTests(OperationsTests):
-
-    @staticmethod
-    def buildPkgs(pkgs, *args):
-        # installed
-        pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
-        pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
-        pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
-        # updates
-        pkgs.update_i386 = FakePackage('zsh', '2', '1', '0', 'i386')
-        pkgs.update_x86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
-        pkgs.update_noarch = FakePackage('zsh', '2', '1', '0', 'noarch')
-        # requires update
-        pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
-        pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
-
-    # noarch to X
-
-    def testUpdatenoarchTonoarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_noarch,])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch,))
-    def testUpdatenoarchTonoarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_noarch, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch, p.requires_update))
-
-    def testUpdatenoarchToi386(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386,])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386,))
-    def testUpdatenoarchToi386ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_i386, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.requires_update))
-
-    def testUpdatenoarchTox86_64(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_x86_64,])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64,))
-    def testUpdatenoarchTox86_64ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64, p.requires_update))
-
-    def testUpdatenoarchToMultilib(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386, p.update_x86_64])
-        self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.update_x86_64,), (p.update_i386,)) # ?
-        else:
-            self.assertResult((p.update_i386, p.update_x86_64))
-    def testUpdatenoarchToMultilibForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_i386, p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
-
-    # i386 to X
-
-    def testUpdatei386Tonoarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_noarch])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch,))
-    def testUpdatei386TonoarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_noarch, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch, p.requires_update))
-
-    def testUpdatei386Toi386(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386,))
-    def testUpdatei386Toi386ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_i386, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.requires_update))
-
-    def testUpdatei386Tox86_64(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64,))
-    def testUpdatei386Tox86_64ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64, p.requires_update))
-
-    def testUpdatei386ToMultilib(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386, p.update_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386,))
-    def testUpdatei386ToMultilibForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_i386, p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.requires_update))
-
-    # x86_64 to X
-
-    def testUpdatex86_64Tonoarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_noarch,])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch,))
-    def testUpdatex86_64TonoarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
-                                     [p.update_noarch, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch, p.requires_update))
-
-    def testUpdatex86_64Toi386(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_i386,])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386,))
-    def testUpdatex86_64Toi386ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
-                                     [p.update_i386, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.requires_update))
-
-    def testUpdatex86_64Tox86_64(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_x86_64,])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64,))
-    def testUpdatex86_64Tox86_64ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
-                                     [p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64, p.requires_update))
-
-    def testUpdatex86_64ToMultilib(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_i386, p.update_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64,))
-    def testUpdatex86_64ToMultilibForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
-                                     [p.update_i386, p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_x86_64, p.requires_update))
-
-    # multilib to X
-
-    def testUpdateMultilibTonoarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_noarch])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch,))
-    def testUpdateMultilibTonoarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_noarch, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_noarch, p.requires_update))
-
-    def testUpdateMultilibToi386(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386])
-        self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.update_i386,)) # XXX is this right?
-        else:
-            self.assertResult((p.update_i386, p.installed_x86_64))
-    def testUpdateMultilibToi386ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.requires_update])
-        self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.update_i386, p.requires_update)) # XXX is this right?
-        else:
-            self.assertResult((p.update_i386, p.installed_x86_64, p.requires_update))
-
-    def testUpdateMultilibTox86_64(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_x86_64])
-        self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.update_x86_64,)) # XXX is this right?
-        else:
-            self.assertResult((p.update_x86_64, p.installed_i386))
-    def testUpdateMultilibTox86_64ForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.update_x86_64, p.requires_update)) # XXX is this right?
-        else:
-            self.assertResult((p.update_x86_64, p.installed_i386, p.requires_update))
-
-    def testUpdateMultilibToMultilib(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.update_x86_64))
-    def testUpdateMultilibToMultilibForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64, p.requires_update])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
-
-
 # Obsolete for conflict
 class ComplicatedTests(OperationsTests):
 
@@ -240,7 +20,6 @@ class ComplicatedTests(OperationsTests):
 
 def suite():
     suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(SimpleUpdateTests))
     suite.addTest(unittest.makeSuite(ComplicatedTests))
     return suite
 
diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
new file mode 100644
index 0000000..d37ee7e
--- /dev/null
+++ b/test/simpleupdatetests.py
@@ -0,0 +1,228 @@
+from testbase import *
+
+class SimpleUpdateTests(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        # installed
+        pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
+        pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
+        pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
+        # updates
+        pkgs.update_i386 = FakePackage('zsh', '2', '1', '0', 'i386')
+        pkgs.update_x86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
+        pkgs.update_noarch = FakePackage('zsh', '2', '1', '0', 'noarch')
+        # requires update
+        pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
+        pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
+
+    # noarch to X
+
+    def testUpdatenoarchTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_noarch,])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch,))
+    def testUpdatenoarchTonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_noarch, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch, p.requires_update))
+
+    def testUpdatenoarchToi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386,])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386,))
+    def testUpdatenoarchToi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_i386, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386, p.requires_update))
+
+    def testUpdatenoarchTox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_x86_64,])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64,))
+    def testUpdatenoarchTox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64, p.requires_update))
+
+    def testUpdatenoarchToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386, p.update_x86_64])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.update_x86_64,), (p.update_i386,)) # ?
+        else:
+            self.assertResult((p.update_i386, p.update_x86_64))
+    def testUpdatenoarchToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_i386, p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
+
+    # i386 to X
+
+    def testUpdatei386Tonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch,))
+    def testUpdatei386TonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_noarch, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch, p.requires_update))
+
+    def testUpdatei386Toi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386,))
+    def testUpdatei386Toi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_i386, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386, p.requires_update))
+
+    def testUpdatei386Tox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64,))
+    def testUpdatei386Tox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64, p.requires_update))
+
+    def testUpdatei386ToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386, p.update_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386,))
+    def testUpdatei386ToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_i386, p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386, p.requires_update))
+
+    # x86_64 to X
+
+    def testUpdatex86_64Tonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_noarch,])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch,))
+    def testUpdatex86_64TonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
+                                     [p.update_noarch, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch, p.requires_update))
+
+    def testUpdatex86_64Toi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_i386,])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386,))
+    def testUpdatex86_64Toi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
+                                     [p.update_i386, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386, p.requires_update))
+
+    def testUpdatex86_64Tox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_x86_64,])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64,))
+    def testUpdatex86_64Tox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
+                                     [p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64, p.requires_update))
+
+    def testUpdatex86_64ToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_i386, p.update_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64,))
+    def testUpdatex86_64ToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64],
+                                     [p.update_i386, p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_x86_64, p.requires_update))
+
+    # multilib to X
+
+    def testUpdateMultilibTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch,))
+    def testUpdateMultilibTonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_noarch, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_noarch, p.requires_update))
+
+    def testUpdateMultilibToi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.update_i386,)) # XXX is this right?
+        else:
+            self.assertResult((p.update_i386, p.installed_x86_64))
+    def testUpdateMultilibToi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.requires_update])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.update_i386, p.requires_update)) # XXX is this right?
+        else:
+            self.assertResult((p.update_i386, p.installed_x86_64, p.requires_update))
+
+    def testUpdateMultilibTox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_x86_64])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.update_x86_64,)) # XXX is this right?
+        else:
+            self.assertResult((p.update_x86_64, p.installed_i386))
+    def testUpdateMultilibTox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.update_x86_64, p.requires_update)) # XXX is this right?
+        else:
+            self.assertResult((p.update_x86_64, p.installed_i386, p.requires_update))
+
+    def testUpdateMultilibToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386, p.update_x86_64))
+    def testUpdateMultilibToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64, p.requires_update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(SimpleUpdateTests))
+    return suite
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="suite")
commit 3522739a4a5a2d5f8169dee29b9225b2cd14306b
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Nov 5 16:06:49 2007 +0100

    Move SimpleObsoletesTests into an own module
    Complete the coverage to all noarch, i386, x86_64, i386+x86_64 combinations

diff --git a/test/operationstests.py b/test/operationstests.py
index c3658a7..3bab8a4 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -1,5 +1,5 @@
 from testbase import *
-
+from simpleobsoletestests import SimpleObsoletesTests
 
 class SimpleUpdateTests(OperationsTests):
 
@@ -220,108 +220,13 @@ class SimpleUpdateTests(OperationsTests):
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
 
-class SimpleObsoleteTests(OperationsTests):
-
-    @staticmethod
-    def buildPkgs(pkgs, *args):
-        # installed
-        pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
-        pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
-        pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
-        # obsoletes
-        pkgs.obsoletes_i386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
-        pkgs.obsoletes_i386.addObsoletes('zsh', None, (None, None, None))
-        pkgs.obsoletes_i386.addProvides('zzz')
-        pkgs.obsoletes_x86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
-        pkgs.obsoletes_x86_64.addObsoletes('zsh', None, (None, None, None))
-        pkgs.obsoletes_x86_64.addProvides('zzz')
-        pkgs.obsoletes_noarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
-        pkgs.obsoletes_noarch.addObsoletes('zsh', None, (None, None, None))
-        pkgs.obsoletes_noarch.addProvides('zzz')
-        # requires obsoletes
-        pkgs.requires_obsoletes = FakePackage('superzippy', '3.5', '3', '0', 'noarch')
-        pkgs.requires_obsoletes.addRequires('zzz')
-
-
-    def testObsoletenoarchToMultiarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.obsoletes_x86_64,), (p.obsoletes_i386,))
-        else:
-            self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
-    def testObsoletenoarchToMultiarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch],
-                                     [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes), (p.obsoletes_i386,))
-    def testObsoletenoarchToMultiarchForDependencyFix(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res==0, msg)
-        #self.assertResult((p.obsoletes_x86_64,)) # yes, this would be nice - but also wrong
-        self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
-
-    def testObsoletei386ToMultiarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_i386,))
-    def testObsoletei386ToMultiarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
-    def testObsoletei386ToMultiarchForDependencyFix(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res==0, msg)
-        #self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes)) # yes, this would be nice - but also wrong
-        self.assertResult((p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes))
-
-    def testObsoletex86_64ToMultiarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_x86_64,))
-    def testObsoletex86_64ToMultiarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'],
-                                     [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
-
-    def testObsoleteMultiarchToMultiarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
-    def testObsoleteMultiarchToMultiarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'],
-                                     [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
-
-    def testObsoleteMultiarchTonoarch(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_noarch,))
-    def testObsoleteMultiarchTonoarchForDependency(self):
-        p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch, p.requires_obsoletes])
-        self.assert_(res=='ok', msg)
-        self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
 
 # Obsolete for conflict
 class ComplicatedTests(OperationsTests):
 
     @staticmethod
     def buildPkgs(pkgs, *args):
-        SimpleObsoleteTests.buildPkgs(pkgs)
+        SimpleObsoletesTests.buildPkgs(pkgs)
         # conflicts
         pkgs.conflicts = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
         pkgs.conflicts.addConflicts('zsh', 'EQ', ('0', '1', '1'))
@@ -336,7 +241,6 @@ class ComplicatedTests(OperationsTests):
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(SimpleUpdateTests))
-    suite.addTest(unittest.makeSuite(SimpleObsoleteTests))
     suite.addTest(unittest.makeSuite(ComplicatedTests))
     return suite
 
diff --git a/test/simpleobsoletestests.py b/test/simpleobsoletestests.py
new file mode 100644
index 0000000..07d9e88
--- /dev/null
+++ b/test/simpleobsoletestests.py
@@ -0,0 +1,226 @@
+from testbase import *
+
+class SimpleObsoletesTests(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        # installed
+        pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
+        pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
+        pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
+        # obsoletes
+        pkgs.obsoletes_i386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
+        pkgs.obsoletes_i386.addObsoletes('zsh', None, (None, None, None))
+        pkgs.obsoletes_i386.addProvides('zzz')
+        pkgs.obsoletes_x86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
+        pkgs.obsoletes_x86_64.addObsoletes('zsh', None, (None, None, None))
+        pkgs.obsoletes_x86_64.addProvides('zzz')
+        pkgs.obsoletes_noarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
+        pkgs.obsoletes_noarch.addObsoletes('zsh', None, (None, None, None))
+        pkgs.obsoletes_noarch.addProvides('zzz')
+        # requires obsoletes
+        pkgs.requires_obsoletes = FakePackage('superzippy', '3.5', '3', '0', 'noarch')
+        pkgs.requires_obsoletes.addRequires('zzz')
+
+    # noarch to X
+
+    def testObsoletenoarchTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch,))
+    def testObsoletenoarchTonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch],
+                                     [p.obsoletes_noarch, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
+
+    def testObsoletenoarchToi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386,))
+    def testObsoletenoarchToi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch],
+                                     [p.obsoletes_i386, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
+
+    def testObsoletenoarchTox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64,))
+    def testObsoletenoarchTox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch],
+                                     [p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+
+    def testObsoletenoarchToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386, p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        if new_behavior:
+            self.assertResult((p.obsoletes_x86_64,), (p.obsoletes_i386,))
+        else:
+            self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
+    def testObsoletenoarchToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch],
+                                     [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes), (p.obsoletes_i386,))
+
+    # i386 to X
+
+    def testObsoletei386Tonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch,))
+    def testObsoletei386TonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_noarch, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
+
+    def testObsoletei386Toi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_i386])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386,))
+    def testObsoletei386Toi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_i386, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
+
+    def testObsoletei386Tox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64,))
+    def testObsoletei386Tox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+
+
+    def testObsoletei386ToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386,))
+    def testObsoletei386ToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
+
+    # x86_64 to X
+
+    def testObsoletex86_64Tonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.obsoletes_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch,))
+    def testObsoletex86_64TonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_x86_64], [p.obsoletes_noarch, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
+
+    def testObsoletex86_64Toi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.obsoletes_i386])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386,))
+    def testObsoletex86_64Toi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_x86_64], [p.obsoletes_i386, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
+
+    def testObsoletex86_64Tox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64,))
+    def testObsoletex86_64Tox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_x86_64], [p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+
+    def testObsoletex86_64ToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64,))
+    def testObsoletex86_64ToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'],
+                                     [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+
+    # multiarch to X
+
+    def testObsoleteMultiarchTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch,))
+    def testObsoleteMultiarchTonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
+
+    def testObsoleteMultiarchToi386(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386,))
+    def testObsoleteMultiarchToi386ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
+
+    def testObsoleteMultiarchTox86_64(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64,))
+    def testObsoleteMultiarchTox86_64ForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+
+    def testObsoleteMultiarchToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
+    def testObsoleteMultiarchToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'],
+                                     [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(SimpleObsoletesTests))
+    return suite
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="suite")
+
commit 025c8a035385844627ae36ff05b3b91327057a9b
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Nov 5 15:59:45 2007 +0100

    Read test modules from file systeRead test modules from file systemm

diff --git a/test/alltests.py b/test/alltests.py
index a0911db..6733a20 100644
--- a/test/alltests.py
+++ b/test/alltests.py
@@ -1,17 +1,24 @@
 import unittest
 import testbase
-
-import depsolvetests
-import packagetests
-import operationstests
+from glob import glob
+import os.path
 
 def suite():
+    files = glob(os.path.join(os.path.dirname(__file__), '*.py'))
+    modules = [os.path.basename(f)[:-3] for f in files]
+    suites = []
+
+    print "Test modules:"
+    for m in modules:
+        if m in ('alltests', 'testbase'):
+            continue
+        module = __import__(m)
+        if hasattr(module, 'suite'):
+            print "\t%s" % m
+            suites.append(module.suite())
+
     # Append all test suites here:
-    return unittest.TestSuite((
-        depsolvetests.suite(),
-        operationstests.suite(),
-        packagetests.suite(),
-    ))
+    return unittest.TestSuite(suites)
 
 if __name__ == "__main__":
     unittest.main(defaultTest="suite")
commit bd6664a6aaa06b3bec91d6ff0cae7b287193a2dd
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Nov 12 17:48:21 2007 +0100

    Do arch checks for versioned obsoletes, too
    Reduce duplicated code in doObsoletes

diff --git a/rpmUtils/updates.py b/rpmUtils/updates.py
index 861037f..94d8aa1 100644
--- a/rpmUtils/updates.py
+++ b/rpmUtils/updates.py
@@ -207,9 +207,11 @@ class Updates:
         for pkgtup in self.rawobsoletes.keys():
             (name, arch, epoch, ver, rel) = pkgtup
             for (obs_n, flag, (obs_e, obs_v, obs_r)) in self.rawobsoletes[(pkgtup)]:
-                if flag in [None, 0]: # unversioned obsolete
-                    if self.installdict.has_key((obs_n, None)):
-                        for (rpm_a, rpm_e, rpm_v, rpm_r) in self.installdict[(obs_n, None)]:
+                if self.installdict.has_key((obs_n, None)):
+                    for (rpm_a, rpm_e, rpm_v, rpm_r) in self.installdict[(obs_n, None)]:
+                        if flag in [None, 0] or \
+                                rpmUtils.miscutils.rangeCheck((obs_n, flag, (obs_e, obs_v, obs_r)),
+                                                              (obs_n, rpm_a, rpm_e, rpm_v, rpm_r)):
                             # make sure the obsoleting pkg is not already installed
                             willInstall = 1
                             if self.installdict.has_key((name, None)):
@@ -225,27 +227,6 @@ class Updates:
                                 if not obsdict.has_key(pkgtup):
                                     obsdict[pkgtup] = []
                                 obsdict[pkgtup].append((obs_n, rpm_a, rpm_e, rpm_v, rpm_r))
-
-                else: # versioned obsolete
-                    if self.installdict.has_key((obs_n, None)):
-                        for (rpm_a, rpm_e, rpm_v, rpm_r) in self.installdict[(obs_n, None)]:
-                            if rpmUtils.miscutils.rangeCheck((obs_n, flag, (obs_e, \
-                                                        obs_v, obs_r)), (obs_n,\
-                                                        rpm_a, rpm_e, rpm_v, rpm_r)):
-                                # make sure the obsoleting pkg is not already installed
-                                willInstall = 1
-                                if self.installdict.has_key((name, None)):
-                                    for (ins_a, ins_e, ins_v, ins_r) in self.installdict[(name, None)]:
-                                        pkgver = (epoch, ver, rel)
-                                        installedver = (ins_e, ins_v, ins_r)
-                                        if self.returnNewest((pkgver, installedver)) == installedver:
-                                            willInstall = 0
-                                            break
-                                if willInstall:
-                                    if not obsdict.has_key(pkgtup):
-                                        obsdict[pkgtup] = []
-                                    obsdict[pkgtup].append((obs_n, rpm_a, rpm_e, rpm_v, rpm_r))
-           
         self.obsoletes = obsdict
         self.makeObsoletedDict()
 



More information about the Yum-cvs-commits mailing list