[yum-cvs] 25 commits - Makefile cli.py test/alltests.py test/depsolvetests.py test/operationstests.py test/packagetests.py test/settestpath.py test/testbase.py yum/__init__.py yum/depsolve.py yum/packageSack.py yum/rpmsack.py yum/sqlitesack.py

James Bowes jbowes at linux.duke.edu
Fri Nov 2 18:44:07 UTC 2007


 Makefile                |    3 
 cli.py                  |    4 
 test/alltests.py        |    5 
 test/depsolvetests.py   |  413 ++++++++++++++++++++----------------------------
 test/operationstests.py |  345 ++++++++++++++++++++++++++++++++++++++++
 test/packagetests.py    |    2 
 test/settestpath.py     |    4 
 test/testbase.py        |  233 +++++++++++++++++++++++++++
 yum/__init__.py         |    5 
 yum/depsolve.py         |    6 
 yum/packageSack.py      |   47 ++++-
 yum/rpmsack.py          |   12 -
 yum/sqlitesack.py       |    5 
 13 files changed, 816 insertions(+), 268 deletions(-)

New commits:
commit edbdf5ee813cd329f3272d0902b220c1312d3a07
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Nov 2 17:04:59 2007 +0100

    fix copy/paste errors

diff --git a/test/operationstests.py b/test/operationstests.py
index 1fe43ce..c3658a7 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -24,7 +24,7 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_noarch,])
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_noarch,))
-    def testUpdatenoarchToMultilibForDependency(self):
+    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)
@@ -35,7 +35,7 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386,])
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_i386,))
-    def testUpdatenoarchToMultilibForDependency(self):
+    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)
@@ -46,7 +46,7 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_x86_64,])
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_x86_64,))
-    def testUpdatenoarchToMultilibForDependency(self):
+    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)
@@ -84,7 +84,7 @@ class SimpleUpdateTests(OperationsTests):
         res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386])
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_i386,))
-    def testUpdatei386TonoarchForDependency(self):
+    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)
@@ -208,6 +208,7 @@ class SimpleUpdateTests(OperationsTests):
             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])
commit 562b9e108ce172b3b3956668316c81c642c2ae3d
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Nov 2 16:03:19 2007 +0100

    Make update tests complete

diff --git a/test/operationstests.py b/test/operationstests.py
index 441a126..1fe43ce 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -17,44 +17,56 @@ class SimpleUpdateTests(OperationsTests):
         pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
         pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
 
-    def testUpdatei386ToMultilib(self):
+    # noarch to X
+
+    def testUpdatenoarchTonoarch(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386, p.update_x86_64])
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_noarch,])
         self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386,))
-    def testUpdatei386ToMultilibForDependency(self):
+        self.assertResult((p.update_noarch,))
+    def testUpdatenoarchToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_i386, p.update_x86_64, p.requires_update])
+        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_i386, p.requires_update))
-    def testUpdatei386ToMultilibForDependencyFix(self):
+        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 testUpdatenoarchToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
+        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.update_x86_64, p.requires_update))
+        self.assertResult((p.update_i386, p.requires_update))
 
-    def testUpdatex86_64ToMultilib(self):
+    def testUpdatenoarchTox86_64(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_i386, p.update_x86_64])
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_x86_64,])
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_x86_64,))
-    def testUpdatex86_64ToMultilibForDependency(self):
+    def testUpdatenoarchToMultilibForDependency(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])
+        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 testUpdateMultilibToMultilib(self):
+    def testUpdatenoarchToMultilib(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64])
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386, p.update_x86_64])
         self.assert_(res=='ok', msg)
-        self.assertResult((p.update_i386, p.update_x86_64))
-    def testUpdateMultilibToMultilibForDependency(self):
+        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_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64, p.requires_update])
+        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_i386, p.update_x86_64,  p.requires_update))
+        self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
+
+    # i386 to X
 
     def testUpdatei386Tonoarch(self):
         p = self.pkgs
@@ -67,6 +79,91 @@ class SimpleUpdateTests(OperationsTests):
         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 testUpdatei386TonoarchForDependency(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])
@@ -78,27 +175,49 @@ class SimpleUpdateTests(OperationsTests):
         self.assert_(res=='ok', msg)
         self.assertResult((p.update_noarch, p.requires_update))
 
-    def testUpdatenoarchToMultilib(self):
+    def testUpdateMultilibToi386(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386, p.update_x86_64])
+        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_x86_64,), (p.update_i386,)) # ?
+            self.assertResult((p.update_i386,)) # XXX is this right?
         else:
-            self.assertResult((p.update_i386, p.update_x86_64))
-    def testUpdatenoarchToMultilibForDependency(self):
+            self.assertResult((p.update_i386, p.installed_x86_64))
+    def testUpdateMultilibToi386ForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_i386, p.update_x86_64, p.requires_update])
+        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)
-        self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
-    def testUpdatenoarchToMultilibForDependencyFix(self):
+        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(['update'], [p.installed_noarch, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
+        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_i386, p.update_x86_64, p.requires_update)) # ?
+            self.assertResult((p.update_x86_64, p.requires_update)) # XXX is this right?
         else:
-            self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
+            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))
 
 class SimpleObsoleteTests(OperationsTests):
 
@@ -133,7 +252,7 @@ class SimpleObsoleteTests(OperationsTests):
             self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
     def testObsoletenoarchToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch], 
+        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,))
@@ -168,7 +287,7 @@ class SimpleObsoleteTests(OperationsTests):
         self.assertResult((p.obsoletes_x86_64,))
     def testObsoletex86_64ToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], 
+        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))
@@ -180,7 +299,7 @@ class SimpleObsoleteTests(OperationsTests):
         self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
     def testObsoleteMultiarchToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], 
+        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))
commit 8e2a5f5410c9856fccd419757faf7f21560db8df
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Nov 2 10:36:48 2007 +0100

    Change test cases to check for the new - now fixed - behavior of yum

diff --git a/test/operationstests.py b/test/operationstests.py
index c593cbd..441a126 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -26,10 +26,7 @@ class SimpleUpdateTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.update_i386, p.requires_update))
-        else:
-            self.assertResult((p.installed_i386, p.update_x86_64, p.requires_update))
+        self.assertResult((p.update_i386, p.requires_update))
     def testUpdatei386ToMultilibForDependencyFix(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
@@ -57,10 +54,7 @@ class SimpleUpdateTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
-        else:
-            self.assertResult((p.installed_i386, p.update_x86_64,  p.requires_update))
+        self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
 
     def testUpdatei386Tonoarch(self):
         p = self.pkgs
@@ -71,27 +65,18 @@ class SimpleUpdateTests(OperationsTests):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_noarch, p.requires_update])
         self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.update_noarch, p.requires_update))
-        else:
-            self.assertResult((p.installed_i386, p.update_noarch, p.requires_update))
+        self.assertResult((p.update_noarch, p.requires_update))
 
     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)
-        if new_behavior:
-            self.assertResult((p.update_noarch,))
-        else:
-            self.assertResult((p.update_noarch, p.installed_x86_64))
+        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)
-        if new_behavior:
-            self.assertResult((p.update_noarch, p.requires_update))
-        else:
-            self.assertResult((p.installed_i386, p.installed_x86_64, p.update_noarch, p.requires_update))
+        self.assertResult((p.update_noarch, p.requires_update))
 
     def testUpdatenoarchToMultilib(self):
         p = self.pkgs
@@ -105,10 +90,7 @@ class SimpleUpdateTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
-        else:
-            self.assertResult((p.installed_noarch, p.update_x86_64, p.requires_update))
+        self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
     def testUpdatenoarchToMultilibForDependencyFix(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_noarch, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
@@ -154,10 +136,7 @@ class SimpleObsoleteTests(OperationsTests):
         res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch], 
                                      [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res=='ok', msg)
-        if new_behavior:
-            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes), (p.obsoletes_i386,))
-        else:
-            self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
+        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])
@@ -174,10 +153,7 @@ class SimpleObsoleteTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
-        else:
-            self.assertResult((p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+        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])
@@ -195,10 +171,7 @@ class SimpleObsoleteTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
-        else:
-            self.assertResult((p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
+        self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
 
     def testObsoleteMultiarchToMultiarch(self):
         p = self.pkgs
@@ -210,10 +183,7 @@ class SimpleObsoleteTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
-        else:
-            self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
+        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
 
     def testObsoleteMultiarchTonoarch(self):
         p = self.pkgs
@@ -224,10 +194,7 @@ class SimpleObsoleteTests(OperationsTests):
         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)
-        if new_behavior:
-            self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
-        else:
-            self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_noarch, p.requires_obsoletes))
+        self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
 
 # Obsolete for conflict
 class ComplicatedTests(OperationsTests):
