[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