[Yum-devel] [PATCH] Test cases for previous change

James Antill james at and.org
Thu Dec 10 17:29:53 UTC 2009


---
 test/operationstests.py |   93 +++++++++++++++++++++++++++++++++++++++++++++++
 test/testbase.py        |    5 ++-
 yum/__init__.py         |    8 ++--
 3 files changed, 101 insertions(+), 5 deletions(-)

diff --git a/test/operationstests.py b/test/operationstests.py
index 18f4b84..dd85ed6 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -141,3 +141,96 @@ class KernelTests(OperationsTests):
         p = self.pkgs
         res, msg = self.runOperation(['install','kernel-2.6.23.8'], p.inst, p.avail)
         self.assertResult(p.inst)
+
+class MultiLibTests(OperationsTests):
+
+    @staticmethod
+    def buildPkgs(pkgs, *args):
+        pkgs.inst = []
+        pkgs.i_foo_1_12_x = FakePackage('foo', '1', '12',arch='x86_64')
+        pkgs.i_wbar_1_12_i = FakePackage('wbar', '1', '12', arch='i586')
+        pkgs.inst.append(pkgs.i_foo_1_12_x)
+        pkgs.inst.append(pkgs.i_wbar_1_12_i)
+
+        pkgs.avail = []
+        pkgs.a_foo_0_2_x = FakePackage('foo', '0',  '2', arch='x86_64')
+        pkgs.a_foo_0_2_i = FakePackage('foo', '0',  '2', arch='i686')
+        pkgs.a_foo_1_12_x = FakePackage('foo', '1', '12', arch='x86_64')
+        pkgs.a_foo_1_12_i = FakePackage('foo', '1', '12', arch='i686')
+        pkgs.a_foo_2_22_x = FakePackage('foo', '2', '22', arch='x86_64')
+        pkgs.a_foo_2_22_i = FakePackage('foo', '2', '22', arch='i686')
+        pkgs.a_bar_1_12_x = FakePackage('bar', '1', '12', arch='x86_64')
+        pkgs.a_bar_1_12_i = FakePackage('bar', '1', '12', arch='i686')
+        pkgs.a_bar_2_22_x = FakePackage('bar', '2', '22', arch='x86_64')
+        pkgs.a_bar_2_22_i = FakePackage('bar', '2', '22', arch='i686')
+
+        # ibar is .i?86 older
+        pkgs.a_ibar_2_22_x = FakePackage('ibar', '2', '22', arch='x86_64')
+        pkgs.a_ibar_1_12_i = FakePackage('ibar', '1', '12', arch='i686')
+
+        # xbar is .x86_64 older
+        pkgs.a_xbar_1_12_x = FakePackage('xbar', '1', '12', arch='x86_64')
+        pkgs.a_xbar_2_22_i = FakePackage('xbar', '2', '22', arch='i686')
+
+        # wbar is arch changing update/downgrade
+        pkgs.a_wbar_0_2_i = FakePackage('wbar', '0', '2', arch='i386')
+        pkgs.a_wbar_2_22_i = FakePackage('wbar', '2', '22', arch='i686')
+
+        for i in ('a_foo_0_2', 'a_foo_1_12', 'a_foo_2_22',
+                  'a_bar_1_12', 'a_bar_2_22'):
+            pkgs.avail.append(getattr(pkgs, i + '_x'))
+            pkgs.avail.append(getattr(pkgs, i + '_i'))
+        pkgs.avail.append(pkgs.a_ibar_2_22_x)
+        pkgs.avail.append(pkgs.a_ibar_1_12_i)
+        pkgs.avail.append(pkgs.a_xbar_1_12_x)
+        pkgs.avail.append(pkgs.a_xbar_2_22_i)
+        pkgs.avail.append(pkgs.a_wbar_0_2_i)
+        pkgs.avail.append(pkgs.a_wbar_2_22_i)
+    
+    def testBestInstall1(self):
+        p = self.pkgs
+        ninst = p.inst[:]
+        ninst.append(p.a_bar_2_22_x)
+        res, msg = self.runOperation(['install', 'bar'], p.inst, p.avail)
+        self.assertResult(ninst)
+
+    def testBestInstall2(self):
+        p = self.pkgs
+        ninst = p.inst[:]
+        ninst.append(p.a_bar_1_12_x)
+        res, msg = self.runOperation(['install', 'bar-1'], p.inst, p.avail)
+        self.assertResult(ninst)
+
+    def testAllInstall1(self):
+        p = self.pkgs
+        ninst = p.inst[:]
+        ninst.append(p.a_bar_2_22_x)
+        ninst.append(p.a_bar_2_22_i)
+        res, msg = self.runOperation(['install', 'bar'], p.inst, p.avail,
+                                     {'multilib_policy' : 'all'})
+        self.assertResult(ninst)
+
+    def testAllInstall2(self):
+        p = self.pkgs
+        ninst = p.inst[:]
+        ninst.append(p.a_bar_1_12_x)
+        ninst.append(p.a_bar_1_12_i)
+        res, msg = self.runOperation(['install', 'bar-1'], p.inst, p.avail,
+                                     {'multilib_policy' : 'all'})
+        self.assertResult(ninst)
+
+    def testAllInstall3(self):
+        p = self.pkgs
+        ninst = p.inst[:]
+        ninst.append(p.a_ibar_2_22_x)
+        res, msg = self.runOperation(['install', 'ibar'], p.inst, p.avail,
+                                     {'multilib_policy' : 'all'})
+        self.assertResult(ninst)
+
+    def testAllInstall4(self):
+        p = self.pkgs
+        ninst = p.inst[:]
+        ninst.append(p.a_xbar_2_22_i)
+        res, msg = self.runOperation(['install', 'xbar'], p.inst, p.avail,
+                                     {'multilib_policy' : 'all'})
+        self.assertResult(ninst)
diff --git a/test/testbase.py b/test/testbase.py
index 3edfe57..c004bdb 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -332,7 +332,8 @@ class OperationsTests(_DepsolveTestsBase):
     buildPkg code.
     """
 
-    def runOperation(self, args, installed=[], available=[]):
+    def runOperation(self, args, installed=[], available=[],
+                     confs={}):
         """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