commit a6467e72b044604ef8c6e7a5308033ec681249c5
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Oct 31 15:16:20 2007 +0100

    Further depsolving test cleanups:
     * remove TestingDepsolve class - do initialization in resolveCode
     * remove build_depsolver() - do initialization in resolveCode
     * set po.repoid po.repo.id in resolveCode
      * remove FakeInstPkg - directly use FakePackage()
    Set po.repoid and po.repo.id = "TestRepository" for available pkgs for operations tests

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 7b61070..22efc44 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -157,7 +157,7 @@ class DepsolveTests(DepsolveTests):
         po.addRequires('zip', 'LT', ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
-        ipo = self.FakeInstPkg('zip', '1.3', '4', None, 'i386')
+        ipo = FakePackage('zip', '1.3', '4', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', *self.resolveCode())
@@ -329,7 +329,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackage(self):
-        ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
+        ipo = FakePackage('zsh', '1', '1', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
         po = FakePackage('zsh', '1', '3', None, 'i386')
@@ -373,7 +373,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, installedpo, updatepo2))
 
     def testUpdateSinglePackageNewRequires(self):
-        ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
+        ipo = FakePackage('zsh', '1', '1', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
         po = FakePackage('zsh', '1', '3', None, 'i386')
@@ -387,7 +387,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackageOldRequires(self):
-        ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
+        ipo = FakePackage('zsh', '1', '1', None, 'i386')
         ipo.addRequires('zip', None, (None, None, None))
         self.rpmdb.addPackage(ipo)
 
@@ -402,7 +402,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackageOldRequiresGone(self):
-        ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
+        ipo = FakePackage('zsh', '1', '1', None, 'i386')
         ipo.addRequires('zip', None, (None, None, None))
         self.rpmdb.addPackage(ipo)
 
@@ -416,7 +416,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackageObsoletesOldRequirement(self):
-        ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
+        ipo = FakePackage('zsh', '1', '1', None, 'i386')
         ipo.addRequires('zip', None, (None, None, None))
         self.rpmdb.addPackage(ipo)
 
diff --git a/test/testbase.py b/test/testbase.py
index 5f05996..33fa803 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -71,34 +71,6 @@ class FakePackage(packages.YumAvailablePackage):
     def addFile(self, name, ftype='file'):
         self.files[ftype].append(name)
 
-
-class TestingDepsolve(YumBase):
-
-    def __init__(self, tsInfo, rpmdb, pkgSack):
-        YumBase.__init__(self)
-
-        self.conf = FakeConf()
-        self.tsInfo = tsInfo
-        self._tsInfo = tsInfo
-        self.rpmdb = rpmdb
-        self.pkgSack = pkgSack
-
-    def getInstalledPackageObject(self, pkgtup):
-        return self.rpmdb.searchNevra(pkgtup[0], pkgtup[2], pkgtup[3],
-                pkgtup[4], pkgtup[1])[0]
-
-
-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)
-
-    solver = TestingDepsolve(tsInfo, rpmdb, pkgSack)
-    return solver
-
 class _Container(object):
     pass
 
@@ -190,12 +162,26 @@ class DepsolveTests(_DepsolveTestsBase):
         self.rpmdb  = packageSack.PackageSack()
         self.xsack  = packageSack.PackageSack()
         self.repo   = FakeRepo("installed")
-
-    def FakeInstPkg(self, name, version, release, epoch, arch):
-        return FakePackage(name, version, release, epoch, arch, self.repo)
+        # XXX this side-affect is hacky:
+        self.tsInfo.setDatabases(self.rpmdb, self.xsack)
 
     def resolveCode(self):
-        solver = build_depsolver(self.tsInfo, self.rpmdb, self.xsack)
+        solver = YumBase()
+        solver.conf = FakeConf()
+        solver.tsInfo = solver._tsInfo = self.tsInfo
+        solver.rpmdb = self.rpmdb
+        solver.pkgSack = self.xsack
+
+        for po in self.rpmdb:
+            po.repoid = po.repo.id = "installed"
+        for po in self.xsack:
+            po.repoid = po.repo.id = "TestRepository"
+        for txmbr in self.tsInfo:
+            if txmbr.ts_state in ('u', 'i'):
+                txmbr.po.repoid = txmbr.po.repo.id = "TestRepository"
+            else:
+                txmbr.po.repoid = txmbr.po.repo.id = "installed"
+
         result, msg = solver.resolveDeps()
         return (self.res[result], msg)
 
@@ -234,6 +220,7 @@ class OperationsTests(_DepsolveTestsBase):
             po.repoid = po.repo.id = "installed"
             self.depsolver.rpmdb.addPackage(po)
         for po in available:
+            po.repoid = po.repo.id = "TestRepository"
             self.depsolver._pkgSack.addPackage(po)
 
         self.depsolver.basecmd = args[0]
commit f25f72993890e58ea961460b48b2d4f94d313b70
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Oct 25 14:42:36 2007 +0200

    Fix double complaints in assertResult
    
    Also output the source code of the failed test case

diff --git a/test/testbase.py b/test/testbase.py
index a779a08..5f05996 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -16,6 +16,7 @@ from yum import packages
 from yum import packageSack
 from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
 from cli import YumBaseCli
+import inspect
 
 #############################################################
 ### Helper classes ##########################################
@@ -131,7 +132,7 @@ class _DepsolveTestsBase(unittest.TestCase):
         present if they are in the rpmdb and are not REMOVEd or they
         are INSTALLed.
         """
-        errors = ["assertResult:\n"]
+        errors = ["Unexpected result after depsolving: \n\n"]
         pkgs = set(pkgs)
         optional_pkgs = set(optional_pkgs)
         installed = set()
@@ -140,22 +141,26 @@ class _DepsolveTestsBase(unittest.TestCase):
             # got removed
             if self.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
                 if pkg in pkgs:
-                    errors.append("Package %s got removed!\n" % pkg)
+                    errors.append("Package %s was removed!\n" % pkg)
             else: # still installed
-                installed.add(pkg)
                 if pkg not in pkgs and pkg not in optional_pkgs:
-                    errors.append("Package %s didn't got removed!\n" % pkg)
+                    errors.append("Package %s was not removed!\n" % pkg)
+            installed.add(pkg)
 
         for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
             installed.add(txmbr.po)
             if txmbr.po not in pkgs and txmbr.po not in optional_pkgs:
-                errors.append("Package %s got installed!\n" % txmbr.po)
+                errors.append("Package %s was installed!\n" % txmbr.po)
         for pkg in pkgs - installed:
-            errors.append("Package %s didn't got installed!\n" % pkg)
+            errors.append("Package %s was not installed!\n" % pkg)
 
         if len(errors) > 1:
+            errors.append("\nTest case was:\n\n")
+            errors.extend(inspect.getsource(inspect.stack()[1][0].f_code))
+            errors.append("\n")
             self.fail("".join(errors))
 
+
 #######################################################################
 ### Derive Tests from these classes or unittest.TestCase ##############
 #######################################################################
commit 092b4555e2a5e54ec8d37b1d845ea492c9f009a3
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Oct 25 13:27:22 2007 +0200

    Refactor depsolving test infrastructure and move it to test/testbase.py

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index e639709..7b61070 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -1,139 +1,7 @@
 import unittest
-import testbase
-
-from yum import YumBase
-from yum import transactioninfo
-from yum import packages
-from yum import packageSack
-from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
-
-class FakeConf(object):
-
-    def __init__(self):
-        self.installonlypkgs = []
-        self.exclude = []
-        self.debuglevel = 0
-        self.obsoletes = True
-        self.exactarch = False
-        self.exactarchlist = []
-        self.installroot = '/'
-        self.tsflags = []
-        self.installonly_limit = 0
-
-class FakeRepo(object):
-
-    def __init__(self, id=None):
-        self.id = id
-
-class FakePackage(packages.YumAvailablePackage):
-
-    def __init__(self, name, version, release, epoch, arch, repo=None):
-        packages.PackageObject.__init__(self)
-        packages.RpmBase.__init__(self)
-
-        self.name = name
-        self.version = version
-        self.ver = version
-        self.release = release
-        self.rel = release
-        self.epoch = epoch
-        self.arch = arch
-
-        self.prco['provides'].append((name, 'EQ', (epoch, version, release)))
-
-        if repo is None:
-            repo = FakeRepo()
-        self.repo = repo
-        self.repoid = repo.id
-
-        # Just a unique integer
-        self.id = self.__hash__()
-
-    def addProvides(self, name, flag=None, evr=(None, None, None)):
-        self.prco['provides'].append((name, flag, evr))
-    def addRequires(self, name, flag=None, evr=(None, None, None)):
-        self.prco['requires'].append((name, flag, evr))
-    def addConflicts(self, name, flag=None, evr=(None, None, None)):
-        self.prco['conflicts'].append((name, flag, evr))
-    def addObsoletes(self, name, flag=None, evr=(None, None, None)):
-        self.prco['obsoletes'].append((name, flag, evr))
-    def addFile(self, name, ftype='file'):
-        self.files[ftype].append(name)
-
-
-class TestingDepsolve(YumBase):
-
-    def __init__(self, tsInfo, rpmdb, pkgSack):
-        YumBase.__init__(self)
-
-        self.conf = FakeConf()
-        self.tsInfo = tsInfo
-        self._tsInfo = tsInfo
-        self.rpmdb = rpmdb
-        self.pkgSack = pkgSack
-
-    def getInstalledPackageObject(self, pkgtup):
-        return self.rpmdb.searchNevra(pkgtup[0], pkgtup[2], pkgtup[3],
-                pkgtup[4], pkgtup[1])[0]
-
-
-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)
-
-    solver = TestingDepsolve(tsInfo, rpmdb, pkgSack)
-    return solver
-
-class DepsolveTests(unittest.TestCase):
-
-    tsInfo = None
-    rpmdb  = None
-    def setUp(self):
-        """ Called at the start of each test. """
-        self.tsInfo = transactioninfo.TransactionData()
-        self.rpmdb  = packageSack.PackageSack()
-        self.xsack  = packageSack.PackageSack()
-        self.repo   = FakeRepo("installed")
-
-    def FakeInstPkg(self, name, version, release, epoch, arch):
-        return FakePackage(name, version, release, epoch, arch, self.repo)
-
-    def resolveCode(self):
-        solver = build_depsolver(self.tsInfo, self.rpmdb, self.xsack)
-        result = solver.resolveDeps()
-        res = {0 : 'empty', 2 : 'ok', 1 : 'err'}
-        return (res[result[0]], result[1])
-
-    def assertResult(self, pkgs, optional_pkgs=[], check_multilib_versions=True):
-        errors = ["assertResult:\n"]
-        pkgs = set(pkgs)
-        optional_pkgs = set(optional_pkgs)
-        installed = set()
-
-        for pkg in self.rpmdb:
-            # got removed
-            if self.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
-                if pkg in pkgs:
-                    errors.append("Package %s got removed!\n" % pkg)
-            else: # still installed
-                installed.add(pkg)
-                if pkg not in pkgs and pkg not in optional_pkgs:
-                    errors.append("Package %s didn't got removed!\n" % pkg)
-
-        for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
-            installed.add(txmbr.po)
-            if txmbr.po not in pkgs and txmbr.po not in optional_pkgs:
-                errors.append("Package %s got installed!\n" % txmbr.po)
-        for pkg in pkgs - installed:
-            errors.append("Package %s didn't got installed!\n" % pkg)
-
-        if len(errors) > 1:
-            self.fail("".join(errors))
+from testbase import *
 
+class DepsolveTests(DepsolveTests):
     def testEmpty(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         self.tsInfo.addInstall(po)
@@ -577,7 +445,7 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        if testbase.new_behavior:
+        if new_behavior:
             self.assertEquals('ok', *self.resolveCode())
             self.assertResult((po, updatepo))
         else:
@@ -609,7 +477,7 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        if testbase.new_behavior:
+        if new_behavior:
             self.assertEquals('ok', *self.resolveCode())
             self.assertResult((po, updatepo))
         else:
diff --git a/test/operationstests.py b/test/operationstests.py
index d3fe9a0..c593cbd 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -1,141 +1,63 @@
-import unittest
-import testbase
+from testbase import *
 
-from depsolvetests import FakePackage, FakeRepo, FakeConf
-from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
-from cli import YumBaseCli
-from yum import packageSack
 
-class Container(object):
-    pass
+class SimpleUpdateTests(OperationsTests):
 
-class OperationsTests(unittest.TestCase):
-
-    def __init__(self, methodName='runTest'):
-        unittest.TestCase.__init__(self, methodName)
-        self.pkgs = Container()
+    @staticmethod
+    def buildPkgs(pkgs, *args):
         # installed
-        self.pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
-        self.pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
-        self.pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
+        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
-        self.pkgs.update_i386 = FakePackage('zsh', '2', '1', '0', 'i386')
-        self.pkgs.update_x86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
-        self.pkgs.update_noarch = FakePackage('zsh', '2', '1', '0', 'noarch')
+        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
-        self.pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
-        self.pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
-        # obsoletes
-        self.pkgs.obsoletes_i386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
-        self.pkgs.obsoletes_i386.addObsoletes('zsh', None, (None, None, None))
-        self.pkgs.obsoletes_i386.addProvides('zzz')
-        self.pkgs.obsoletes_x86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
-        self.pkgs.obsoletes_x86_64.addObsoletes('zsh', None, (None, None, None))
-        self.pkgs.obsoletes_x86_64.addProvides('zzz')
-        self.pkgs.obsoletes_noarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
-        self.pkgs.obsoletes_noarch.addObsoletes('zsh', None, (None, None, None))
-        self.pkgs.obsoletes_noarch.addProvides('zzz')
-        # requires obsoletes
-        self.pkgs.requires_obsoletes = FakePackage('superzippy', '3.5', '3', '0', 'noarch')
-        self.pkgs.requires_obsoletes.addRequires('zzz')
-        # conflicts
-        self.pkgs.conflicts = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
-        self.pkgs.conflicts.addConflicts('zsh', 'EQ', ('0', '1', '1'))
-
-
-    def runOperation(self, args, installed=[], available=[]):
-        depsolver = YumBaseCli()
-        depsolver.rpmdb  = packageSack.PackageSack()
-        depsolver._pkgSack  = packageSack.PackageSack()
-        depsolver.repo = FakeRepo("installed")
-        depsolver.conf = FakeConf()
-        depsolver.doLoggingSetup(-1, -1)
-        self.depsolver = depsolver
-
-        for po in installed:
-            po.repoid = po.repo.id = "installed"
-            self.depsolver.rpmdb.addPackage(po)
-        for po in available:
-            self.depsolver._pkgSack.addPackage(po)
-
-        self.depsolver.basecmd = args[0]
-        self.depsolver.extcmds = args[1:]
-        res, msg = self.depsolver.doCommands()
-        if res!=2:
-            return res, msg
-        return self.depsolver.buildTransaction()
-
-    def assertResult(self, pkgs, optional_pkgs=[], check_multilib_versions=True):
-        errors = ["assertResult:\n"]
-        pkgs = set(pkgs)
-        optional_pkgs = set(optional_pkgs)
-        installed = set()
-
-        for pkg in self.depsolver.rpmdb:
-            # got removed
-            if self.depsolver.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
-                if pkg in pkgs:
-                    errors.append("Package %s got removed!\n" % pkg)
-            else: # still installed
-                installed.add(pkg)
-                if pkg not in pkgs and pkg not in optional_pkgs:
-                    errors.append("Package %s didn't got removed!\n" % pkg)
-
-        for txmbr in self.depsolver.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
-            installed.add(txmbr.po)
-            if txmbr.po not in pkgs and txmbr.po not in optional_pkgs:
-                errors.append("Package %s got installed!\n" % txmbr.po)
-        for pkg in pkgs - installed:
-            errors.append("Package %s didn't got installed!\n" % pkg)
-
-        if len(errors) > 1:
-            self.fail("".join(errors))
-
-    #######################################################################
-    ### Tests #############################################################
-    #######################################################################
+        pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
+        pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
 
     def testUpdatei386ToMultilib(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386, p.update_x86_64])
-        self.assert_(res==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_i386, p.requires_update))
         else:
             self.assertResult((p.installed_i386, p.update_x86_64, p.requires_update))
     def testUpdatei386ToMultilibForDependencyFix(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
-        self.assert_(res==2, msg)
+        self.assert_(res=='ok', msg)
         self.assertResult((p.update_i386, 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==2, msg)
+        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==2, msg)
+        self.assert_(res=='ok', msg)
         self.assertResult((p.update_x86_64, 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==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
         else:
             self.assertResult((p.installed_i386, p.update_x86_64,  p.requires_update))
@@ -143,13 +65,13 @@ class OperationsTests(unittest.TestCase):
     def testUpdatei386Tonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_noarch])
-        self.assert_(res==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_noarch, p.requires_update))
         else:
             self.assertResult((p.installed_i386, p.update_noarch, p.requires_update))
@@ -157,16 +79,16 @@ class OperationsTests(unittest.TestCase):
     def testUpdateMultilibTonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_noarch])
-        self.assert_(res==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_noarch,))
         else:
             self.assertResult((p.update_noarch, p.installed_x86_64))
     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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_noarch, p.requires_update))
         else:
             self.assertResult((p.installed_i386, p.installed_x86_64, p.update_noarch, p.requires_update))
@@ -174,37 +96,56 @@ class OperationsTests(unittest.TestCase):
     def testUpdatenoarchToMultilib(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386, p.update_x86_64])
-        self.assert_(res==2, msg)
-        if testbase.new_behavior:
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
         else:
             self.assertResult((p.installed_noarch, p.update_x86_64, p.requires_update))
     def testUpdatenoarchToMultilibForDependencyFix(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_noarch, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
-        self.assert_(res==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.update_i386, p.update_x86_64, p.requires_update)) # ?
         else:
             self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
 
-    ###################################################
-    ###   Obsoletes   #################################
-    ###################################################
+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==2, msg)
-        if testbase.new_behavior:
+        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))
@@ -212,8 +153,8 @@ class OperationsTests(unittest.TestCase):
         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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes), (p.obsoletes_i386,))
         else:
             self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
@@ -227,13 +168,13 @@ class OperationsTests(unittest.TestCase):
     def testObsoletei386ToMultiarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64])
-        self.assert_(res==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
         else:
             self.assertResult((p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes))
@@ -247,14 +188,14 @@ class OperationsTests(unittest.TestCase):
     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==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
         else:
             self.assertResult((p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
@@ -262,14 +203,14 @@ class OperationsTests(unittest.TestCase):
     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==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
         else:
             self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
@@ -277,29 +218,39 @@ class OperationsTests(unittest.TestCase):
     def testObsoleteMultiarchTonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch])
-        self.assert_(res==2, msg)
+        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==2, msg)
-        if testbase.new_behavior:
+        self.assert_(res=='ok', msg)
+        if new_behavior:
             self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
         else:
             self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_noarch, p.requires_obsoletes))
 
-    # Obsolete for conflict
+# Obsolete for conflict
+class ComplicatedTests(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        SimpleObsoleteTests.buildPkgs(pkgs)
+        # conflicts
+        pkgs.conflicts = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
+        pkgs.conflicts.addConflicts('zsh', 'EQ', ('0', '1', '1'))
 
     def testObsoleteForConflict(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'super-zippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.conflicts])
-        if testbase.new_behavior:
-            self.assert_(res==2, msg)
+        if new_behavior:
+            self.assert_(res=='ok', msg)
             self.assertResult((p.obsoletes_i386, p.conflicts))
 
 def suite():
     suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(OperationsTests))
+    suite.addTest(unittest.makeSuite(SimpleUpdateTests))
+    suite.addTest(unittest.makeSuite(SimpleObsoleteTests))
+    suite.addTest(unittest.makeSuite(ComplicatedTests))
     return suite
 
 if __name__ == "__main__":
diff --git a/test/testbase.py b/test/testbase.py
index e2faf7e..a779a08 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -1,4 +1,5 @@
 import sys
+import unittest
 
 # Adjust path so we can see the src modules running from branch as well
 # as test dir:
@@ -8,3 +9,233 @@ sys.path.insert(0, './')
 
 new_behavior = "--new_behavior" in sys.argv
 sys.argv = filter("--new_behavior".__ne__, sys.argv)
+
+from yum import YumBase
+from yum import transactioninfo
+from yum import packages
+from yum import packageSack
+from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
+from cli import YumBaseCli
+
+#############################################################
+### Helper classes ##########################################
+#############################################################
+
+class FakeConf(object):
+
+    def __init__(self):
+        self.installonlypkgs = []
+        self.exclude = []
+        self.debuglevel = 0
+        self.obsoletes = True
+        self.exactarch = False
+        self.exactarchlist = []
+        self.installroot = '/'
+        self.tsflags = []
+        self.installonly_limit = 0
+
+class FakeRepo(object):
+
+    def __init__(self, id=None):
+        self.id = id
+
+class FakePackage(packages.YumAvailablePackage):
+
+    def __init__(self, name, version, release, epoch, arch, repo=None):
+        if repo is None:
+            repo = FakeRepo()
+        packages.YumAvailablePackage.__init__(self, repo)
+
+        self.name = name
+        self.version = version
+        self.ver = version
+        self.release = release
+        self.rel = release
+        self.epoch = epoch
+        self.arch = arch
+
+        self.prco['provides'].append((name, 'EQ', (epoch, version, release)))
+
+        # Just a unique integer
+        self.id = self.__hash__()
+
+    def addProvides(self, name, flag=None, evr=(None, None, None)):
+        self.prco['provides'].append((name, flag, evr))
+    def addRequires(self, name, flag=None, evr=(None, None, None)):
+        self.prco['requires'].append((name, flag, evr))
+    def addConflicts(self, name, flag=None, evr=(None, None, None)):
+        self.prco['conflicts'].append((name, flag, evr))
+    def addObsoletes(self, name, flag=None, evr=(None, None, None)):
+        self.prco['obsoletes'].append((name, flag, evr))
+    def addFile(self, name, ftype='file'):
+        self.files[ftype].append(name)
+
+
+class TestingDepsolve(YumBase):
+
+    def __init__(self, tsInfo, rpmdb, pkgSack):
+        YumBase.__init__(self)
+
+        self.conf = FakeConf()
+        self.tsInfo = tsInfo
+        self._tsInfo = tsInfo
+        self.rpmdb = rpmdb
+        self.pkgSack = pkgSack
+
+    def getInstalledPackageObject(self, pkgtup):
+        return self.rpmdb.searchNevra(pkgtup[0], pkgtup[2], pkgtup[3],
+                pkgtup[4], pkgtup[1])[0]
+
+
+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)
+
+    solver = TestingDepsolve(tsInfo, rpmdb, pkgSack)
+    return solver
+
+class _Container(object):
+    pass
+
+
+#######################################################################
+### Abstract super class for test cases ###############################
+#######################################################################
+
+class _DepsolveTestsBase(unittest.TestCase):
+
+    res = {0 : 'empty', 2 : 'ok', 1 : 'err'}
+
+    def __init__(self, methodName='runTest'):
+        unittest.TestCase.__init__(self, methodName)
+        self.pkgs = _Container()
+        self.buildPkgs(self.pkgs)
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        """Overload this staticmethod to create pkpgs that are used in several
+        test cases. It gets called from __init__ with self.pkgs as first parameter.
+        It is a staticmethod so you can call .buildPkgs() from other Tests to share
+        buildPkg code (inheritance doesn't work here, because we don't want to
+        inherit the test cases, too).
+        """
+        pass
+
+    def assertResult(self, pkgs, optional_pkgs=[]):
+        """Check if "system" contains the given pkgs. pkgs must be present,
+        optional_pkgs may be. Any other pkgs result in an error. Pkgs are
+        present if they are in the rpmdb and are not REMOVEd or they
+        are INSTALLed.
+        """
+        errors = ["assertResult:\n"]
+        pkgs = set(pkgs)
+        optional_pkgs = set(optional_pkgs)
+        installed = set()
+
+        for pkg in self.rpmdb:
+            # got removed
+            if self.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
+                if pkg in pkgs:
+                    errors.append("Package %s got removed!\n" % pkg)
+            else: # still installed
+                installed.add(pkg)
+                if pkg not in pkgs and pkg not in optional_pkgs:
+                    errors.append("Package %s didn't got removed!\n" % pkg)
+
+        for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
+            installed.add(txmbr.po)
+            if txmbr.po not in pkgs and txmbr.po not in optional_pkgs:
+                errors.append("Package %s got installed!\n" % txmbr.po)
+        for pkg in pkgs - installed:
+            errors.append("Package %s didn't got installed!\n" % pkg)
+
+        if len(errors) > 1:
+            self.fail("".join(errors))
+
+#######################################################################
+### Derive Tests from these classes or unittest.TestCase ##############
+#######################################################################
+
+class DepsolveTests(_DepsolveTestsBase):
+    """Run depsolver on an manually  set up transaction.
+    You can add pkgs to self.rpmdb or self.tsInfo. See
+    yum/transactioninfo.py for details.
+    A typical test case looks like:
+
+    def testInstallPackageRequireInstalled(self):
+        po = FakePackage('zsh', '1', '1', None, 'i386')
+        po.addRequires('zip', 'EQ', (None, '1.3', '2'))
+        self.tsInfo.addInstall(po)
+
+        ipo = FakePackage('zip', '1.3', '2', None, 'i386')
+        self.rpmdb.addPackage(ipo)
+
+        result, msg = self.resolveCode()
+        self.assertEquals('ok', result, msg)
+        self.assertResult((po, ipo))
+    """
+
+    def setUp(self):
+        """ Called at the start of each test. """
+        self.tsInfo = transactioninfo.TransactionData()
+        self.rpmdb  = packageSack.PackageSack()
+        self.xsack  = packageSack.PackageSack()
+        self.repo   = FakeRepo("installed")
+
+    def FakeInstPkg(self, name, version, release, epoch, arch):
+        return FakePackage(name, version, release, epoch, arch, self.repo)
+
+    def resolveCode(self):
+        solver = build_depsolver(self.tsInfo, self.rpmdb, self.xsack)
+        result, msg = solver.resolveDeps()
+        return (self.res[result], msg)
+
+class OperationsTests(_DepsolveTestsBase):
+    """Run a yum command (install, update, remove, ...) in a given set of installed
+    and available pkgs. Typical test case looks like:
+
+    def testUpdate(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.installed], [p.update])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.update,))
+
+    To avoid creating the same pkgs over and over again overload the staticmethod
+    buildPkgs. It gets called from __init__ with self.pkgs as first parameter.
+    As it is a static method you can call .buildPkgs() from other Tests to share
+    buildPkg code.
+    """
+
+    def runOperation(self, args, installed=[], available=[]):
+        """Sets up and runs the depsolver. args[0] must be a valid yum command
+        ("install", "update", ...). It might be followed by pkg names as on the
+        yum command line. The pkg objects in installed are added to self.rpmdb and
+        those in available to self.xsack which is the repository to resolve
+        requirements from.
+        """
+        depsolver = YumBaseCli()
+        self.rpmdb = depsolver.rpmdb = packageSack.PackageSack()
+        self.xsack = depsolver._pkgSack  = packageSack.PackageSack()
+        self.repo = depsolver.repo = FakeRepo("installed")
+        depsolver.conf = FakeConf()
+        depsolver.doLoggingSetup(-1, -1)
+        self.depsolver = depsolver
+
+        for po in installed:
+            po.repoid = po.repo.id = "installed"
+            self.depsolver.rpmdb.addPackage(po)
+        for po in available:
+            self.depsolver._pkgSack.addPackage(po)
+
+        self.depsolver.basecmd = args[0]
+        self.depsolver.extcmds = args[1:]
+        res, msg = self.depsolver.doCommands()
+        self.tsInfo = depsolver.tsInfo
+        if res!=2:
+            return res, msg
+        res, msg = self.depsolver.buildTransaction()
+        return self.res[res], msg
commit 5a3b0127690262e2a8d55bf150d354fae0cc927f
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Oct 23 13:30:42 2007 +0200

    Fix test names that got broken by query/replace
    
    Make some test cases a bit more tolerant

diff --git a/test/operationstests.py b/test/operationstests.py
index 52291b6..d3fe9a0 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -140,12 +140,12 @@ class OperationsTests(unittest.TestCase):
         else:
             self.assertResult((p.installed_i386, p.update_x86_64,  p.requires_update))
 
-    def testUpdatei386Tobsoletes_noarch(self):
+    def testUpdatei386Tonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_noarch])
         self.assert_(res==2, msg)
         self.assertResult((p.update_noarch,))
-    def testUpdatei386Tobsoletes_noarchForDependency(self):
+    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==2, msg)
@@ -192,7 +192,7 @@ class OperationsTests(unittest.TestCase):
         res, msg = self.runOperation(['update'], [p.installed_noarch, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
         if testbase.new_behavior:
-            self.assertResult((p.update_x86_64, p.requires_update)) # ?
+            self.assertResult((p.update_i386, p.update_x86_64, p.requires_update)) # ?
         else:
             self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
 
@@ -205,7 +205,7 @@ class OperationsTests(unittest.TestCase):
         res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386, p.obsoletes_x86_64])
         self.assert_(res==2, msg)
         if testbase.new_behavior:
-            self.assertResult((p.obsoletes_x86_64,))
+            self.assertResult((p.obsoletes_x86_64,), (p.obsoletes_i386,))
         else:
             self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
     def testObsoletenoarchToMultiarchForDependency(self):
@@ -214,7 +214,7 @@ class OperationsTests(unittest.TestCase):
                                      [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
         if testbase.new_behavior:
-            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes), (p.obsoletes_i386,))
         else:
             self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
     def testObsoletenoarchToMultiarchForDependencyFix(self):
@@ -234,7 +234,7 @@ class OperationsTests(unittest.TestCase):
         res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
         if testbase.new_behavior:
-            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+            self.assertResult((p.obsoletes_i386, p.requires_obsoletes))
         else:
             self.assertResult((p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes))
     def testObsoletei386ToMultiarchForDependencyFix(self):
@@ -274,12 +274,12 @@ class OperationsTests(unittest.TestCase):
         else:
             self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
 
-    def testObsoleteMultiarchTobsoletes_noarch(self):
+    def testObsoleteMultiarchTonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch])
         self.assert_(res==2, msg)
         self.assertResult((p.obsoletes_noarch,))
-    def testObsoleteMultiarchTobsoletes_noarchForDependency(self):
+    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==2, msg)
commit fbcc65faa73b7540eb6a341c64aa485c43dfedcd
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Oct 23 11:33:09 2007 +0200

    Print depsolve message if test fails

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 5f08a86..e639709 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -106,7 +106,7 @@ class DepsolveTests(unittest.TestCase):
         solver = build_depsolver(self.tsInfo, self.rpmdb, self.xsack)
         result = solver.resolveDeps()
         res = {0 : 'empty', 2 : 'ok', 1 : 'err'}
-        return (res[result[0]])
+        return (res[result[0]], result[1])
 
     def assertResult(self, pkgs, optional_pkgs=[], check_multilib_versions=True):
         errors = ["assertResult:\n"]
@@ -138,13 +138,13 @@ class DepsolveTests(unittest.TestCase):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         self.tsInfo.addInstall(po)
         self.tsInfo.remove(po.pkgtup)
-        self.assertEquals('empty', self.resolveCode())
+        self.assertEquals('empty', *self.resolveCode())
 
     def testInstallSinglePackageNoRequires(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         self.tsInfo.addInstall(po)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po,))
 
     def testInstallSinglePackageRequireNotProvided(self):
@@ -152,7 +152,7 @@ class DepsolveTests(unittest.TestCase):
         po.addRequires('zip', None, (None, None, None))
         self.tsInfo.addInstall(po)
 
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireInstalled(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -162,7 +162,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1', '1', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireInstalledRequireNotProvided(self):
@@ -174,7 +174,7 @@ class DepsolveTests(unittest.TestCase):
         po.addRequires('zap', None, (None, None, None))
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireInstalledRequireInstall(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -187,7 +187,7 @@ class DepsolveTests(unittest.TestCase):
         po.addRequires('zap', None, (None, None, None))
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, po2, ipo))
 
 
@@ -199,7 +199,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.0', '2', None, 'i386')
         self.rpmdb.addPackage(ipo)
         
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireVer1Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -209,7 +209,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '2', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireVer2NotProvided(self):
@@ -220,7 +220,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '2', None, 'i386')
         self.rpmdb.addPackage(ipo)
         
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireVer2Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -230,7 +230,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '4', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireVer3NotProvided(self):
@@ -241,7 +241,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '4', '0', 'i386')
         self.rpmdb.addPackage(ipo)
         
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireVer3Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -251,7 +251,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireVer4NotProvided(self):
@@ -262,7 +262,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
         self.rpmdb.addPackage(ipo)
         
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireVer4_1Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -272,7 +272,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.0', '4', '2', 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_2Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -282,7 +282,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '3', '2', 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_3Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -292,7 +292,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = self.FakeInstPkg('zip', '1.3', '4', None, 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_4Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -302,7 +302,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '1.3', '4', '1', 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_5Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -312,7 +312,7 @@ class DepsolveTests(unittest.TestCase):
         ipo = FakePackage('zip', '0.3', '4', '2', 'i386')
         self.rpmdb.addPackage(ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireXtraBadVer(self):
@@ -327,7 +327,7 @@ class DepsolveTests(unittest.TestCase):
         xpo = FakePackage('zap', '1.3', '4', '0', 'i386')
         self.xsack.addPackage(xpo)
 
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireXtra(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -341,7 +341,7 @@ class DepsolveTests(unittest.TestCase):
         xpo = FakePackage('zap', '2.6', '8', '4', 'i386')
         self.xsack.addPackage(xpo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo, xpo))
         
     def testInstallSinglePackageRequireInstalledRequireXtra(self):
@@ -356,7 +356,7 @@ class DepsolveTests(unittest.TestCase):
         xpo = FakePackage('zap', '2.6', '8', '4', 'i386')
         self.xsack.addPackage(xpo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
         
     def testInstallSinglePackageRequireUpgradeRequireXtraErr(self):
@@ -375,7 +375,7 @@ class DepsolveTests(unittest.TestCase):
         xpo.addRequires('zsh', 'EQ', ('2', '4', '8'))
         self.xsack.addPackage(xpo)
 
-        self.assertEquals('err', self.resolveCode())
+        self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireUpgradeRequireXtraOk(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -392,7 +392,7 @@ class DepsolveTests(unittest.TestCase):
         xpo2 = FakePackage('zap', '1.3', '4', '2', 'i386')
         self.xsack.addPackage(xpo2)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo, xpo2))
         
     def testInstallSinglePackageRequireMultiXtra(self):
@@ -407,7 +407,7 @@ class DepsolveTests(unittest.TestCase):
         xpo2 = FakePackage('zap', '1.3', '4', '2', 'i386')
         self.xsack.addPackage(xpo2)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo, xpo2))
         
     def testInstallSinglePackageRequireInstalledMultiLib(self):
@@ -421,7 +421,7 @@ class DepsolveTests(unittest.TestCase):
         xpo = FakePackage('zip', '1', '3', None, 'x86_64')
         self.xsack.addPackage(xpo)
         
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireXtra1MultiLib(self):
@@ -431,8 +431,7 @@ class DepsolveTests(unittest.TestCase):
 
         xpo = FakePackage('zip', '1', '3', None, 'i386')
         self.xsack.addPackage(xpo)
-
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo))
 
     def testInstallSinglePackageRequireXtra2_64MultiLib(self):
@@ -445,7 +444,7 @@ class DepsolveTests(unittest.TestCase):
         xpo64 = FakePackage('zip', '1', '3', None, 'x86_64')
         self.xsack.addPackage(xpo64)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo64))
 
     def testInstallSinglePackageRequireXtra2_32MultiLib(self):
@@ -458,7 +457,7 @@ class DepsolveTests(unittest.TestCase):
         xpo64 = FakePackage('zip', '1', '3', None, 'x86_64')
         self.xsack.addPackage(xpo64)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackage(self):
@@ -468,7 +467,7 @@ class DepsolveTests(unittest.TestCase):
         po = FakePackage('zsh', '1', '3', None, 'i386')
         self.tsInfo.addUpdate(po, oldpo=ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po,))
 
     def testUpdateForDependency(self):
@@ -482,7 +481,7 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, updatepo))
 
     def testUpdateSplitPackage(self):
@@ -501,7 +500,7 @@ class DepsolveTests(unittest.TestCase):
         updatepo2.addProvides('libzip', 'EQ', ('0', '2', '1'))
         self.xsack.addPackage(updatepo2)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         #self.assertResult((po, updatepo, updatepo2)) # XXX obsolete needed?
         self.assertResult((po, installedpo, updatepo2))
 
@@ -516,7 +515,7 @@ class DepsolveTests(unittest.TestCase):
         xpo = FakePackage('zip', '1', '3', None, 'x86_64')
         self.xsack.addPackage(xpo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackageOldRequires(self):
@@ -531,7 +530,7 @@ class DepsolveTests(unittest.TestCase):
         po.addRequires('zip', None, (None, None, None))
         self.tsInfo.addUpdate(po, oldpo=ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackageOldRequiresGone(self):
@@ -545,7 +544,7 @@ class DepsolveTests(unittest.TestCase):
         po = FakePackage('zsh', '1', '3', None, 'i386')
         self.tsInfo.addUpdate(po, oldpo=ipo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, xpo))
 
     def testUpdateSinglePackageObsoletesOldRequirement(self):
@@ -564,7 +563,7 @@ class DepsolveTests(unittest.TestCase):
         self.tsInfo.addObsoleting(po, opo)
         self.tsInfo.addObsoleted(opo, po)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po,))
 
     def testUpdateForConflict(self):
@@ -579,10 +578,10 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         if testbase.new_behavior:
-            self.assertEquals('ok', self.resolveCode())
+            self.assertEquals('ok', *self.resolveCode())
             self.assertResult((po, updatepo))
         else:
-            self.assertEquals('err', self.resolveCode())
+            self.assertEquals('err', *self.resolveCode())
 
     def testUpdateForConflict2(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
@@ -595,7 +594,7 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, updatepo))
 
     def testUpdateForConflictProvide(self):
@@ -611,10 +610,10 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         if testbase.new_behavior:
-            self.assertEquals('ok', self.resolveCode())
+            self.assertEquals('ok', *self.resolveCode())
             self.assertResult((po, updatepo))
         else:
-            self.assertEquals('err', self.resolveCode())
+            self.assertEquals('err', *self.resolveCode())
 
     def testUpdateForConflictProvide2(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
@@ -631,7 +630,7 @@ class DepsolveTests(unittest.TestCase):
         updatepo.addConflicts('zippy', 'LT', ('0', '2', '1'))
         self.xsack.addPackage(updatepo)
 
-        self.assertEquals('ok', self.resolveCode())
+        self.assertEquals('ok', *self.resolveCode())
         self.assertResult((po, updatepo))
 
 def suite():
commit 92131e9cd77885765e0ce65cca4e2ca2f2540602
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Oct 17 15:36:18 2007 +0200

    Remove tsInfo checks in depsolve test cases as we have assertResult() now
    
    Enable testUpdateForConflictProvide

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 64cc8d3..5f08a86 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -343,17 +343,6 @@ class DepsolveTests(unittest.TestCase):
 
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, ipo, xpo))
-
-        txmbrs = self.tsInfo.matchNaevr()
-        self.assertEquals(2, len(txmbrs))
-        txmbrs = self.tsInfo.matchNaevr('zap')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zap', 'i386', '4', '2.6', '8'), txmbrs[0].pkgtup)
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(0, len(txmbrs))
-        txmbrs = self.tsInfo.matchNaevr('zsh')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zsh', 'i386', None, '1', '1'), txmbrs[0].pkgtup)
         
     def testInstallSinglePackageRequireInstalledRequireXtra(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -368,17 +357,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(xpo)
 
         self.assertEquals('ok', self.resolveCode())
-        #self.assertResult((po, ipo, xpo)) # ????????????
-
-        txmbrs = self.tsInfo.matchNaevr()
-        self.assertEquals(1, len(txmbrs))
-        txmbrs = self.tsInfo.matchNaevr('zap')
-        self.assertEquals(0, len(txmbrs))
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(0, len(txmbrs))
-        txmbrs = self.tsInfo.matchNaevr('zsh')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zsh', 'i386', None, '1', '1'), txmbrs[0].pkgtup)
+        self.assertResult((po, ipo))
         
     def testInstallSinglePackageRequireUpgradeRequireXtraErr(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -415,24 +394,6 @@ class DepsolveTests(unittest.TestCase):
 
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo, xpo2))
-
-        txmbrs = self.tsInfo.matchNaevr()
-        self.assertEquals(4, len(txmbrs))
-        
-        txmbrs = self.tsInfo.matchNaevr('zap')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zap', 'i386', '2', '1.3', '4'), txmbrs[0].pkgtup)
-        
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(2, len(txmbrs))
-        self.assertEquals(('zip', 'i386', '4', '2.6', '8'), txmbrs[0].pkgtup)
-        self.assertEquals(txmbrs[0].ts_state, 'u')
-        self.assertEquals(('zip', 'i386', '2', '1.3', '4'), txmbrs[1].pkgtup)
-        self.assertEquals(txmbrs[1].ts_state, None)
-        
-        txmbrs = self.tsInfo.matchNaevr('zsh')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zsh', 'i386', None, '1', '1'), txmbrs[0].pkgtup)
         
     def testInstallSinglePackageRequireMultiXtra(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -448,21 +409,6 @@ class DepsolveTests(unittest.TestCase):
 
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo, xpo2))
-
-        txmbrs = self.tsInfo.matchNaevr()
-        self.assertEquals(3, len(txmbrs))
-        
-        txmbrs = self.tsInfo.matchNaevr('zap')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zap', 'i386', '2', '1.3', '4'), txmbrs[0].pkgtup)
-        
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zip', 'i386', '4', '2.6', '8'), txmbrs[0].pkgtup)
-        
-        txmbrs = self.tsInfo.matchNaevr('zsh')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zsh', 'i386', None, '1', '1'), txmbrs[0].pkgtup)
         
     def testInstallSinglePackageRequireInstalledMultiLib(self):
         po = FakePackage('zsh', '1', '1', None, 'x86_64')
@@ -478,9 +424,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, ipo))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(0, len(txmbrs))
-
     def testInstallSinglePackageRequireXtra1MultiLib(self):
         po = FakePackage('zsh', '1', '1', None, 'x86_64')
         po.addRequires('zip', None, (None, None, None))
@@ -492,10 +435,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zip', 'i386', None, '1', '3'), txmbrs[0].pkgtup)
-
     def testInstallSinglePackageRequireXtra2_64MultiLib(self):
         po = FakePackage('zsh', '1', '1', None, 'x86_64')
         po.addRequires('zip', None, (None, None, None))
@@ -509,10 +448,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo64))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zip', 'x86_64', None, '1', '3'), txmbrs[0].pkgtup)
-
     def testInstallSinglePackageRequireXtra2_32MultiLib(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         po.addRequires('zip', None, (None, None, None))
@@ -526,10 +461,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zip', 'i386', None, '1', '3'), txmbrs[0].pkgtup)
-
     def testUpdateSinglePackage(self):
         ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
         self.rpmdb.addPackage(ipo)
@@ -540,9 +471,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po,))
 
-        txmbrs = self.tsInfo.matchNaevr('zsh')
-        self.assertEquals(2, len(txmbrs))
-
     def testUpdateForDependency(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
         po.addRequires('zip', 'EQ', ('0', '2', '1'))
@@ -556,7 +484,6 @@ class DepsolveTests(unittest.TestCase):
 
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, updatepo))
-        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup))
 
     def testUpdateSplitPackage(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
@@ -577,7 +504,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         #self.assertResult((po, updatepo, updatepo2)) # XXX obsolete needed?
         self.assertResult((po, installedpo, updatepo2))
-        self.assert_(self.tsInfo.getMembers(po.pkgtup), "Package not installed")
 
     def testUpdateSinglePackageNewRequires(self):
         ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
@@ -593,10 +519,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
-        self.assertEquals(('zip', 'x86_64', None, '1', '3'), txmbrs[0].pkgtup)
-
     def testUpdateSinglePackageOldRequires(self):
         ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
         ipo.addRequires('zip', None, (None, None, None))
@@ -612,9 +534,6 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, xpo))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(0, len(txmbrs))
-
     def testUpdateSinglePackageOldRequiresGone(self):
         ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
         ipo.addRequires('zip', None, (None, None, None))
@@ -648,18 +567,7 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po,))
 
-        txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
-
-        txmbrs = self.tsInfo.matchNaevr(name='zsh', rel='3')
-        self.assertEquals(1, len(txmbrs))
-        self.assertTrue('i', txmbrs[0].ts_state)
-
-        txmbrs = self.tsInfo.matchNaevr(name='zsh', rel='1')
-        self.assertEquals(1, len(txmbrs))
-        self.assertTrue('e', txmbrs[0].ts_state)
-
-    def _XXX_testUpdateForConflict(self):
+    def testUpdateForConflict(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
         po.addConflicts('zip', 'LE', ('0', '1', '1'))
         self.tsInfo.addInstall(po)
@@ -670,9 +578,11 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        self.assertEquals('ok', self.resolveCode())
-        self.assertResult((po, updatepo))
-        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+        if testbase.new_behavior:
+            self.assertEquals('ok', self.resolveCode())
+            self.assertResult((po, updatepo))
+        else:
+            self.assertEquals('err', self.resolveCode())
 
     def testUpdateForConflict2(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
@@ -687,9 +597,8 @@ class DepsolveTests(unittest.TestCase):
 
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, updatepo))
-        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
-    def _XXX_testUpdateForConflictProvide(self):
+    def testUpdateForConflictProvide(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
         po.addConflicts('zippy', 'LE', ('0', '1', '1'))
         self.tsInfo.addInstall(po)
@@ -701,9 +610,11 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         self.xsack.addPackage(updatepo)
 
-        self.assertEquals('ok', self.resolveCode())
-        self.assertResult((po, updatepo))
-        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+        if testbase.new_behavior:
+            self.assertEquals('ok', self.resolveCode())
+            self.assertResult((po, updatepo))
+        else:
+            self.assertEquals('err', self.resolveCode())
 
     def testUpdateForConflictProvide2(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
@@ -722,7 +633,6 @@ class DepsolveTests(unittest.TestCase):
 
         self.assertEquals('ok', self.resolveCode())
         self.assertResult((po, updatepo))
-        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
 def suite():
     suite = unittest.TestSuite()
commit 01960193638500a8a33888ce0b255892047a168e
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Oct 17 14:25:39 2007 +0200

    Add --new_behavior param to test suite
    
    Rename settestpath to testbase
    Support --new_behavior in all operationstests cases where current behavior is questionable

diff --git a/Makefile b/Makefile
index 300534f..20274a9 100644
--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,9 @@ test:
 
 check: test
 
+testnewbehavior:
+	python test/alltests.py --new_behavior
+
 archive: remove_spec = ${PKGNAME}-daily.spec
 archive: _archive
 
diff --git a/test/alltests.py b/test/alltests.py
index 93eb7b0..a0911db 100644
--- a/test/alltests.py
+++ b/test/alltests.py
@@ -1,5 +1,5 @@
 import unittest
-import settestpath
+import testbase
 
 import depsolvetests
 import packagetests
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index cdd4174..64cc8d3 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -1,5 +1,5 @@
 import unittest
-import settestpath
+import testbase
 
 from yum import YumBase
 from yum import transactioninfo
diff --git a/test/operationstests.py b/test/operationstests.py
index fa21724..52291b6 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -1,4 +1,5 @@
 import unittest
+import testbase
 
 from depsolvetests import FakePackage, FakeRepo, FakeConf
 from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
@@ -103,8 +104,10 @@ class OperationsTests(unittest.TestCase):
         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==2, msg)
-        self.assertResult((p.installed_i386, p.update_x86_64, p.requires_update))
-        #self.assertResult((p.update_i386, p.requires_update))
+        if testbase.new_behavior:
+            self.assertResult((p.update_i386, p.requires_update))
+        else:
+            self.assertResult((p.installed_i386, p.update_x86_64, p.requires_update))
     def testUpdatei386ToMultilibForDependencyFix(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
@@ -132,8 +135,10 @@ class OperationsTests(unittest.TestCase):
         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==2, msg)
-        #self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
-        self.assertResult((p.installed_i386, p.update_x86_64,  p.requires_update))
+        if testbase.new_behavior:
+            self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
+        else:
+            self.assertResult((p.installed_i386, p.update_x86_64,  p.requires_update))
 
     def testUpdatei386Tobsoletes_noarch(self):
         p = self.pkgs
@@ -144,61 +149,78 @@ class OperationsTests(unittest.TestCase):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_noarch, p.requires_update])
         self.assert_(res==2, msg)
-        #self.assertResult((p.update_noarch, p.requires_update))
-        self.assertResult((p.installed_i386, p.update_noarch, p.requires_update))
+        if testbase.new_behavior:
+            self.assertResult((p.update_noarch, p.requires_update))
+        else:
+            self.assertResult((p.installed_i386, p.update_noarch, p.requires_update))
 
-    def testUpdateMultilibTobsoletes_noarch(self):
+    def testUpdateMultilibTonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_noarch])
         self.assert_(res==2, msg)
-        #self.assertResult((p.update_noarch,))
-        self.assertResult((p.update_noarch, p.installed_x86_64))
-    def testUpdateMultilibTobsoletes_noarchForDependency(self):
+        if testbase.new_behavior:
+            self.assertResult((p.update_noarch,))
+        else:
+            self.assertResult((p.update_noarch, p.installed_x86_64))
+    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==2, msg)
-        #self.assertResult((p.update_noarch, p.requires_update))
-        self.assertResult((p.installed_i386, p.installed_x86_64, p.update_noarch, p.requires_update))
+        if testbase.new_behavior:
+            self.assertResult((p.update_noarch, p.requires_update))
+        else:
+            self.assertResult((p.installed_i386, p.installed_x86_64, p.update_noarch, 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==2, msg)
-        self.assertResult((p.update_i386, p.update_x86_64))
-        # self.assertResult((p.update_x86_64)) # ?
+        if testbase.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==2, msg)
-        # self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
-        # self.assertResult((p.update_x86_64, p.requires_update))
-        self.assertResult((p.installed_noarch, p.update_x86_64, p.requires_update))
+        if testbase.new_behavior:
+            self.assertResult((p.update_x86_64, p.requires_update), (p.update_i386,))
+        else:
+            self.assertResult((p.installed_noarch, p.update_x86_64, p.requires_update))
     def testUpdatenoarchToMultilibForDependencyFix(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.installed_noarch, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
-        # self.assertResult((p.update_x86_64, p.requires_update)) # ?
+        if testbase.new_behavior:
+            self.assertResult((p.update_x86_64, p.requires_update)) # ?
+        else:
+            self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
 
-    # obsoletes
+    ###################################################
+    ###   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==2, msg)
-        #self.assertResult((p.obsoletes_x86_64,))
-        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
+        if testbase.new_behavior:
+            self.assertResult((p.obsoletes_x86_64,))
+        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==2, msg)
-        #self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
-        self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
+        if testbase.new_behavior:
+            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+        else:
+            self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
     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==2, msg)
+        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))
 
@@ -211,13 +233,15 @@ class OperationsTests(unittest.TestCase):
         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==2, msg)
-        #self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
-        self.assertResult((p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+        if testbase.new_behavior:
+            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+        else:
+            self.assertResult((p.installed_i386, p.obsoletes_x86_64, 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==2, msg)
-        #self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+        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):
@@ -230,8 +254,10 @@ class OperationsTests(unittest.TestCase):
         res, msg = self.runOperation(['install', 'superzippy'], 
                                      [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
-        #self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
-        self.assertResult((p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
+        if testbase.new_behavior:
+            self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+        else:
+            self.assertResult((p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
 
     def testObsoleteMultiarchToMultiarch(self):
         p = self.pkgs
@@ -243,8 +269,10 @@ class OperationsTests(unittest.TestCase):
         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==2, msg)
-        #self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
-        self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
+        if testbase.new_behavior:
+            self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+        else:
+            self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
 
     def testObsoleteMultiarchTobsoletes_noarch(self):
         p = self.pkgs
@@ -255,16 +283,19 @@ class OperationsTests(unittest.TestCase):
         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==2, msg)
-        #self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
-        self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_noarch, p.requires_obsoletes))
+        if testbase.new_behavior:
+            self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
+        else:
+            self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_noarch, p.requires_obsoletes))
 
     # Obsolete for conflict
 
-    def _XXX_testObsoleteForConflict(self):
+    def testObsoleteForConflict(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'super-zippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.conflicts])
-        self.assert_(res==2, msg)
-        self.assertResult((p.obsoletes_i386, p.conflicts))
+        if testbase.new_behavior:
+            self.assert_(res==2, msg)
+            self.assertResult((p.obsoletes_i386, p.conflicts))
 
 def suite():
     suite = unittest.TestSuite()
diff --git a/test/packagetests.py b/test/packagetests.py
index 56f73ec..b45d629 100644
--- a/test/packagetests.py
+++ b/test/packagetests.py
@@ -1,5 +1,5 @@
 import unittest
-import settestpath
+import testbase
 
 from yum import packages
 from rpmUtils import miscutils
diff --git a/test/testbase.py b/test/testbase.py
new file mode 100644
index 0000000..e2faf7e
--- /dev/null
+++ b/test/testbase.py
@@ -0,0 +1,10 @@
+import sys
+
+# Adjust path so we can see the src modules running from branch as well
+# as test dir:
+sys.path.insert(0, '../../')
+sys.path.insert(0, '../')
+sys.path.insert(0, './')
+
+new_behavior = "--new_behavior" in sys.argv
+sys.argv = filter("--new_behavior".__ne__, sys.argv)
commit a8213ea44e614a1150d022165a8440c3942b538e
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Oct 17 17:30:52 2007 +0200

    Use more verbose pkg names

diff --git a/test/operationstests.py b/test/operationstests.py
index 5e93502..fa21724 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -14,32 +14,32 @@ class OperationsTests(unittest.TestCase):
         unittest.TestCase.__init__(self, methodName)
         self.pkgs = Container()
         # installed
-        self.pkgs.ii386 = FakePackage('zsh', '1', '1', '0', 'i386')
-        self.pkgs.ix86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
-        self.pkgs.inoarch = FakePackage('zsh', '1', '1', '0', 'noarch')
+        self.pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
+        self.pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
+        self.pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
         # updates
-        self.pkgs.ui386 = FakePackage('zsh', '2', '1', '0', 'i386')
-        self.pkgs.ux86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
-        self.pkgs.unoarch = FakePackage('zsh', '2', '1', '0', 'noarch')
+        self.pkgs.update_i386 = FakePackage('zsh', '2', '1', '0', 'i386')
+        self.pkgs.update_x86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
+        self.pkgs.update_noarch = FakePackage('zsh', '2', '1', '0', 'noarch')
         # requires update
-        self.pkgs.ru = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
-        self.pkgs.ru.addRequires('zsh', 'EQ', ('0', '2', '1'))
+        self.pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
+        self.pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
         # obsoletes
-        self.pkgs.oi386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
-        self.pkgs.oi386.addObsoletes('zsh', None, (None, None, None))
-        self.pkgs.oi386.addProvides('zzz')
-        self.pkgs.ox86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
-        self.pkgs.ox86_64.addObsoletes('zsh', None, (None, None, None))
-        self.pkgs.ox86_64.addProvides('zzz')
-        self.pkgs.onoarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
-        self.pkgs.onoarch.addObsoletes('zsh', None, (None, None, None))
-        self.pkgs.onoarch.addProvides('zzz')
+        self.pkgs.obsoletes_i386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
+        self.pkgs.obsoletes_i386.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.obsoletes_i386.addProvides('zzz')
+        self.pkgs.obsoletes_x86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
+        self.pkgs.obsoletes_x86_64.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.obsoletes_x86_64.addProvides('zzz')
+        self.pkgs.obsoletes_noarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
+        self.pkgs.obsoletes_noarch.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.obsoletes_noarch.addProvides('zzz')
         # requires obsoletes
-        self.pkgs.ro = FakePackage('superzippy', '3.5', '3', '0', 'noarch')
-        self.pkgs.ro.addRequires('zzz')
+        self.pkgs.requires_obsoletes = FakePackage('superzippy', '3.5', '3', '0', 'noarch')
+        self.pkgs.requires_obsoletes.addRequires('zzz')
         # conflicts
-        self.pkgs.conflict = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
-        self.pkgs.conflict.addConflicts('zsh', 'EQ', ('0', '1', '1'))
+        self.pkgs.conflicts = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
+        self.pkgs.conflicts.addConflicts('zsh', 'EQ', ('0', '1', '1'))
 
 
     def runOperation(self, args, installed=[], available=[]):
@@ -96,175 +96,175 @@ class OperationsTests(unittest.TestCase):
 
     def testUpdatei386ToMultilib(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386], [p.ui386, p.ux86_64])
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ui386,))
+        self.assertResult((p.update_i386,))
     def testUpdatei386ToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386], [p.ui386, p.ux86_64, p.ru])
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_i386, p.update_x86_64, p.requires_update])
         self.assert_(res==2, msg)
-        self.assertResult((p.ii386, p.ux86_64, p.ru))
-        #self.assertResult((p.ui386, p.ru))
+        self.assertResult((p.installed_i386, p.update_x86_64, p.requires_update))
+        #self.assertResult((p.update_i386, p.requires_update))
     def testUpdatei386ToMultilibForDependencyFix(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386, p.ux86_64, p.ru], [p.ui386, p.ux86_64])
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ui386, p.ux86_64, p.ru))
+        self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
 
     def testUpdatex86_64ToMultilib(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ix86_64], [p.ui386, p.ux86_64])
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ux86_64,))
+        self.assertResult((p.update_x86_64,))
     def testUpdatex86_64ToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ix86_64], 
-                                     [p.ui386, p.ux86_64, p.ru])
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_x86_64], 
+                                     [p.update_i386, p.update_x86_64, p.requires_update])
         self.assert_(res==2, msg)
-        self.assertResult((p.ux86_64, p.ru))
+        self.assertResult((p.update_x86_64, p.requires_update))
 
     def testUpdateMultilibToMultilib(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.ui386, p.ux86_64])
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ui386, p.ux86_64))
+        self.assertResult((p.update_i386, p.update_x86_64))
     def testUpdateMultilibToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386, p.ix86_64], [p.ui386, p.ux86_64, p.ru])
+        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==2, msg)
-        #self.assertResult((p.ui386, p.ux86_64,  p.ru))
-        self.assertResult((p.ii386, p.ux86_64,  p.ru))
+        #self.assertResult((p.update_i386, p.update_x86_64,  p.requires_update))
+        self.assertResult((p.installed_i386, p.update_x86_64,  p.requires_update))
 
-    def testUpdatei386Tonoarch(self):
+    def testUpdatei386Tobsoletes_noarch(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386], [p.unoarch])
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.update_noarch])
         self.assert_(res==2, msg)
-        self.assertResult((p.unoarch,))
-    def testUpdatei386TonoarchForDependency(self):
+        self.assertResult((p.update_noarch,))
+    def testUpdatei386Tobsoletes_noarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386], [p.unoarch, p.ru])
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386], [p.update_noarch, p.requires_update])
         self.assert_(res==2, msg)
-        #self.assertResult((p.unoarch, p.ru))
-        self.assertResult((p.ii386, p.unoarch, p.ru))
+        #self.assertResult((p.update_noarch, p.requires_update))
+        self.assertResult((p.installed_i386, p.update_noarch, p.requires_update))
 
-    def testUpdateMultilibTonoarch(self):
+    def testUpdateMultilibTobsoletes_noarch(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.unoarch])
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.update_noarch])
         self.assert_(res==2, msg)
-        #self.assertResult((p.unoarch,))
-        self.assertResult((p.unoarch, p.ix86_64))
-    def testUpdateMultilibTonoarchForDependency(self):
+        #self.assertResult((p.update_noarch,))
+        self.assertResult((p.update_noarch, p.installed_x86_64))
+    def testUpdateMultilibTobsoletes_noarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386, p.ix86_64], [p.unoarch, p.ru])
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_i386, p.installed_x86_64], [p.update_noarch, p.requires_update])
         self.assert_(res==2, msg)
-        #self.assertResult((p.unoarch, p.ru))
-        self.assertResult((p.ii386, p.ix86_64, p.unoarch, p.ru))
+        #self.assertResult((p.update_noarch, p.requires_update))
+        self.assertResult((p.installed_i386, p.installed_x86_64, p.update_noarch, p.requires_update))
 
     def testUpdatenoarchToMultilib(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.inoarch], [p.ui386, p.ux86_64])
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ui386, p.ux86_64))
-        # self.assertResult((p.ux86_64)) # ?
+        self.assertResult((p.update_i386, p.update_x86_64))
+        # self.assertResult((p.update_x86_64)) # ?
     def testUpdatenoarchToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.inoarch], [p.ui386, p.ux86_64, p.ru])
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.installed_noarch], [p.update_i386, p.update_x86_64, p.requires_update])
         self.assert_(res==2, msg)
-        # self.assertResult((p.ui386, p.ux86_64, p.ru))
-        # self.assertResult((p.ux86_64, p.ru))
-        self.assertResult((p.inoarch, p.ux86_64, p.ru))
+        # self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
+        # self.assertResult((p.update_x86_64, p.requires_update))
+        self.assertResult((p.installed_noarch, p.update_x86_64, p.requires_update))
     def testUpdatenoarchToMultilibForDependencyFix(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.inoarch, p.ux86_64, p.ru], [p.ui386, p.ux86_64])
+        res, msg = self.runOperation(['update'], [p.installed_noarch, p.update_x86_64, p.requires_update], [p.update_i386, p.update_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ui386, p.ux86_64, p.ru))
-        # self.assertResult((p.ux86_64, p.ru)) # ?
+        self.assertResult((p.update_i386, p.update_x86_64, p.requires_update))
+        # self.assertResult((p.update_x86_64, p.requires_update)) # ?
 
     # obsoletes
 
     def testObsoletenoarchToMultiarch(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.inoarch], [p.oi386, p.ox86_64])
+        res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386, p.obsoletes_x86_64])
         self.assert_(res==2, msg)
-        #self.assertResult((p.ox86_64,))
-        self.assertResult((p.oi386, p.ox86_64))
+        #self.assertResult((p.obsoletes_x86_64,))
+        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
     def testObsoletenoarchToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.inoarch], 
-                                     [p.oi386, p.ox86_64, p.ro])
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_noarch], 
+                                     [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
-        #self.assertResult((p.ox86_64, p.ro))
-        self.assertResult((p.inoarch, p.ox86_64, p.ro))
+        #self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+        self.assertResult((p.installed_noarch, p.obsoletes_x86_64, p.requires_obsoletes))
     def testObsoletenoarchToMultiarchForDependencyFix(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.inoarch, p.ox86_64, p.ro], [p.oi386, p.ox86_64])
+        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==2, msg)
-        #self.assertResult((p.ox86_64,)) # yes, this would be nice - but also wrong
-        self.assertResult((p.inoarch, p.ox86_64, p.ro))
+        #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.ii386], [p.oi386, p.ox86_64])
+        res, msg = self.runOperation(['update'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.oi386,))
+        self.assertResult((p.obsoletes_i386,))
     def testObsoletei386ToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.ii386], [p.oi386, p.ox86_64, p.ro])
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
-        #self.assertResult((p.ox86_64, p.ro))
-        self.assertResult((p.ii386, p.ox86_64, p.ro))
+        #self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+        self.assertResult((p.installed_i386, p.obsoletes_x86_64, p.requires_obsoletes))
     def testObsoletei386ToMultiarchForDependencyFix(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386, p.ox86_64, p.ro], [p.oi386, p.ox86_64])
+        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==2, msg)
-        #self.assertResult((p.oi386, p.ox86_64, p.ro))
-        self.assertResult((p.ii386, p.ox86_64, p.ro))
+        #self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+        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.ix86_64], [p.oi386, p.ox86_64])
+        res, msg = self.runOperation(['update'], [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.ox86_64,))
+        self.assertResult((p.obsoletes_x86_64,))
     def testObsoletex86_64ToMultiarchForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'superzippy'], 
-                                     [p.ix86_64], [p.oi386, p.ox86_64, p.ro])
+                                     [p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
-        #self.assertResult((p.ox86_64, p.ro))
-        self.assertResult((p.ix86_64, p.ox86_64, p.ro))
+        #self.assertResult((p.obsoletes_x86_64, p.requires_obsoletes))
+        self.assertResult((p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
 
     def testObsoleteMultiarchToMultiarch(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.oi386, p.ox86_64])
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64])
         self.assert_(res==2, msg)
-        self.assertResult((p.oi386, p.ox86_64))
+        self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64))
     def testObsoleteMultiarchToMultiarchForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'superzippy'], 
-                                     [p.ii386, p.ix86_64], [p.oi386, p.ox86_64, p.ro])
+                                     [p.installed_i386, p.installed_x86_64], [p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes])
         self.assert_(res==2, msg)
-        #self.assertResult((p.oi386, p.ox86_64, p.ro))
-        self.assertResult((p.ii386, p.ix86_64, p.ox86_64, p.ro))
+        #self.assertResult((p.obsoletes_i386, p.obsoletes_x86_64, p.requires_obsoletes))
+        self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_x86_64, p.requires_obsoletes))
 
-    def testObsoleteMultiarchTonoarch(self):
+    def testObsoleteMultiarchTobsoletes_noarch(self):
         p = self.pkgs
-        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.onoarch])
+        res, msg = self.runOperation(['update'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch])
         self.assert_(res==2, msg)
-        self.assertResult((p.onoarch,))
-    def testObsoleteMultiarchTonoarchForDependency(self):
+        self.assertResult((p.obsoletes_noarch,))
+    def testObsoleteMultiarchTobsoletes_noarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.ii386, p.ix86_64], [p.onoarch, p.ro])
+        res, msg = self.runOperation(['install', 'superzippy'], [p.installed_i386, p.installed_x86_64], [p.obsoletes_noarch, p.requires_obsoletes])
         self.assert_(res==2, msg)
-        #self.assertResult((p.onoarch, p.ro))
-        self.assertResult((p.ii386, p.ix86_64, p.onoarch, p.ro))
+        #self.assertResult((p.obsoletes_noarch, p.requires_obsoletes))
+        self.assertResult((p.installed_i386, p.installed_x86_64, p.obsoletes_noarch, p.requires_obsoletes))
 
     # Obsolete for conflict
 
     def _XXX_testObsoleteForConflict(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'super-zippy'], [p.ii386], [p.oi386, p.ox86_64, p.conflict])
+        res, msg = self.runOperation(['install', 'super-zippy'], [p.installed_i386], [p.obsoletes_i386, p.obsoletes_x86_64, p.conflicts])
         self.assert_(res==2, msg)
-        self.assertResult((p.oi386, p.conflict))
+        self.assertResult((p.obsoletes_i386, p.conflicts))
 
 def suite():
     suite = unittest.TestSuite()
commit 6be87d34816992396bb7ce7da388d31806ea3113
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Oct 17 12:31:39 2007 +0200

    Add test cases to see what happens when running "yum update" afterwards

diff --git a/test/operationstests.py b/test/operationstests.py
index 6c0568f..5e93502 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -105,6 +105,11 @@ class OperationsTests(unittest.TestCase):
         self.assert_(res==2, msg)
         self.assertResult((p.ii386, p.ux86_64, p.ru))
         #self.assertResult((p.ui386, p.ru))
+    def testUpdatei386ToMultilibForDependencyFix(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386, p.ux86_64, p.ru], [p.ui386, p.ux86_64])
+        self.assert_(res==2, msg)
+        self.assertResult((p.ui386, p.ux86_64, p.ru))
 
     def testUpdatex86_64ToMultilib(self):
         p = self.pkgs
@@ -160,7 +165,7 @@ class OperationsTests(unittest.TestCase):
         res, msg = self.runOperation(['update'], [p.inoarch], [p.ui386, p.ux86_64])
         self.assert_(res==2, msg)
         self.assertResult((p.ui386, p.ux86_64))
-        # self.assertResult((p.ux86_64)) # ???
+        # self.assertResult((p.ux86_64)) # ?
     def testUpdatenoarchToMultilibForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.inoarch], [p.ui386, p.ux86_64, p.ru])
@@ -168,6 +173,12 @@ class OperationsTests(unittest.TestCase):
         # self.assertResult((p.ui386, p.ux86_64, p.ru))
         # self.assertResult((p.ux86_64, p.ru))
         self.assertResult((p.inoarch, p.ux86_64, p.ru))
+    def testUpdatenoarchToMultilibForDependencyFix(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.inoarch, p.ux86_64, p.ru], [p.ui386, p.ux86_64])
+        self.assert_(res==2, msg)
+        self.assertResult((p.ui386, p.ux86_64, p.ru))
+        # self.assertResult((p.ux86_64, p.ru)) # ?
 
     # obsoletes
 
@@ -184,6 +195,12 @@ class OperationsTests(unittest.TestCase):
         self.assert_(res==2, msg)
         #self.assertResult((p.ox86_64, p.ro))
         self.assertResult((p.inoarch, p.ox86_64, p.ro))
+    def testObsoletenoarchToMultiarchForDependencyFix(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.inoarch, p.ox86_64, p.ro], [p.oi386, p.ox86_64])
+        #self.assert_(res==2, msg)
+        #self.assertResult((p.ox86_64,)) # yes, this would be nice - but also wrong
+        self.assertResult((p.inoarch, p.ox86_64, p.ro))
 
     def testObsoletei386ToMultiarch(self):
         p = self.pkgs
@@ -196,6 +213,12 @@ class OperationsTests(unittest.TestCase):
         self.assert_(res==2, msg)
         #self.assertResult((p.ox86_64, p.ro))
         self.assertResult((p.ii386, p.ox86_64, p.ro))
+    def testObsoletei386ToMultiarchForDependencyFix(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386, p.ox86_64, p.ro], [p.oi386, p.ox86_64])
+        #self.assert_(res==2, msg)
+        #self.assertResult((p.oi386, p.ox86_64, p.ro))
+        self.assertResult((p.ii386, p.ox86_64, p.ro))
 
     def testObsoletex86_64ToMultiarch(self):
         p = self.pkgs
commit 163ed67f6195ed66de4e5f39db236be76174d3a7
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Oct 16 11:49:26 2007 +0200

    Add assertResult() to all test cases that don't fail

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 7add400..cdd4174 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -5,6 +5,7 @@ from yum import YumBase
 from yum import transactioninfo
 from yum import packages
 from yum import packageSack
+from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
 
 class FakeConf(object):
 
@@ -107,6 +108,32 @@ class DepsolveTests(unittest.TestCase):
         res = {0 : 'empty', 2 : 'ok', 1 : 'err'}
         return (res[result[0]])
 
+    def assertResult(self, pkgs, optional_pkgs=[], check_multilib_versions=True):
+        errors = ["assertResult:\n"]
+        pkgs = set(pkgs)
+        optional_pkgs = set(optional_pkgs)
+        installed = set()
+
+        for pkg in self.rpmdb:
+            # got removed
+            if self.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
+                if pkg in pkgs:
+                    errors.append("Package %s got removed!\n" % pkg)
+            else: # still installed
+                installed.add(pkg)
+                if pkg not in pkgs and pkg not in optional_pkgs:
+                    errors.append("Package %s didn't got removed!\n" % pkg)
+
+        for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
+            installed.add(txmbr.po)
+            if txmbr.po not in pkgs and txmbr.po not in optional_pkgs:
+                errors.append("Package %s got installed!\n" % txmbr.po)
+        for pkg in pkgs - installed:
+            errors.append("Package %s didn't got installed!\n" % pkg)
+
+        if len(errors) > 1:
+            self.fail("".join(errors))
+
     def testEmpty(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         self.tsInfo.addInstall(po)
@@ -118,6 +145,7 @@ class DepsolveTests(unittest.TestCase):
         self.tsInfo.addInstall(po)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po,))
 
     def testInstallSinglePackageRequireNotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -135,6 +163,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireInstalledRequireNotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -151,14 +180,15 @@ class DepsolveTests(unittest.TestCase):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         po.addRequires('zip', None, (None, None, None))
         self.tsInfo.addInstall(po)
-        po = FakePackage('zap', '1', '2', None, 'i386')
-        self.tsInfo.addInstall(po)
+        po2 = FakePackage('zap', '1', '2', None, 'i386')
+        self.tsInfo.addInstall(po2)
 
         ipo = FakePackage('zip', '1', '3', None, 'i386')
         po.addRequires('zap', None, (None, None, None))
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, po2, ipo))
 
 
     def testInstallSinglePackageRequireVer1NotProvided(self):
@@ -180,6 +210,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireVer2NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -200,6 +231,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireVer3NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -220,6 +252,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireVer4NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -240,6 +273,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_2Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         po.addRequires('zip', 'LT', ('2', '1.3', '4'))
@@ -249,6 +283,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_3Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         po.addRequires('zip', 'LT', ('2', '1.3', '4'))
@@ -258,6 +293,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_4Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         po.addRequires('zip', 'LT', ('2', '1.3', '4'))
@@ -267,6 +303,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_5Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
         po.addRequires('zip', 'LT', ('2', '1.3', '4'))
@@ -276,6 +313,7 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
 
     def testInstallSinglePackageRequireXtraBadVer(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
@@ -304,6 +342,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(xpo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo, xpo))
 
         txmbrs = self.tsInfo.matchNaevr()
         self.assertEquals(2, len(txmbrs))
@@ -329,6 +368,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(xpo)
 
         self.assertEquals('ok', self.resolveCode())
+        #self.assertResult((po, ipo, xpo)) # ????????????
 
         txmbrs = self.tsInfo.matchNaevr()
         self.assertEquals(1, len(txmbrs))
@@ -370,10 +410,11 @@ class DepsolveTests(unittest.TestCase):
         xpo = FakePackage('zip', '2.6', '8', '4', 'i386')
         xpo.addRequires('zap', 'EQ', ('2', '1.3', '4'))
         self.xsack.addPackage(xpo)
-        xpo = FakePackage('zap', '1.3', '4', '2', 'i386')
-        self.xsack.addPackage(xpo)
+        xpo2 = FakePackage('zap', '1.3', '4', '2', 'i386')
+        self.xsack.addPackage(xpo2)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo, xpo2))
 
         txmbrs = self.tsInfo.matchNaevr()
         self.assertEquals(4, len(txmbrs))
@@ -402,10 +443,11 @@ class DepsolveTests(unittest.TestCase):
         xpo.addRequires('zap', 'EQ', ('2', '1.3', '4'))
         self.xsack.addPackage(xpo)
         
-        xpo = FakePackage('zap', '1.3', '4', '2', 'i386')
-        self.xsack.addPackage(xpo)
+        xpo2 = FakePackage('zap', '1.3', '4', '2', 'i386')
+        self.xsack.addPackage(xpo2)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo, xpo2))
 
         txmbrs = self.tsInfo.matchNaevr()
         self.assertEquals(3, len(txmbrs))
@@ -434,6 +476,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(xpo)
         
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, ipo))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(0, len(txmbrs))
@@ -447,6 +490,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(xpo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(1, len(txmbrs))
@@ -459,10 +503,11 @@ class DepsolveTests(unittest.TestCase):
 
         xpo = FakePackage('zip', '1', '3', None, 'i386')
         self.xsack.addPackage(xpo)
-        xpo = FakePackage('zip', '1', '3', None, 'x86_64')
-        self.xsack.addPackage(xpo)
+        xpo64 = FakePackage('zip', '1', '3', None, 'x86_64')
+        self.xsack.addPackage(xpo64)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo64))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(1, len(txmbrs))
@@ -475,10 +520,11 @@ class DepsolveTests(unittest.TestCase):
 
         xpo = FakePackage('zip', '1', '3', None, 'i386')
         self.xsack.addPackage(xpo)
-        xpo = FakePackage('zip', '1', '3', None, 'x86_64')
-        self.xsack.addPackage(xpo)
+        xpo64 = FakePackage('zip', '1', '3', None, 'x86_64')
+        self.xsack.addPackage(xpo64)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(1, len(txmbrs))
@@ -492,6 +538,7 @@ class DepsolveTests(unittest.TestCase):
         self.tsInfo.addUpdate(po, oldpo=ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po,))
 
         txmbrs = self.tsInfo.matchNaevr('zsh')
         self.assertEquals(2, len(txmbrs))
@@ -508,6 +555,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, updatepo))
         self.assert_(self.tsInfo.getMembers(updatepo.pkgtup))
 
     def testUpdateSplitPackage(self):
@@ -522,11 +570,13 @@ class DepsolveTests(unittest.TestCase):
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
         updatepo.addRequires('zip-libs', 'EQ', ('0', '2', '1'))
         self.xsack.addPackage(updatepo)
-        updatepo = FakePackage('zip-libs', '2', '1', '0', 'i386')
-        updatepo.addProvides('libzip', 'EQ', ('0', '2', '1'))
-        self.xsack.addPackage(updatepo)
+        updatepo2 = FakePackage('zip-libs', '2', '1', '0', 'i386')
+        updatepo2.addProvides('libzip', 'EQ', ('0', '2', '1'))
+        self.xsack.addPackage(updatepo2)
 
         self.assertEquals('ok', self.resolveCode())
+        #self.assertResult((po, updatepo, updatepo2)) # XXX obsolete needed?
+        self.assertResult((po, installedpo, updatepo2))
         self.assert_(self.tsInfo.getMembers(po.pkgtup), "Package not installed")
 
     def testUpdateSinglePackageNewRequires(self):
@@ -541,6 +591,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(xpo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(1, len(txmbrs))
@@ -559,6 +610,7 @@ class DepsolveTests(unittest.TestCase):
         self.tsInfo.addUpdate(po, oldpo=ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(0, len(txmbrs))
@@ -575,6 +627,7 @@ class DepsolveTests(unittest.TestCase):
         self.tsInfo.addUpdate(po, oldpo=ipo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, xpo))
 
     def testUpdateSinglePackageObsoletesOldRequirement(self):
         ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
@@ -593,6 +646,7 @@ class DepsolveTests(unittest.TestCase):
         self.tsInfo.addObsoleted(opo, po)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po,))
 
         txmbrs = self.tsInfo.matchNaevr('zip')
         self.assertEquals(1, len(txmbrs))
@@ -617,6 +671,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, updatepo))
         self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
     def testUpdateForConflict2(self):
@@ -631,6 +686,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, updatepo))
         self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
     def _XXX_testUpdateForConflictProvide(self):
@@ -646,6 +702,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, updatepo))
         self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
     def testUpdateForConflictProvide2(self):
@@ -664,6 +721,7 @@ class DepsolveTests(unittest.TestCase):
         self.xsack.addPackage(updatepo)
 
         self.assertEquals('ok', self.resolveCode())
+        self.assertResult((po, updatepo))
         self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
 def suite():
commit 1223c51b1a75a517340c9843c3c3a1c103179fbc
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Oct 16 11:08:18 2007 +0200

    fix Obsoletes test case

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 2cbba64..7add400 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -6,7 +6,6 @@ from yum import transactioninfo
 from yum import packages
 from yum import packageSack
 
-
 class FakeConf(object):
 
     def __init__(self):
@@ -586,13 +585,13 @@ class DepsolveTests(unittest.TestCase):
         self.rpmdb.addPackage(opo)
 
         po = FakePackage('zsh', '1', '3', None, 'i386')
-        ipo.addObsolete('zip', None, (None, None, None))
+        ipo.addObsoletes('zip', None, (None, None, None))
+
+        self.tsInfo.addUpdate(po, oldpo=ipo)
 
         self.tsInfo.addObsoleting(po, opo)
         self.tsInfo.addObsoleted(opo, po)
 
-        self.tsInfo.addUpdate(po, oldpo=ipo)
-
         self.assertEquals('ok', self.resolveCode())
 
         txmbrs = self.tsInfo.matchNaevr('zip')
commit 4f62f0b7c6ff0abd0459053001b5506df1669f1b
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Oct 16 10:45:03 2007 +0200

    Move tests from assertInstalled/assertNotInstalled to assertResult for better readability

diff --git a/test/operationstests.py b/test/operationstests.py
index d3e187d..6c0568f 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -64,18 +64,31 @@ class OperationsTests(unittest.TestCase):
             return res, msg
         return self.depsolver.buildTransaction()
 
-    def assertInstalled(self, po, msg=None):
-        if (not self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_INSTALL_STATES) and # not getting installed
-            (not self.depsolver.rpmdb.searchNevra(po.name, po.epoch, po.version, po.release, po.arch) or # not is installed
-             self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES))): # getting removed
-            self.fail("Package %(pkg)s is not installed!" % {'pkg' : str(po)})
-
-
-    def assertNotInstalled(self, po, msg=None):
-        if (self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_INSTALL_STATES) or # getting installed
-            (self.depsolver.rpmdb.searchNevra(po.name, po.epoch, po.version, po.release, po.arch) and # is installed
-             not self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES))): # not getting removed
-            self.fail((msg or "Package %(pkg)s is installed!") % {'pkg' : str(po)})
+    def assertResult(self, pkgs, optional_pkgs=[], check_multilib_versions=True):
+        errors = ["assertResult:\n"]
+        pkgs = set(pkgs)
+        optional_pkgs = set(optional_pkgs)
+        installed = set()
+
+        for pkg in self.depsolver.rpmdb:
+            # got removed
+            if self.depsolver.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
+                if pkg in pkgs:
+                    errors.append("Package %s got removed!\n" % pkg)
+            else: # still installed
+                installed.add(pkg)
+                if pkg not in pkgs and pkg not in optional_pkgs:
+                    errors.append("Package %s didn't got removed!\n" % pkg)
+
+        for txmbr in self.depsolver.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
+            installed.add(txmbr.po)
+            if txmbr.po not in pkgs and txmbr.po not in optional_pkgs:
+                errors.append("Package %s got installed!\n" % txmbr.po)
+        for pkg in pkgs - installed:
+            errors.append("Package %s didn't got installed!\n" % pkg)
+
+        if len(errors) > 1:
+            self.fail("".join(errors))
 
     #######################################################################
     ### Tests #############################################################
@@ -85,98 +98,76 @@ class OperationsTests(unittest.TestCase):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386], [p.ui386, p.ux86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ui386)
-        self.assertNotInstalled(p.ux86_64)
-
+        self.assertResult((p.ui386,))
     def testUpdatei386ToMultilibForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386], [p.ui386, p.ux86_64, p.ru])
         self.assert_(res==2, msg)
-        #self.assertInstalled(p.ui386)
-        #self.assertNotInstalled(p.ux86_64)
-        self.assertInstalled(p.ux86_64) # XXX
-        self.assertInstalled(p.ru)
+        self.assertResult((p.ii386, p.ux86_64, p.ru))
+        #self.assertResult((p.ui386, p.ru))
 
     def testUpdatex86_64ToMultilib(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ix86_64], [p.ui386, p.ux86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ux86_64)
-        self.assertNotInstalled(p.ui386)
-
+        self.assertResult((p.ux86_64,))
     def testUpdatex86_64ToMultilibForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ix86_64], [p.ui386, p.ux86_64, p.ru])
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ix86_64], 
+                                     [p.ui386, p.ux86_64, p.ru])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ux86_64)
-        self.assertNotInstalled(p.ui386)
-        self.assertInstalled(p.ru)
+        self.assertResult((p.ux86_64, p.ru))
 
     def testUpdateMultilibToMultilib(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.ui386, p.ux86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ui386)
-        self.assertInstalled(p.ux86_64)
-
+        self.assertResult((p.ui386, p.ux86_64))
     def testUpdateMultilibToMultilibForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386, p.ix86_64], [p.ui386, p.ux86_64, p.ru])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ii386)
-        self.assertNotInstalled(p.ix86_64)
-        self.assertNotInstalled(p.ui386)
-        self.assertInstalled(p.ux86_64)
-        self.assertInstalled(p.ru)
+        #self.assertResult((p.ui386, p.ux86_64,  p.ru))
+        self.assertResult((p.ii386, p.ux86_64,  p.ru))
 
     def testUpdatei386Tonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386], [p.unoarch])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.unoarch)
-        self.assertNotInstalled(p.ii386)
-
+        self.assertResult((p.unoarch,))
     def testUpdatei386TonoarchForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386], [p.unoarch, p.ru])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.unoarch)
-        #self.assertNotInstalled(p.ii386) # XXX
-        self.assertInstalled(p.ru)
+        #self.assertResult((p.unoarch, p.ru))
+        self.assertResult((p.ii386, p.unoarch, p.ru))
 
     def testUpdateMultilibTonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.unoarch])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.unoarch)
-        self.assertNotInstalled(p.ii386)
-        # self.assertNotInstalled(p.ix86_64) # XXX
-
+        #self.assertResult((p.unoarch,))
+        self.assertResult((p.unoarch, p.ix86_64))
     def testUpdateMultilibTonoarchForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386, p.ix86_64], [p.unoarch, p.ru])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.unoarch)
-        #self.assertNotInstalled(p.ii386)
-        #self.assertNotInstalled(p.ix86_64)
-        self.assertInstalled(p.ru)
+        #self.assertResult((p.unoarch, p.ru))
+        self.assertResult((p.ii386, p.ix86_64, p.unoarch, p.ru))
 
     def testUpdatenoarchToMultilib(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.inoarch], [p.ui386, p.ux86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ui386) # ???
-        self.assertInstalled(p.ux86_64)
-        self.assertNotInstalled(p.inoarch)
-
+        self.assertResult((p.ui386, p.ux86_64))
+        # self.assertResult((p.ux86_64)) # ???
     def testUpdatenoarchToMultilibForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'zsh-utils'], [p.inoarch], [p.ui386, p.ux86_64, p.ru])
         self.assert_(res==2, msg)
-        self.assertNotInstalled(p.ui386) # ???
-        self.assertInstalled(p.ux86_64)
-        # self.assertNotInstalled(p.inoarch)
-        self.assertInstalled(p.ru)
+        # self.assertResult((p.ui386, p.ux86_64, p.ru))
+        # self.assertResult((p.ux86_64, p.ru))
+        self.assertResult((p.inoarch, p.ux86_64, p.ru))
 
     # obsoletes
 
@@ -184,83 +175,65 @@ class OperationsTests(unittest.TestCase):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.inoarch], [p.oi386, p.ox86_64])
         self.assert_(res==2, msg)
-        #self.assertNotInstalled(p.oi386)
-        self.assertInstalled(p.ox86_64)
-        self.assertNotInstalled(p.inoarch)
+        #self.assertResult((p.ox86_64,))
+        self.assertResult((p.oi386, p.ox86_64))
     def testObsoletenoarchToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.inoarch], [p.oi386, p.ox86_64, p.ro])
+        res, msg = self.runOperation(['install', 'superzippy'], [p.inoarch], 
+                                     [p.oi386, p.ox86_64, p.ro])
         self.assert_(res==2, msg)
-        self.assertNotInstalled(p.oi386)
-        self.assertInstalled(p.ox86_64)
-        #self.assertNotInstalled(p.inoarch) # XXX
-        self.assertInstalled(p.ro)
+        #self.assertResult((p.ox86_64, p.ro))
+        self.assertResult((p.inoarch, p.ox86_64, p.ro))
 
     def testObsoletei386ToMultiarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386], [p.oi386, p.ox86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.oi386)
-        #self.assertNotInstalled(p.ox86_64)
-        self.assertNotInstalled(p.ii386)
+        self.assertResult((p.oi386,))
     def testObsoletei386ToMultiarchForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'superzippy'], [p.ii386], [p.oi386, p.ox86_64, p.ro])
         self.assert_(res==2, msg)
-        #self.assertInstalled(p.oi386)
-        #self.assertInstalled(p.ox86_64) # XXX
-        #self.assertNotInstalled(p.ii386)
-        self.assertInstalled(p.ro)
+        #self.assertResult((p.ox86_64, p.ro))
+        self.assertResult((p.ii386, p.ox86_64, p.ro))
 
     def testObsoletex86_64ToMultiarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ix86_64], [p.oi386, p.ox86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.ox86_64)
-        #self.assertNotInstalled(p.oi386)
-        self.assertNotInstalled(p.ix86_64)
+        self.assertResult((p.ox86_64,))
     def testObsoletex86_64ToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.ix86_64], [p.oi386, p.ox86_64, p.ro])
+        res, msg = self.runOperation(['install', 'superzippy'], 
+                                     [p.ix86_64], [p.oi386, p.ox86_64, p.ro])
         self.assert_(res==2, msg)
-        #self.assertInstalled(p.oi386)
-        self.assertInstalled(p.ox86_64)
-        #self.assertNotInstalled(p.ii386)
-        self.assertInstalled(p.ro)
+        #self.assertResult((p.ox86_64, p.ro))
+        self.assertResult((p.ix86_64, p.ox86_64, p.ro))
 
     def testObsoleteMultiarchToMultiarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.oi386, p.ox86_64])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.oi386)
-        self.assertInstalled(p.ox86_64)
-        self.assertNotInstalled(p.ii386)
-        self.assertNotInstalled(p.ix86_64)
+        self.assertResult((p.oi386, p.ox86_64))
     def testObsoleteMultiarchToMultiarchForDependency(self):
         p = self.pkgs
-        res, msg = self.runOperation(['install', 'superzippy'], [p.ii386, p.ix86_64], [p.oi386, p.ox86_64, p.ro])
+        res, msg = self.runOperation(['install', 'superzippy'], 
+                                     [p.ii386, p.ix86_64], [p.oi386, p.ox86_64, p.ro])
         self.assert_(res==2, msg)
-        #self.assertInstalled(p.oi386)
-        self.assertInstalled(p.ox86_64)
-        #self.assertNotInstalled(p.ii386)
-        #self.assertNotInstalled(p.ix86_64) # XXX
-        self.assertInstalled(p.ro)
+        #self.assertResult((p.oi386, p.ox86_64, p.ro))
+        self.assertResult((p.ii386, p.ix86_64, p.ox86_64, p.ro))
 
     def testObsoleteMultiarchTonoarch(self):
         p = self.pkgs
         res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.onoarch])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.onoarch)
-        self.assertNotInstalled(p.ii386)
-        self.assertNotInstalled(p.ix86_64)
+        self.assertResult((p.onoarch,))
     def testObsoleteMultiarchTonoarchForDependency(self):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'superzippy'], [p.ii386, p.ix86_64], [p.onoarch, p.ro])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.onoarch)
-        #self.assertNotInstalled(p.ii386) # XXX
-        #self.assertNotInstalled(p.ix86_64) # XXX
-        self.assertInstalled(p.ro)
+        #self.assertResult((p.onoarch, p.ro))
+        self.assertResult((p.ii386, p.ix86_64, p.onoarch, p.ro))
 
     # Obsolete for conflict
 
@@ -268,12 +241,7 @@ class OperationsTests(unittest.TestCase):
         p = self.pkgs
         res, msg = self.runOperation(['install', 'super-zippy'], [p.ii386], [p.oi386, p.ox86_64, p.conflict])
         self.assert_(res==2, msg)
-        self.assertInstalled(p.conflict)
-        self.assertInstalled(p.oi386) # XXX ???
-        self.assertNotInstalled(p.oi386) # XXX ???
-        self.assertInstalled(p.ox86_64)
-        self.assertNotInstalled(p.ii386)
-
+        self.assertResult((p.oi386, p.conflict))
 
 def suite():
     suite = unittest.TestSuite()
commit ef4ccc9732b609a2a575134ecd102eb3d43301d2
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Oct 11 10:45:13 2007 +0200

    Move RpmSack.installed() to PackageSackBase.contains()
    
    Keep now unused RpmSack.installed() for backward compatibility

diff --git a/cli.py b/cli.py
index df85285..f33abd9 100644
--- a/cli.py
+++ b/cli.py
@@ -501,7 +501,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
             # we look through each returned possibility and rule out the
             # ones that we obviously can't use
             for pkg in installable:
-                if self.rpmdb.installed(po=pkg):
+                if self.rpmdb.contains(po=pkg):
                     self.verbose_logger.log(yum.logginglevels.INFO_2,
                         'Package %s is already installed.', pkg)
                     continue
@@ -1056,7 +1056,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
         # we look through each returned possibility and rule out the
         # ones that we obviously can't use
         
-        if self.rpmdb.installed(po=pkg):
+        if self.rpmdb.contains(po=pkg):
             self.verbose_logger.log(yum.logginglevels.DEBUG_3,
                 'Package %s is already installed, skipping', pkg)
             return False
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index e316eac..2cbba64 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -25,17 +25,6 @@ class FakeRepo(object):
     def __init__(self, id=None):
         self.id = id
 
-
-class FakeRpmSack(packageSack.PackageSack):
-    def installed(self, name=None, arch=None, epoch=None, ver=None, rel=None, po=None):
-        if po:
-            name = po.name
-            arch = po.arch
-            epoch = po.epoch
-            ver = po.version
-            rel = po.release
-        return len(self.searchNevra(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel)) > 0
-
 class FakePackage(packages.YumAvailablePackage):
 
     def __init__(self, name, version, release, epoch, arch, repo=None):
@@ -106,7 +95,7 @@ class DepsolveTests(unittest.TestCase):
     def setUp(self):
         """ Called at the start of each test. """
         self.tsInfo = transactioninfo.TransactionData()
-        self.rpmdb  = FakeRpmSack()
+        self.rpmdb  = packageSack.PackageSack()
         self.xsack  = packageSack.PackageSack()
         self.repo   = FakeRepo("installed")
 
diff --git a/test/operationstests.py b/test/operationstests.py
index 654b9fd..d3e187d 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -1,6 +1,6 @@
 import unittest
 
-from depsolvetests import FakePackage, FakeRpmSack, FakeRepo, FakeConf
+from depsolvetests import FakePackage, FakeRepo, FakeConf
 from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
 from cli import YumBaseCli
 from yum import packageSack
@@ -44,7 +44,7 @@ class OperationsTests(unittest.TestCase):
 
     def runOperation(self, args, installed=[], available=[]):
         depsolver = YumBaseCli()
-        depsolver.rpmdb  = FakeRpmSack()
+        depsolver.rpmdb  = packageSack.PackageSack()
         depsolver._pkgSack  = packageSack.PackageSack()
         depsolver.repo = FakeRepo("installed")
         depsolver.conf = FakeConf()
diff --git a/yum/__init__.py b/yum/__init__.py
index 182b612..c51024d 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1933,8 +1933,7 @@ class YumBase(depsolve.Depsolve):
                 continue
             
             # make sure it's not already installed
-            if self.rpmdb.installed(name=po.name, arch=po.arch, epoch=po.epoch,
-                    rel=po.release, ver=po.version):
+            if self.rpmdb.contains(po=po):
                 self.logger.warning('Package %s already installed and latest version', po)
                 continue
 
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 5747a15..cde96f1 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -275,7 +275,7 @@ class Depsolve(object):
             cheater_po = self.cheaterlookup[(needname, needflags, needversion)]
             providers = [cheater_po]
         
-        elif self.rpmdb.installed(name=needname):
+        elif self.rpmdb.contains(name=needname):
             txmbrs = self.tsInfo.matchNaevr(name=needname)
             for txmbr in txmbrs:
                 providers.append(txmbr.po)
@@ -532,7 +532,7 @@ class Depsolve(object):
             best = newest[0]
         
         
-        if self.rpmdb.installed(po=best): # is it already installed?
+        if self.rpmdb.contains(po=best): # is it already installed?
             missingdep = 1
             checkdeps = 0
             msg = 'Missing Dependency: %s is needed by package %s' % (needname, name)
@@ -951,7 +951,7 @@ class Depsolve(object):
 
     def isPackageInstalled(self, pkgname):
         installed = False
-        if self.rpmdb.installed(name = pkgname):
+        if self.rpmdb.contains(name=pkgname):
             installed = True
 
         lst = self.tsInfo.matchNaevr(name = pkgname)
diff --git a/yum/packageSack.py b/yum/packageSack.py
index ec48403..34f8b2e 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -65,6 +65,17 @@ class PackageSackBase(object):
         (n,a,e,v,r) = pkgtup
         return self.searchNevra(name=n, arch=a, epoch=e, ver=v, rel=r)
         
+    def contains(self, name=None, arch=None, epoch=None, ver=None, rel=None, po=None):
+        """return if there are any packages in the sack that match the given NAEVR 
+           or the NAEVR of the given po"""
+        if po:
+            name = po.name
+            arch = po.arch
+            epoch = po.epoch
+            ver = po.version
+            rel = po.release
+        return bool(self.searchNevra(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel))
+
     def getProvides(self, name, flags=None, version=(None, None, None)):
         """return dict { packages -> list of matching provides }"""
         raise NotImplementedError()
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 7bd94e6..8866d5e 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -156,16 +156,8 @@ class RPMDBPackageSack(PackageSackBase):
 
     def simplePkgList(self):
         return self.pkglist
-   
-    def installed(self, name=None, arch=None, epoch=None, ver=None, rel=None, po=None):
-        if po:
-            name = po.name
-            arch = po.arch
-            epoch = po.epoch
-            ver = po.version
-            rel = po.release
-            
-        return len(self.searchNevra(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel)) > 0
+
+    installed = PackageSackBase.contains
 
     def returnNewestByNameArch(self, naTup=None):
 
commit ff98e98e0ec8f1690e77e924b9ef0c25e614db92
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Oct 10 15:14:20 2007 +0200

    More obsolete related test cases: * testObsoletenoarchToMultiarchForDependency * testObsoletei386ToMultiarchForDependency * testObsoletex86_64ToMultiarch * testObsoletex86_64ToMultiarchForDependency * testObsoleteMultiarchToMultiarchForDependency * testObsoleteMultiarchTonoarchForDependency

diff --git a/test/operationstests.py b/test/operationstests.py
index 7db500e..654b9fd 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -27,10 +27,16 @@ class OperationsTests(unittest.TestCase):
         # obsoletes
         self.pkgs.oi386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
         self.pkgs.oi386.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.oi386.addProvides('zzz')
         self.pkgs.ox86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
         self.pkgs.ox86_64.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.ox86_64.addProvides('zzz')
         self.pkgs.onoarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
         self.pkgs.onoarch.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.onoarch.addProvides('zzz')
+        # requires obsoletes
+        self.pkgs.ro = FakePackage('superzippy', '3.5', '3', '0', 'noarch')
+        self.pkgs.ro.addRequires('zzz')
         # conflicts
         self.pkgs.conflict = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
         self.pkgs.conflict.addConflicts('zsh', 'EQ', ('0', '1', '1'))
@@ -181,6 +187,14 @@ class OperationsTests(unittest.TestCase):
         #self.assertNotInstalled(p.oi386)
         self.assertInstalled(p.ox86_64)
         self.assertNotInstalled(p.inoarch)
+    def testObsoletenoarchToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.inoarch], [p.oi386, p.ox86_64, p.ro])
+        self.assert_(res==2, msg)
+        self.assertNotInstalled(p.oi386)
+        self.assertInstalled(p.ox86_64)
+        #self.assertNotInstalled(p.inoarch) # XXX
+        self.assertInstalled(p.ro)
 
     def testObsoletei386ToMultiarch(self):
         p = self.pkgs
@@ -189,6 +203,30 @@ class OperationsTests(unittest.TestCase):
         self.assertInstalled(p.oi386)
         #self.assertNotInstalled(p.ox86_64)
         self.assertNotInstalled(p.ii386)
+    def testObsoletei386ToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.ii386], [p.oi386, p.ox86_64, p.ro])
+        self.assert_(res==2, msg)
+        #self.assertInstalled(p.oi386)
+        #self.assertInstalled(p.ox86_64) # XXX
+        #self.assertNotInstalled(p.ii386)
+        self.assertInstalled(p.ro)
+
+    def testObsoletex86_64ToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ix86_64], [p.oi386, p.ox86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ox86_64)
+        #self.assertNotInstalled(p.oi386)
+        self.assertNotInstalled(p.ix86_64)
+    def testObsoletex86_64ToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.ix86_64], [p.oi386, p.ox86_64, p.ro])
+        self.assert_(res==2, msg)
+        #self.assertInstalled(p.oi386)
+        self.assertInstalled(p.ox86_64)
+        #self.assertNotInstalled(p.ii386)
+        self.assertInstalled(p.ro)
 
     def testObsoleteMultiarchToMultiarch(self):
         p = self.pkgs
@@ -198,6 +236,15 @@ class OperationsTests(unittest.TestCase):
         self.assertInstalled(p.ox86_64)
         self.assertNotInstalled(p.ii386)
         self.assertNotInstalled(p.ix86_64)
+    def testObsoleteMultiarchToMultiarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.ii386, p.ix86_64], [p.oi386, p.ox86_64, p.ro])
+        self.assert_(res==2, msg)
+        #self.assertInstalled(p.oi386)
+        self.assertInstalled(p.ox86_64)
+        #self.assertNotInstalled(p.ii386)
+        #self.assertNotInstalled(p.ix86_64) # XXX
+        self.assertInstalled(p.ro)
 
     def testObsoleteMultiarchTonoarch(self):
         p = self.pkgs
@@ -206,6 +253,14 @@ class OperationsTests(unittest.TestCase):
         self.assertInstalled(p.onoarch)
         self.assertNotInstalled(p.ii386)
         self.assertNotInstalled(p.ix86_64)
+    def testObsoleteMultiarchTonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'superzippy'], [p.ii386, p.ix86_64], [p.onoarch, p.ro])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.onoarch)
+        #self.assertNotInstalled(p.ii386) # XXX
+        #self.assertNotInstalled(p.ix86_64) # XXX
+        self.assertInstalled(p.ro)
 
     # Obsolete for conflict
 
commit aebfd7ec24750a1c6d563a39f58c1c9fcd6b39fe
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Oct 5 14:50:48 2007 +0200

    Add operations test suite (some sub tests are still commented out) * testUpdatei386ToMultilib * testUpdatei386ToMultilibForDependency * testUpdatex86_64ToMultilib * testUpdatex86_64ToMultilibForDependency * testUpdateMultilibToMultilib * testUpdateMultilibToMultilibForDependency * testUpdatei386Tonoarch * testUpdatei386TonoarchForDependency * testUpdateMultilibTonoarch * testUpdateMultilibTonoarchForDependency * testUpdatenoarchToMultilib * testUpdatenoarchToMultilibForDependency * testObsoletenoarchToMultiarch * testObsoletei386ToMultiarch * testObsoleteMultiarchToMultiarch * testObsoleteMultiarchTonoarch * _XXX_testObsoleteForConflict - disabled
    
    Make FakePackge a YumAvailablePackage
    Add needed attributes to FakeConf

diff --git a/test/alltests.py b/test/alltests.py
index 90f8e12..93eb7b0 100644
--- a/test/alltests.py
+++ b/test/alltests.py
@@ -3,12 +3,13 @@ import settestpath
 
 import depsolvetests
 import packagetests
-
+import operationstests
 
 def suite():
     # Append all test suites here:
     return unittest.TestSuite((
         depsolvetests.suite(),
+        operationstests.suite(),
         packagetests.suite(),
     ))
 
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 9200c9a..e316eac 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -16,7 +16,9 @@ class FakeConf(object):
         self.obsoletes = True
         self.exactarch = False
         self.exactarchlist = []
-
+        self.installroot = '/'
+        self.tsflags = []
+        self.installonly_limit = 0
 
 class FakeRepo(object):
 
@@ -34,7 +36,7 @@ class FakeRpmSack(packageSack.PackageSack):
             rel = po.release
         return len(self.searchNevra(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel)) > 0
 
-class FakePackage(packages.PackageObject, packages.RpmBase):
+class FakePackage(packages.YumAvailablePackage):
 
     def __init__(self, name, version, release, epoch, arch, repo=None):
         packages.PackageObject.__init__(self)
diff --git a/test/operationstests.py b/test/operationstests.py
new file mode 100644
index 0000000..7db500e
--- /dev/null
+++ b/test/operationstests.py
@@ -0,0 +1,230 @@
+import unittest
+
+from depsolvetests import FakePackage, FakeRpmSack, FakeRepo, FakeConf
+from yum.constants import TS_INSTALL_STATES, TS_REMOVE_STATES
+from cli import YumBaseCli
+from yum import packageSack
+
+class Container(object):
+    pass
+
+class OperationsTests(unittest.TestCase):
+
+    def __init__(self, methodName='runTest'):
+        unittest.TestCase.__init__(self, methodName)
+        self.pkgs = Container()
+        # installed
+        self.pkgs.ii386 = FakePackage('zsh', '1', '1', '0', 'i386')
+        self.pkgs.ix86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
+        self.pkgs.inoarch = FakePackage('zsh', '1', '1', '0', 'noarch')
+        # updates
+        self.pkgs.ui386 = FakePackage('zsh', '2', '1', '0', 'i386')
+        self.pkgs.ux86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
+        self.pkgs.unoarch = FakePackage('zsh', '2', '1', '0', 'noarch')
+        # requires update
+        self.pkgs.ru = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
+        self.pkgs.ru.addRequires('zsh', 'EQ', ('0', '2', '1'))
+        # obsoletes
+        self.pkgs.oi386 = FakePackage('zsh-ng', '0.3', '1', '0', 'i386')
+        self.pkgs.oi386.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.ox86_64 = FakePackage('zsh-ng', '0.3', '1', '0', 'x86_64')
+        self.pkgs.ox86_64.addObsoletes('zsh', None, (None, None, None))
+        self.pkgs.onoarch = FakePackage('zsh-ng', '0.3', '1', '0', 'noarch')
+        self.pkgs.onoarch.addObsoletes('zsh', None, (None, None, None))
+        # conflicts
+        self.pkgs.conflict = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
+        self.pkgs.conflict.addConflicts('zsh', 'EQ', ('0', '1', '1'))
+
+
+    def runOperation(self, args, installed=[], available=[]):
+        depsolver = YumBaseCli()
+        depsolver.rpmdb  = FakeRpmSack()
+        depsolver._pkgSack  = packageSack.PackageSack()
+        depsolver.repo = FakeRepo("installed")
+        depsolver.conf = FakeConf()
+        depsolver.doLoggingSetup(-1, -1)
+        self.depsolver = depsolver
+
+        for po in installed:
+            po.repoid = po.repo.id = "installed"
+            self.depsolver.rpmdb.addPackage(po)
+        for po in available:
+            self.depsolver._pkgSack.addPackage(po)
+
+        self.depsolver.basecmd = args[0]
+        self.depsolver.extcmds = args[1:]
+        res, msg = self.depsolver.doCommands()
+        if res!=2:
+            return res, msg
+        return self.depsolver.buildTransaction()
+
+    def assertInstalled(self, po, msg=None):
+        if (not self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_INSTALL_STATES) and # not getting installed
+            (not self.depsolver.rpmdb.searchNevra(po.name, po.epoch, po.version, po.release, po.arch) or # not is installed
+             self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES))): # getting removed
+            self.fail("Package %(pkg)s is not installed!" % {'pkg' : str(po)})
+
+
+    def assertNotInstalled(self, po, msg=None):
+        if (self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_INSTALL_STATES) or # getting installed
+            (self.depsolver.rpmdb.searchNevra(po.name, po.epoch, po.version, po.release, po.arch) and # is installed
+             not self.depsolver.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES))): # not getting removed
+            self.fail((msg or "Package %(pkg)s is installed!") % {'pkg' : str(po)})
+
+    #######################################################################
+    ### Tests #############################################################
+    #######################################################################
+
+    def testUpdatei386ToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386], [p.ui386, p.ux86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ui386)
+        self.assertNotInstalled(p.ux86_64)
+
+    def testUpdatei386ToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386], [p.ui386, p.ux86_64, p.ru])
+        self.assert_(res==2, msg)
+        #self.assertInstalled(p.ui386)
+        #self.assertNotInstalled(p.ux86_64)
+        self.assertInstalled(p.ux86_64) # XXX
+        self.assertInstalled(p.ru)
+
+    def testUpdatex86_64ToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ix86_64], [p.ui386, p.ux86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ux86_64)
+        self.assertNotInstalled(p.ui386)
+
+    def testUpdatex86_64ToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ix86_64], [p.ui386, p.ux86_64, p.ru])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ux86_64)
+        self.assertNotInstalled(p.ui386)
+        self.assertInstalled(p.ru)
+
+    def testUpdateMultilibToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.ui386, p.ux86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ui386)
+        self.assertInstalled(p.ux86_64)
+
+    def testUpdateMultilibToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386, p.ix86_64], [p.ui386, p.ux86_64, p.ru])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ii386)
+        self.assertNotInstalled(p.ix86_64)
+        self.assertNotInstalled(p.ui386)
+        self.assertInstalled(p.ux86_64)
+        self.assertInstalled(p.ru)
+
+    def testUpdatei386Tonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386], [p.unoarch])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.unoarch)
+        self.assertNotInstalled(p.ii386)
+
+    def testUpdatei386TonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386], [p.unoarch, p.ru])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.unoarch)
+        #self.assertNotInstalled(p.ii386) # XXX
+        self.assertInstalled(p.ru)
+
+    def testUpdateMultilibTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.unoarch])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.unoarch)
+        self.assertNotInstalled(p.ii386)
+        # self.assertNotInstalled(p.ix86_64) # XXX
+
+    def testUpdateMultilibTonoarchForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.ii386, p.ix86_64], [p.unoarch, p.ru])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.unoarch)
+        #self.assertNotInstalled(p.ii386)
+        #self.assertNotInstalled(p.ix86_64)
+        self.assertInstalled(p.ru)
+
+    def testUpdatenoarchToMultilib(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.inoarch], [p.ui386, p.ux86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.ui386) # ???
+        self.assertInstalled(p.ux86_64)
+        self.assertNotInstalled(p.inoarch)
+
+    def testUpdatenoarchToMultilibForDependency(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-utils'], [p.inoarch], [p.ui386, p.ux86_64, p.ru])
+        self.assert_(res==2, msg)
+        self.assertNotInstalled(p.ui386) # ???
+        self.assertInstalled(p.ux86_64)
+        # self.assertNotInstalled(p.inoarch)
+        self.assertInstalled(p.ru)
+
+    # obsoletes
+
+    def testObsoletenoarchToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.inoarch], [p.oi386, p.ox86_64])
+        self.assert_(res==2, msg)
+        #self.assertNotInstalled(p.oi386)
+        self.assertInstalled(p.ox86_64)
+        self.assertNotInstalled(p.inoarch)
+
+    def testObsoletei386ToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386], [p.oi386, p.ox86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.oi386)
+        #self.assertNotInstalled(p.ox86_64)
+        self.assertNotInstalled(p.ii386)
+
+    def testObsoleteMultiarchToMultiarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.oi386, p.ox86_64])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.oi386)
+        self.assertInstalled(p.ox86_64)
+        self.assertNotInstalled(p.ii386)
+        self.assertNotInstalled(p.ix86_64)
+
+    def testObsoleteMultiarchTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['update'], [p.ii386, p.ix86_64], [p.onoarch])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.onoarch)
+        self.assertNotInstalled(p.ii386)
+        self.assertNotInstalled(p.ix86_64)
+
+    # Obsolete for conflict
+
+    def _XXX_testObsoleteForConflict(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'super-zippy'], [p.ii386], [p.oi386, p.ox86_64, p.conflict])
+        self.assert_(res==2, msg)
+        self.assertInstalled(p.conflict)
+        self.assertInstalled(p.oi386) # XXX ???
+        self.assertNotInstalled(p.oi386) # XXX ???
+        self.assertInstalled(p.ox86_64)
+        self.assertNotInstalled(p.ii386)
+
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(OperationsTests))
+    return suite
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="suite")
+
commit 6c3ed24214313d02187eb3a76277ad53dfd8609d
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Oct 5 14:34:18 2007 +0200

    Switch depsolving tests to YumBase instead of Depsolver
    
    Add the needed attributes to FakeConf
    Add new test cases
     * testUpdateForDependency
     * testUpdateSplitPackage
     * _XXX_testUpdateForConflict - disabled
     * testUpdateForConflict2
     * _XXX_testUpdateForConflictProvide
     * testUpdateForConflictProvide2 - disabled
    Minor fix for empty pkgSack (False != None)

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index c2745da..9200c9a 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -1,7 +1,7 @@
 import unittest
 import settestpath
 
-from yum import depsolve
+from yum import YumBase
 from yum import transactioninfo
 from yum import packages
 from yum import packageSack
@@ -11,6 +11,11 @@ class FakeConf(object):
 
     def __init__(self):
         self.installonlypkgs = []
+        self.exclude = []
+        self.debuglevel = 0
+        self.obsoletes = True
+        self.exactarch = False
+        self.exactarchlist = []
 
 
 class FakeRepo(object):
@@ -65,10 +70,10 @@ class FakePackage(packages.PackageObject, packages.RpmBase):
         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.tsInfo = tsInfo
@@ -501,6 +506,39 @@ class DepsolveTests(unittest.TestCase):
         txmbrs = self.tsInfo.matchNaevr('zsh')
         self.assertEquals(2, len(txmbrs))
 
+    def testUpdateForDependency(self):
+        po = FakePackage('zsh', '1', '1', '0', 'i386')
+        po.addRequires('zip', 'EQ', ('0', '2', '1'))
+        self.tsInfo.addInstall(po)
+
+        installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+        self.rpmdb.addPackage(installedpo)
+
+        updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+        self.xsack.addPackage(updatepo)
+
+        self.assertEquals('ok', self.resolveCode())
+        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup))
+
+    def testUpdateSplitPackage(self):
+        po = FakePackage('zsh', '1', '1', '0', 'i386')
+        po.addRequires('libzip', 'EQ', ('0', '2', '1'))
+        self.tsInfo.addInstall(po)
+
+        installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+        installedpo.addProvides('libzip', 'EQ', ('0', '1', '1'))
+        self.rpmdb.addPackage(installedpo)
+
+        updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+        updatepo.addRequires('zip-libs', 'EQ', ('0', '2', '1'))
+        self.xsack.addPackage(updatepo)
+        updatepo = FakePackage('zip-libs', '2', '1', '0', 'i386')
+        updatepo.addProvides('libzip', 'EQ', ('0', '2', '1'))
+        self.xsack.addPackage(updatepo)
+
+        self.assertEquals('ok', self.resolveCode())
+        self.assert_(self.tsInfo.getMembers(po.pkgtup), "Package not installed")
+
     def testUpdateSinglePackageNewRequires(self):
         ipo = self.FakeInstPkg('zsh', '1', '1', None, 'i386')
         self.rpmdb.addPackage(ipo)
@@ -577,6 +615,66 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals(1, len(txmbrs))
         self.assertTrue('e', txmbrs[0].ts_state)
 
+    def _XXX_testUpdateForConflict(self):
+        po = FakePackage('zsh', '1', '1', '0', 'i386')
+        po.addConflicts('zip', 'LE', ('0', '1', '1'))
+        self.tsInfo.addInstall(po)
+
+        installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+        self.rpmdb.addPackage(installedpo)
+
+        updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+        self.xsack.addPackage(updatepo)
+
+        self.assertEquals('ok', self.resolveCode())
+        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+
+    def testUpdateForConflict2(self):
+        po = FakePackage('zsh', '1', '1', '0', 'i386')
+        self.tsInfo.addInstall(po)
+
+        installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+        installedpo.addConflicts('zsh', 'LE', ('0', '1', '1'))
+        self.rpmdb.addPackage(installedpo)
+
+        updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+        self.xsack.addPackage(updatepo)
+
+        self.assertEquals('ok', self.resolveCode())
+        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+
+    def _XXX_testUpdateForConflictProvide(self):
+        po = FakePackage('zsh', '1', '1', '0', 'i386')
+        po.addConflicts('zippy', 'LE', ('0', '1', '1'))
+        self.tsInfo.addInstall(po)
+
+        installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+        installedpo.addProvides('zippy', 'EQ', ('0', '1', '1'))
+        self.rpmdb.addPackage(installedpo)
+
+        updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+        self.xsack.addPackage(updatepo)
+
+        self.assertEquals('ok', self.resolveCode())
+        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
+
+    def testUpdateForConflictProvide2(self):
+        po = FakePackage('zsh', '1', '1', '0', 'i386')
+        po.addProvides('zippy', 'EQ', ('0', '2', '1'))
+        self.tsInfo.addInstall(po)
+
+        installedpo = FakePackage('zip', '1', '1', '0', 'i386')
+        installedpo.addConflicts('zippy', 'GT', ('0', '1', '1'))
+        installedpo.addConflicts('zippy', 'LT', ('0', '1', '1'))
+        self.rpmdb.addPackage(installedpo)
+
+        updatepo = FakePackage('zip', '2', '1', '0', 'i386')
+        updatepo.addConflicts('zippy', 'GT', ('0', '2', '1'))
+        updatepo.addConflicts('zippy', 'LT', ('0', '2', '1'))
+        self.xsack.addPackage(updatepo)
+
+        self.assertEquals('ok', self.resolveCode())
+        self.assert_(self.tsInfo.getMembers(updatepo.pkgtup), "Not updated")
 
 def suite():
     suite = unittest.TestSuite()
diff --git a/yum/__init__.py b/yum/__init__.py
index 056a330..182b612 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -359,7 +359,7 @@ class YumBase(depsolve.Depsolve):
         """populates the package sacks for information from our repositories,
            takes optional archlist for archs to include"""
 
-        if self._pkgSack and thisrepo is None:
+        if self._pkgSack is not None and thisrepo is None:
             self.verbose_logger.log(logginglevels.DEBUG_4,
                 'skipping reposetup, pkgsack exists')
             return self._pkgSack
commit 2cd76ab829325ed423d5ec56ff20d712999a4a35
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Oct 1 14:51:46 2007 +0200

    Use a more defensive path order

diff --git a/test/settestpath.py b/test/settestpath.py
index 835d935..1cbcdce 100644
--- a/test/settestpath.py
+++ b/test/settestpath.py
@@ -2,6 +2,6 @@ import sys
 
 # Adjust path so we can see the src modules running from branch as well
 # as test dir:
-sys.path.insert(0, './')
-sys.path.insert(0, '../')
 sys.path.insert(0, '../../')
+sys.path.insert(0, '../')
+sys.path.insert(0, './')
commit 3be21b20a8cc01c726e96842f632353b70866b09
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Oct 1 14:51:06 2007 +0200

    Add defaults to FakePackage.add*
    
    Use "EQ" instead of "="
    FakePackage.addFile()

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 56686e2..c2745da 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -43,7 +43,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)))
 
         if repo is None:
             repo = FakeRepo()
@@ -53,14 +53,16 @@ class FakePackage(packages.PackageObject, packages.RpmBase):
         # Just a unique integer
         self.id = self.__hash__()
 
-    def addProvides(self, name, evr):
-        self.prco['provides'].append((name, '=', evr))
-    def addRequires(self, name, flag, evr):
+    def addProvides(self, name, flag=None, evr=(None, None, None)):
+        self.prco['provides'].append((name, flag, evr))
+    def addRequires(self, name, flag=None, evr=(None, None, None)):
         self.prco['requires'].append((name, flag, evr))
-    def addConflict(self, name, flag, evr):
+    def addConflicts(self, name, flag=None, evr=(None, None, None)):
         self.prco['conflicts'].append((name, flag, evr))
-    def addObsolete(self, name, flag, evr):
+    def addObsoletes(self, name, flag=None, evr=(None, None, None)):
         self.prco['obsoletes'].append((name, flag, evr))
+    def addFile(self, name, ftype='file'):
+        self.files[ftype].append(name)
 
 
 class TestingDepsolve(depsolve.Depsolve):
commit de9909c1d4207480efc8c45a8a5cc0e91a37c02d
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Oct 5 14:23:46 2007 +0200

    Really implement FakeRpmSack.installed()

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 6b3badc..56686e2 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -20,9 +20,14 @@ class FakeRepo(object):
 
 
 class FakeRpmSack(packageSack.PackageSack):
-    def installed(self, po):
-        """ Hack. Hack. Hack. """
-        return False
+    def installed(self, name=None, arch=None, epoch=None, ver=None, rel=None, po=None):
+        if po:
+            name = po.name
+            arch = po.arch
+            epoch = po.epoch
+            ver = po.version
+            rel = po.release
+        return len(self.searchNevra(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel)) > 0
 
 class FakePackage(packages.PackageObject, packages.RpmBase):
 
commit d9950f57c0389874760e1d680462f23d43ebfb08
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Oct 4 10:56:03 2007 +0200

    Adjust test case to the now fixed PackageSack: There now is one "remove" transaction member as the "zip" package now is updated instead of just installed

diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 37f5c73..6b3badc 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -374,15 +374,18 @@ class DepsolveTests(unittest.TestCase):
         self.assertEquals('ok', self.resolveCode())
 
         txmbrs = self.tsInfo.matchNaevr()
-        self.assertEquals(3, len(txmbrs))
+        self.assertEquals(4, len(txmbrs))
         
         txmbrs = self.tsInfo.matchNaevr('zap')
         self.assertEquals(1, len(txmbrs))
         self.assertEquals(('zap', 'i386', '2', '1.3', '4'), txmbrs[0].pkgtup)
         
         txmbrs = self.tsInfo.matchNaevr('zip')
-        self.assertEquals(1, len(txmbrs))
+        self.assertEquals(2, len(txmbrs))
         self.assertEquals(('zip', 'i386', '4', '2.6', '8'), txmbrs[0].pkgtup)
+        self.assertEquals(txmbrs[0].ts_state, 'u')
+        self.assertEquals(('zip', 'i386', '2', '1.3', '4'), txmbrs[1].pkgtup)
+        self.assertEquals(txmbrs[1].ts_state, None)
         
         txmbrs = self.tsInfo.matchNaevr('zsh')
         self.assertEquals(1, len(txmbrs))
commit 406a7bd0b74cca885d48daacd8246ad6023e08e2
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Oct 4 10:50:18 2007 +0200

    Add support searching only for some parts of the pkgtup in PackageSack.searchNevra

diff --git a/yum/packageSack.py b/yum/packageSack.py
index 41b10df..ec48403 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -441,8 +441,23 @@ class PackageSack(PackageSackBase):
         self._checkIndexes(failure='build')
         if self.nevra.has_key((name, epoch, ver, rel, arch)):
             return self.nevra[(name, epoch, ver, rel, arch)]
-        else:
-            return []
+        elif name is not None:
+            pkgs = self.nevra.get((name, None, None, None, None), [])
+        else: 
+            pkgs = []
+            for pkgsbyRepo in self.pkgsByRepo.itervalues():
+                pkgs.extend(pkgsbyRepo)
+
+        result = [ ]
+        for po in pkgs:
+            if ((name and name!=po.name) or
+                (epoch and epoch!=po.epoch) or
+                (ver and ver!=po.ver) or
+                (rel and re!=po.rel) or
+                (arch and arch!=po.arch)):
+                continue
+            result.append(po)
+        return result
         
     def getProvides(self, name, flags=None, version=(None, None, None)):
         """return dict { packages -> list of matching provides }"""
commit 2f39b512356436d591fdb7ce03aa2a32afbb7c3d
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Oct 5 13:32:58 2007 +0200

    Add newest parameter to all .returnObsoletes() methods - either by supporting it or by raising a NotImplementedError if set to True

diff --git a/yum/packageSack.py b/yum/packageSack.py
index 72b35bf..41b10df 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()
 
@@ -500,7 +500,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():
@@ -511,6 +511,19 @@ class PackageSack(PackageSackBase):
                 obs[po.pkgtup] = po.obsoletes
             else:
                 obs[po.pkgtup].extend(po.obsoletes)
+
+        if not newest:
+            return obs
+
+        # FIXME - this is slooooooooooooooooooooooooooooooow
+        # get the dict back
+        newest_tups = set((pkg.pkgtup for pkg in self.returnNewestByName()))
+
+        # go through each of the keys of the obs dict and see if it is in the
+        # sack of newest pkgs - if it is not - remove the entry
+        for obstup in obs.iterkeys():
+            if obstup not in  newest_tups:
+                del obs[obstup]
             
         return obs
         
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 9740f95..df03c08 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -394,7 +394,10 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
          
         return result
         
-    def returnObsoletes(self):
+    def returnObsoletes(self, newest=False):
+        if newest:
+            raise NotImplementedError()
+
         obsoletes = {}
         for (rep,cache) in self.primarydb.items():
             cur = cache.cursor()



More information about the Yum-cvs-commits mailing list