[Yum-devel] [PATCH 3/3] Add tests for update-to/upgrade-to, and fix generic code so tests work.

James Antill james at and.org
Wed Mar 30 22:01:35 UTC 2011


---
 test/simpleupdatetests.py |  119 +++++++++++++++++++++++++++++++++++++++++++++
 test/testbase.py          |    4 ++
 yum/packageSack.py        |    9 +++
 3 files changed, 132 insertions(+), 0 deletions(-)

diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
index 6bc2efe..6177fb1 100644
--- a/test/simpleupdatetests.py
+++ b/test/simpleupdatetests.py
@@ -871,3 +871,122 @@ class SimpleUpdateTests(OperationsTests):
                                      [pa1, pa2], multi_cmds=True)
         self.assert_(res=='ok', msg)
         self.assertResult((pa1, pa2))
+
+    # Test how update-to != update.
+    def _setupUpdateTo(self):
+        foo11 = FakePackage('foo', '1', '1', '0', 'i386')
+        foo11.addProvides('foobar', 'EQ', ('0', '1', '1'))
+        foo12 = FakePackage('foo', '1', '2', '0', 'i386')
+        foo12.addProvides('foobar', 'EQ', ('0', '1', '2'))
+        foo13 = FakePackage('foo', '1', '3', '0', 'i386')
+        foo13.addProvides('foobar', 'EQ', ('0', '1', '3'))
+        foo20 = FakePackage('foo', '2', '0', '0', 'i386')
+        foo20.addProvides('foobar', 'EQ', ('0', '2', '0'))
+        all = (foo11, foo12, foo13, foo20)
+        return locals()
+
+    def testUpdateTo1_1(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update', 'foo'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo20'],))
+
+    def testUpdateTo1_2(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update-to', 'foo'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo20'],))
+
+    def testUpdateTo2_1(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update', 'foo-1-2'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo12'],))
+
+    def testUpdateTo2_2(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update-to', 'foo-1-2'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo12'],))
+
+    def testUpdateTo3_1(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update', 'foo-1-2'],
+                                     [pkgs['foo12']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo20'],))
+
+    def testUpdateTo3_2(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update-to', 'foo-1-2'],
+                                     [pkgs['foo12']],
+                                     pkgs['all'])
+        # Nothing to do...
+        self.assert_(res==0, msg)
+
+
+    def testUpdateToProv1_1(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update', 'foobar'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo20'],))
+
+    def testUpdateToProv1_2(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update-to', 'foobar'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo20'],))
+
+    def testUpdateToProv2_1(self):
+        pkgs = self._setupUpdateTo()
+        #  This is kind of annoying, maybe even a bug (but an old one) what
+        # happens is that in "update" we only look for provides matches on
+        # installed pkgs. ... so we can't see a version mismatch. Thus. we
+        # don't see any pkgs.
+        #  It also prints an annoying msg. at critical level. So ignoring.
+        if True:
+            return
+        res, msg = self.runOperation(['update', 'foobar = 1-2'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        # self.assert_(res=='ok', msg)
+        # self.assertResult((pkgs['foo12'],))
+        self.assert_(res==0, msg)
+
+    def testUpdateToProv2_2(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update-to', 'foobar = 1-2'],
+                                     [pkgs['foo11']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo12'],))
+
+    def testUpdateToProv3_1(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update', 'foobar = 1-2'],
+                                     [pkgs['foo12']],
+                                     pkgs['all'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['foo20'],))
+
+    def testUpdateToProv3_2(self):
+        pkgs = self._setupUpdateTo()
+        res, msg = self.runOperation(['update-to', 'foobar = 1-2'],
+                                     [pkgs['foo12']],
+                                     pkgs['all'])
+        # Nothing to do...
+        self.assert_(res==0, msg)
+
diff --git a/test/testbase.py b/test/testbase.py
index d9e23f1..12025ce 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -18,6 +18,8 @@ from yum.rpmsack import RPMDBPackageSack as _rpmdbsack
 import inspect
 from rpmUtils import arch
 from rpmUtils.transaction import initReadOnlyTransaction
+import rpmUtils.miscutils
+
 
 #############################################################
 ### Helper classes ##########################################
@@ -320,6 +322,8 @@ class FakeRpmDb(packageSack.PackageSack):
         # convert flags & version for unversioned reqirements
         if not version:
             version=(None, None, None)
+        if type(version) in (str, type(None), unicode):
+            version = rpmUtils.miscutils.stringToVersion(version)
         if flags == '0':
             flags=None
         for po in self.provides.get(name, []):
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 153edbb..4af563a 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -24,6 +24,7 @@ import re
 import fnmatch
 import misc
 from packages import parsePackages
+import rpmUtils.miscutils
 from rpmUtils.miscutils import compareEVR
 
 class PackageSackVersion:
@@ -702,6 +703,10 @@ class PackageSack(PackageSackBase):
     def getProvides(self, name, flags=None, version=(None, None, None)):
         """return dict { packages -> list of matching provides }"""
         self._checkIndexes(failure='build')
+        if version is None:
+            version = (None, None, None)
+        elif type(version) in (str, type(None), unicode):
+            version = rpmUtils.miscutils.stringToVersion(version)
         result = { }
         for po in self.provides.get(name, []):
             hits = po.matchingPrcos('provides', (name, flags, version))
@@ -716,6 +721,10 @@ class PackageSack(PackageSackBase):
     def getRequires(self, name, flags=None, version=(None, None, None)):
         """return dict { packages -> list of matching requires }"""
         self._checkIndexes(failure='build')
+        if version is None:
+            version = (None, None, None)
+        elif type(version) in (str, type(None), unicode):
+            version = rpmUtils.miscutils.stringToVersion(version)
         result = { }
         for po in self.requires.get(name, []):
             hits = po.matchingPrcos('requires', (name, flags, version))
-- 
1.7.3.4



More information about the Yum-devel mailing list