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)