@@ -345,6 +346,8 @@ class OperationsTests(_DepsolveTestsBase):
         self.xsack = depsolver._pkgSack  = packageSack.PackageSack()
         self.repo = depsolver.repo = FakeRepo("installed")
         depsolver.conf = FakeConf()
+        for conf in confs:
+            setattr(depsolver.conf, conf, confs[conf])
         # We are running nosetest, so we want to see some yum output
         # if a testcase if failing
         depsolver.doLoggingSetup(9,9)
diff --git a/yum/__init__.py b/yum/__init__.py
index 3c324d8..6b25e76 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -51,7 +51,7 @@ import transactioninfo
 import urlgrabber
 from urlgrabber.grabber import URLGrabber, URLGrabError
 from urlgrabber.progress import format_number
-from packageSack import packagesNewestByName, ListPackageSack
+from packageSack import packagesNewestByName, packagesNewestByNameArch, ListPackageSack
 import depsolve
 import plugins
 import logginglevels
@@ -2329,7 +2329,7 @@ class YumBase(depsolve.Depsolve):
                                         use.append(pkg)
                                 pkgs = use
                                
-                        pkgs = packagesNewestByName(pkgs)
+                        pkgs = packagesNewestByNameArch(pkgs)
 
                         if not self.tsInfo.conditionals.has_key(cond):
                             self.tsInfo.conditionals[cond] = []
@@ -2772,7 +2772,7 @@ class YumBase(depsolve.Depsolve):
                            
                             pkgs = use
                            
-                pkgs = packagesNewestByName(pkgs)
+                pkgs = packagesNewestByNameArch(pkgs)
 
                 pkgbyname = {}
                 for pkg in pkgs:
@@ -3087,7 +3087,7 @@ class YumBase(depsolve.Depsolve):
                 # This is done so we don't have to returnObsoletes(newest=True)
                 # It's a minor UI problem for RHEL, but might as well dtrt.
                 obs_pkgs = [self.getPackageObject(tup) for tup in obs_tups]
-                for obsoleting_pkg in packagesNewestByName(obs_pkgs):
+                for obsoleting_pkg in packagesNewestByNameArch(obs_pkgs):
                     tx_return.extend(self.install(po=obsoleting_pkg))
             for available_pkg in availpkgs:
                 for obsoleted in self.up.obsoleting_dict.get(available_pkg.pkgtup, []):
-- 
1.6.5.2



More information about the Yum-devel mailing list