示例#1
0
    def testGetJobBasedOnProductGroups(self):
        handle = self.getRbuildHandle()
        self.rbuildCfg.serverUrl = None
        from rbuild_plugins.build import groups
        handle.productStore = mock.MockObject()
        handle.product = mock.MockObject()

        groupFlavors = [('group-dist', 'is: x86'),
                        ('group-dist', 'is: x86_64')]
        handle.productStore.getGroupFlavors._mock.setReturn(groupFlavors)
        handle.productStore.getRmakeConfigPath._mock.setReturn(
                                                self.workDir + '/rmakerc')
        label = 'localhost@rpl:linux'
        handle.productStore.getActiveStageLabel._mock.setReturn(label)
        handle.product.getLabelForStage._mock.setReturn(label)
        handle.product.getBaseFlavor._mock.setReturn('')
        mock.mockMethod(handle.facade.conary._findTroves)
        groupSpec = ('group-dist:source', None, None)
        groupTup = self.makeTroveTuple('group-dist:source=@rpl:linux/1.0-1')
        handle.facade.conary._findTroves._mock.setReturn(
                                                    {groupSpec : [groupTup]},
                                                    [groupSpec],
                                                    label, allowMissing=True)
        groupsToBuild = ['group-dist{x86}', 'group-dist{x86_64}']
        mock.mockMethod(handle.facade.rmake.createBuildJobForStage)
        handle.facade.rmake.createBuildJobForStage._mock.setReturn('r1',
                                                groupsToBuild, recurse=True)

        # test1
        job = groups._getJobBasedOnProductGroups(handle, {}, recurse=True)
        assert(job == 'r1')

        # test2: test to see what it does when there are no groups.
        handle.facade.conary._findTroves._mock.setReturn({},
                                                    [groupSpec],
                                                    label, allowMissing=True)
        job = groups._getJobBasedOnProductGroups(handle, {}, recurse=True)
        assert(job is None)

        # test3: when there is a replacement group recipe, we should use
        # the one on disk and not search the repository for it.
        groupRecipe = self.workDir + '/group-dist.recipe'
        groupsToBuild = [ groupRecipe + '{x86}', groupRecipe + '{x86_64}']
        handle.facade.rmake.createBuildJobForStage._mock.setReturn('r2',
                                                groupsToBuild, recurse=True)
        handle.facade.conary._findTroves._mock.setReturn({},
                                                    [], label,
                                                    allowMissing=True)
        job = groups._getJobBasedOnProductGroups(handle, 
                                                   {'group-dist' : groupRecipe},
                                                   recurse=True)
        assert(job == 'r2')
        # test 3 -  no groups.
        handle.productStore.getGroupFlavors._mock.setReturn([])
        job = groups._getJobBasedOnProductGroups(handle, {}, recurse=True)
        assert(job is None)
示例#2
0
    def testGetJobBasedOnProductGroups(self):
        handle = self.getRbuildHandle()
        self.rbuildCfg.serverUrl = None
        from rbuild_plugins.build import groups

        handle.productStore = mock.MockObject()
        handle.product = mock.MockObject()

        groupFlavors = [("group-dist", "is: x86"), ("group-dist", "is: x86_64")]
        handle.productStore.getGroupFlavors._mock.setReturn(groupFlavors)
        handle.productStore.getRmakeConfigPath._mock.setReturn(self.workDir + "/rmakerc")
        label = "localhost@rpl:linux"
        handle.productStore.getActiveStageLabel._mock.setReturn(label)
        handle.product.getLabelForStage._mock.setReturn(label)
        handle.product.getBaseFlavor._mock.setReturn("")
        mock.mockMethod(handle.facade.conary._findTroves)
        groupSpec = ("group-dist:source", None, None)
        groupTup = self.makeTroveTuple("group-dist:source=@rpl:linux/1.0-1")
        handle.facade.conary._findTroves._mock.setReturn({groupSpec: [groupTup]}, [groupSpec], label, allowMissing=True)
        groupsToBuild = ["group-dist{x86}", "group-dist{x86_64}"]
        mock.mockMethod(handle.facade.rmake.createBuildJobForStage)
        handle.facade.rmake.createBuildJobForStage._mock.setReturn("r1", groupsToBuild, recurse=True)

        # test1
        job = groups._getJobBasedOnProductGroups(handle, {}, recurse=True)
        assert job == "r1"

        # test2: test to see what it does when there are no groups.
        handle.facade.conary._findTroves._mock.setReturn({}, [groupSpec], label, allowMissing=True)
        job = groups._getJobBasedOnProductGroups(handle, {}, recurse=True)
        assert job is None

        # test3: when there is a replacement group recipe, we should use
        # the one on disk and not search the repository for it.
        groupRecipe = self.workDir + "/group-dist.recipe"
        groupsToBuild = [groupRecipe + "{x86}", groupRecipe + "{x86_64}"]
        handle.facade.rmake.createBuildJobForStage._mock.setReturn("r2", groupsToBuild, recurse=True)
        handle.facade.conary._findTroves._mock.setReturn({}, [], label, allowMissing=True)
        job = groups._getJobBasedOnProductGroups(handle, {"group-dist": groupRecipe}, recurse=True)
        assert job == "r2"
        # test 3 -  no groups.
        handle.productStore.getGroupFlavors._mock.setReturn([])
        job = groups._getJobBasedOnProductGroups(handle, {}, recurse=True)
        assert job is None
示例#3
0
def _createRmakeJobForPackages(handle, packageList=None, recurse=True):
    if packageList and not recurse:
        return _getJobFromNames(handle, packageList)
    else:
        allRecipes = handle.productStore.getEditedRecipeDicts()
        packageRecipes, groupRecipes = allRecipes
        if packageList is not None:
            packageRecipes = dict(x for x in packageRecipes.items() 
                                  if x[0] in packageList)
            if len(packageRecipes) < len(packageList):
                notFound = set(packageList) - set(packageRecipes)
                raise errors.PluginError(
                    'the following packages'
                    ' were not found: %s' % ', '.join(sorted(notFound)))
            assert(len(packageRecipes) == len(packageList))
        elif not packageRecipes:
            raise errors.PluginError(
                    'no packages are currently being edited - nothing to build')

        mainJob = groups._getJobBasedOnProductGroups(handle, groupRecipes,
                                                     recurse=True)
        # overlay the main job with the recipes that are checked out.
        return _addInEditedPackages(handle, mainJob, packageRecipes)
示例#4
0
def _createRmakeJobForPackages(handle, packageList=None, recurse=True):
    if packageList and not recurse:
        return _getJobFromNames(handle, packageList)
    else:
        allRecipes = handle.productStore.getEditedRecipeDicts()
        packageRecipes, groupRecipes = allRecipes
        if packageList is not None:
            packageRecipes = dict(x for x in packageRecipes.items()
                                  if x[0] in packageList)
            if len(packageRecipes) < len(packageList):
                notFound = set(packageList) - set(packageRecipes)
                raise errors.PluginError('the following packages'
                                         ' were not found: %s' %
                                         ', '.join(sorted(notFound)))
            assert (len(packageRecipes) == len(packageList))
        elif not packageRecipes:
            raise errors.PluginError(
                'no packages are currently being edited - nothing to build')

        mainJob = groups._getJobBasedOnProductGroups(handle,
                                                     groupRecipes,
                                                     recurse=True)
        # overlay the main job with the recipes that are checked out.
        return _addInEditedPackages(handle, mainJob, packageRecipes)