[yum-cvs] yum: test/depsolvetests.py
James Bowes
jbowes at linux.duke.edu
Wed Jul 25 17:20:37 UTC 2007
test/depsolvetests.py | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 155 insertions(+)
commit 6751575d20f30c95f6ff44fa0f06561251d97378
Author: James Bowes <jbowes at redhat.com>
Date: Wed Jul 25 13:15:14 2007 -0400
Really add the depsolvetests file.
Apparently cvs add was too hard for me.
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
new file mode 100644
index 0000000..7141b0f
--- /dev/null
+++ b/test/depsolvetests.py
@@ -0,0 +1,155 @@
+import unittest
+import settestpath
+
+from yum import depsolve
+from yum import transactioninfo
+from yum import packages
+from yum import packageSack
+
+
+class FakeConf(object):
+
+ def __init__(self):
+ self.installonlypkgs = []
+
+
+class FakeRepo(object):
+
+ def __init__(self):
+ self.id = None
+
+
+class FakePackage(packages.PackageObject, packages.RpmBase):
+
+ def __init__(self, name, version, release, epoch, arch):
+ 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, '=', (epoch, version, release)))
+
+ self.repo = FakeRepo()
+ self.repoid = None
+
+ def addRequires(self, name, flag, evr):
+ self.prco['requires'].append((name, flag, evr))
+
+
+class FakeRpmDb(object):
+
+ def __init__(self):
+ self.packages = []
+
+ def addPackage(self, po):
+ self.packages.append(po)
+
+ def whatProvides(self, name, flag, evr):
+ results = []
+ for package in self.packages:
+ if package.checkPrco('provides', (name, flag, evr)):
+ results.append(package.pkgtup)
+ return results
+
+ def searchNevra(self, name=None, epoch=None, ver=None, rel=None, arch=None):
+ # Create a match closure for what is being searched for
+ lookfor = [] # A list of (search_name, search_value)
+ loc = locals()
+ for arg in ('name', 'arch', 'epoch', 'ver', 'rel'):
+ val = loc[arg]
+ if val != None:
+ lookfor.append((arg, val))
+
+ ret = []
+ for package in self.packages:
+ ok = True
+ for name, val in lookfor:
+ if getattr(package, name) != val:
+ ok = False
+ break
+ if ok:
+ ret.append(package)
+ return ret
+
+ def searchConflicts(self, name):
+ # XXX no conflicts support for now
+ return []
+
+ def installed(self, name):
+ for package in self.packages:
+ if package.name == name:
+ return True
+ return False
+
+class TestingDepsolve(depsolve.Depsolve):
+
+ def getInstalledPackageObject(self, pkgtup):
+ return self.rpmdb.searchNevra(pkgtup[0], pkgtup[2], pkgtup[3],
+ pkgtup[4], pkgtup[1])[0]
+
+
+def build_depsolver(tsInfo, rpmdb=FakeRpmDb(),
+ pkgSack=packageSack.PackageSack()):
+ solver = TestingDepsolve()
+ solver.conf = FakeConf()
+ solver.tsInfo = tsInfo
+ solver.rpmdb = rpmdb
+ solver.pkgSack = pkgSack
+ return solver
+
+
+class DepsolveTests(unittest.TestCase):
+
+ def testInstallSinglePackageNoRequires(self):
+ po = FakePackage('zsh', '1', '1', None, 'i386')
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ solver = build_depsolver(tsInfo)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0])
+
+ def testInstallSinglePackageRequireNotProvided(self):
+ po = FakePackage('zsh', '1', '1', None, 'i386')
+ po.addRequires('zip', None, (None, None, None))
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ solver = build_depsolver(tsInfo)
+
+ res = solver.resolveDeps()
+ self.assertEquals(1, res[0])
+
+ def testInstallSinglePackageRequireInstalled(self):
+ po = FakePackage('zsh', '1', '1', None, 'i386')
+ po.addRequires('zip', None, (None, None, None))
+
+ tsInfo = transactioninfo.TransactionData()
+ tsInfo.addInstall(po)
+
+ installedpo = FakePackage('zip', '1', '1', None, 'i386')
+ rpmdb = FakeRpmDb()
+ rpmdb.addPackage(installedpo)
+
+ solver = build_depsolver(tsInfo, rpmdb)
+
+ res = solver.resolveDeps()
+ self.assertEquals(2, res[0])
+
+
+def suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(DepsolveTests))
+ return suite
+
+if __name__ == "__main__":
+ unittest.main(defaultTest="suite")
More information about the Yum-cvs-commits
mailing list