def testDifferentName(self): name = "TestPackage" version1 = "1.0.1" release = "2" # Checking simple comparison p1 = Provides(name, version1, release) r = Requires(name + "Toto", None, None) self.assertFalse(r.provideMatches(p1))
def testRequireWithNoVersion(self): name = "TestPackage" version1 = "1.0.1" release = "2" # Checking simple comparison p1 = Provides(name, version1, release) r = Requires(name, None, None) self.assertTrue(r.provideMatches(p1))
def testGreater(self): name = "TestPackage" version1 = "1.0.1" version2 = "1.2.0" version3 = "1.3.5" release = "2" # Checking simple comparison p1 = Provides(name, version1, release) p2 = Provides(name, version2, release) p3 = Provides(name, version3, release) ctor = "GT" r = Requires(name, version2, release, 0, ctor, None) self.assertFalse(r.provideMatches(p1), "%s not %s %s" % (p1, ctor, r)) self.assertFalse(r.provideMatches(p2), "%s not %s %s" % (p2, ctor, r)) self.assertTrue(r.provideMatches(p3), "%s %s %s" % (p3, ctor, r)) ctor = "GE" r = Requires(name, version2, release, 0, ctor, None) self.assertFalse(r.provideMatches(p1), "%s not %s %s" % (p1, ctor, r)) self.assertTrue(r.provideMatches(p2), "%s %s %s" % (p2, ctor, r)) self.assertTrue(r.provideMatches(p3), "%s %s %s" % (p3, ctor, r))
def testFindReleaseUpdate(self): p = self.lbYumClient.findLatestMatchingName("TPRel", "4.2.7", "1") self.assertNotEqual(p, None) self.assertEqual(p.version, "4.2.7") self.assertEqual(p.release, "1") req = Requires(p.name, None, None) newest = self.lbYumClient.findLatestMatchingRequire(req) self.assertEqual(newest.version, "4.2.8") self.assertEqual(newest.release, "1") req2 = Requires(p.name, p.version, None) newer = self.lbYumClient.findLatestMatchingRequire(req2) self.assertEqual(newer.version, "4.2.7") self.assertEqual(newer.release, "2")
def testMatchEqual(self): name = "TestPackage" version1 = "1.0.1" version2 = "1.2.0" release = "2" release2 = "3" # Checking equality p1 = Provides(name, version1, release) r = Requires(name, version1, release, 0, "EQ", None) self.assertTrue(r.provideMatches(p1), "%s should match %s" % (p1, r)) # Checking release mismatch p2 = Provides(name, version1, release2) self.assertFalse(r.provideMatches(p2), "%s should not match %s" % (p2, r)) # Checking version mismatch p3 = Provides(name, version2, release) self.assertFalse(r.provideMatches(p3), "%s should not match %s" % (p3, r)) # Checking version mismatch p4 = Provides(name + "Toto", version1, release) self.assertFalse(r.provideMatches(p4), "%s should not match %s" % (p4, r))
def _checkUpdates(self, checkOnly): """ Check whether packages could be updated in the repository """ from DependencyManager import Requires, Provides self.log.info("Checking for updates") packageList = {} # First grouping by key/version to make sure we only try to update # the newest installed for (name, version, release) in self._listInstalledPackages(): prov = Provides(name, version, release, None, "EQ") key = "%s-%s" % (name, version) namevers = packageList.get(key, list([])) namevers.append(prov) packageList[key] = namevers updateCount = 0 for key in packageList.keys(): # Only checking for updates of the last installed version newest = sorted(packageList[key])[-1] (name, version, release) = (newest.name, newest.version, newest.release) # Creating a RPM requirement and checking whether we have a match... req = Requires(newest.name, newest.version, None, None, "EQ", None) update = self.lbYumClient.findLatestMatchingRequire(req) if update != None and update > newest: updateCount += 1 if checkOnly: self.log.warning( "%s.%s-%s could be updated to %s" % (name, version, release, update.rpmName())) else: self.log.warning( "Updating %s.%s-%s to %s" % (name, version, release, update.rpmName())) self.installRpm(update.name, update.version, update.release, False, True) # Writing summary if checkOnly: self.log.warning("Number of packages to update: %d" % updateCount) else: self.log.warning("Updated %d packages" % updateCount)
def _findpackage(self, name, version, cmtconfig): """ Find all the packages matching a triplet name, version, config """ pname = name.upper() pnameVer = None pnameVerConfig = None if version != None: pnameVer = pname + "_" + version else: pnameVer = pname if cmtconfig != None: pnameVerConfig = pnameVer + "_" + cmtconfig.replace("-", "_") else: pnameVerConfig = pnameVer from DependencyManager import Requires req = Requires(pnameVerConfig, None, None, None, "GE", None) pack = self.lbYumClient.findLatestMatchingRequire(req) res = [] if pack != None: res.append(pack) return res
def testPackageMatching(self): r = Requires("TestPackage", "1.0.0", "1", None, "EQ", None) p = self.lbYumClient.findLatestMatchingRequire(r) self.assertNotEqual(p, None) self.assertEqual(p.version, "1.0.0")
def checkClient(self, lbYumClient): self.assertEqual(len(lbYumClient.repositories.keys()), 3) self.assertEqual(len([p for p in lbYumClient.listPackages("BRUNEL")]), 7) p = lbYumClient.findLatestMatchingName( "ROOT_5.32.02_x86_64_slc5_gcc46_opt") self.assertEquals(p.version, "1.0.0") self.assertEquals(p.release, "1") b = lbYumClient.findLatestMatchingRequire( Requires("BRUNEL_v43r1p1_x86_64_slc5_gcc43_opt", "1.0.0", "1")) self.assertEquals(b.name, "BRUNEL_v43r1p1_x86_64_slc5_gcc43_opt") self.assertEquals(b.version, "1.0.0") self.assertEquals(b.release, "1") allrequired = set([ 'ROOT_5.34.00_x86_64_slc5_gcc43_opt', 'castor_2.1.9_9_x86_64_slc5_gcc43_opt', 'COMPAT', 'CMT', 'libunwind_5c2cade_x86_64_slc5_gcc43_opt', 'lapack_3.4.0_x86_64_slc5_gcc43_opt', 'neurobayes_expert_3.7.0_x86_64_slc5_gcc43_opt', 'cernlib_2006a_x86_64_slc5_gcc43_opt', 'XercesC_3.1.1p1_x86_64_slc5_gcc43_opt', 'Grid_gfal_1.11.8_2_x86_64_slc5_gcc43_opt', 'DBASE_TCK_L0TCK', 'GAUDI_v23r3_x86_64_slc5_gcc43_opt', 'expat_2.0.1_x86_64_slc5_gcc43_opt', 'pygraphics_1.2p1_python2.6_x86_64_slc5_gcc43_opt', 'DBASE_TCK_HltTCK', 'CORAL_CORAL_2_3_23_x86_64_slc5_gcc43_opt', 'qt_4.7.4_x86_64_slc5_gcc43_opt', 'Grid_voms-api-cpp_1.9.17_1_x86_64_slc5_gcc43_opt', 'sqlite_3070900_x86_64_slc5_gcc43_opt', 'CppUnit_1.12.1_p1_x86_64_slc5_gcc43_opt', 'GSL_1.10_x86_64_slc5_gcc43_opt', 'uuid_1.42_x86_64_slc5_gcc43_opt', 'QMtest_2.4.1_python2.6_x86_64_slc5_gcc43_opt', 'tcmalloc_1.7p1_x86_64_slc5_gcc43_opt', 'xqilla_2.2.4_x86_64_slc5_gcc43_opt', 'REC_v14r1p1', 'BRUNEL_v43r1p1', 'gcc_4.3.5_x86_64_slc5', 'COOL_COOL_2_8_14_x86_64_slc5_gcc43_opt', 'fftw3_3.1.2_x86_64_slc5_gcc43_opt', 'xrootd_3.1.0p2_x86_64_slc5_gcc43_opt', 'AIDA_3.2.1_common', 'zlib_1.2.5_x86_64_slc5_gcc43_opt', 'LHCB_v35r1p1_x86_64_slc5_gcc43_opt', 'Grid_cgsi-gsoap_1.3.3_1_x86_64_slc5_gcc43_opt', 'LCGCMT_64_x86_64_slc5_gcc43_opt', 'Boost_1.48.0_python2.6_x86_64_slc5_gcc43_opt', 'DBASE_FieldMap', 'Python_2.6.5p2_x86_64_slc5_gcc43_opt', 'PARAM_ParamFiles', 'LBCOM_v13r1p1', 'Grid_LFC_1.7.4_7sec_x86_64_slc5_gcc43_opt', 'pytools_1.7_python2.6_x86_64_slc5_gcc43_opt', 'COOL_COOL_2_8_14_common', 'pyanalysis_1.3_python2.6_x86_64_slc5_gcc43_opt', 'LBCOM_v13r1p1_x86_64_slc5_gcc43_opt', 'Grid_globus_4.0.7_VDT_1.10.1_x86_64_slc5_gcc43_opt', 'RELAX_RELAX_1_3_0h_x86_64_slc5_gcc43_opt', 'oracle_11.2.0.1.0p3_x86_64_slc5_gcc43_opt', 'dcache_client_2.47.5_0_x86_64_slc5_gcc43_opt', 'DBASE_AppConfig', 'PARAM_ChargedProtoANNPIDParam', 'HepPDT_2.06.01_x86_64_slc5_gcc43_opt', 'clhep_1.9.4.7_x86_64_slc5_gcc43_opt', 'Grid_voms-api-c_1.9.17_1_x86_64_slc5_gcc43_opt', 'DBASE_Det_SQLDDDB', 'LCGCMT_LCGCMT_64_common', 'REC_v14r1p1_x86_64_slc5_gcc43_opt', 'LHCB_v35r1p1', 'GAUDI_v23r3', 'frontier_client_2.8.5_x86_64_slc5_gcc43_opt', 'graphviz_2.28.0_x86_64_slc5_gcc43_opt', 'HepMC_2.06.05_x86_64_slc5_gcc43_opt', 'LBSCRIPTS', 'CORAL_CORAL_2_3_23_common', 'fastjet_2.4.4_x86_64_slc5_gcc43_opt', 'Grid_lcg-dm-common_1.7.4_7sec_x86_64_slc5_gcc43_opt', 'blas_20110419_x86_64_slc5_gcc43_opt', 'gccxml_0.9.0_20110825_x86_64_slc5_gcc43_opt', 'gcc_4.3.5_x86_64_slc5_gcc43_opt', 'DBASE_FieldMap', 'BRUNEL_v43r1p1_x86_64_slc5_gcc43_opt' ]) found = set([p.name for p in lbYumClient.getAllPackagesRequired(b)]) self.assertEquals(found, allrequired)