Пример #1
0
    def testGetPlatformAutoLoadRecipes(self):
        pd = proddef.ProductDefinition()
        handle = conaryfacadetest.MockHandle()
        handle.product = pd
        handle.facade = mock.MockObject()
        handle.getConfig().user = ('JeanValjean', 'password')

        productStore = mock.MockInstance(dirstore.CheckoutProductStore)
        productStore._mock.enableMethod('getPlatformAutoLoadRecipes')
        productStore._mock.set(_handle=handle)

        facade = conaryfacade.ConaryFacade(handle)
        repos = conaryfacadetest.MockRepositoryClient()
        self.mock(facade, '_getRepositoryClient', lambda: repos)

        handle.facade._mock.set(conary=facade)
        alr = productStore.getPlatformAutoLoadRecipes()
        self.assertEquals(alr, [])

        alRecipes = ['foo', 'bar']
        for troveName in alRecipes:
            pd.addPlatformAutoLoadRecipe(troveName)

        pkg1 = self.makeTroveTuple('foo=/foo.rpath.com@foo:2/2-2-2')
        groupTup1 = self.makeTroveTuple('group-foo=/foo.rpath.com@foo:1/1-1-1')
        groupTrv1 = mock.MockObject(stableReturnValues=True)
        groupTrv1.iterTroveList._mock.setDefaultReturn([pkg1])
        self.mock(repos, 'getTroves', lambda *args, **kwargs: [groupTrv1])
        pd.addSearchPath(groupTup1[0],
                         label=str(groupTup1[1].branch()),
                         version=str(groupTup1[1].trailingRevision()))

        alr = productStore.getPlatformAutoLoadRecipes()
        self.assertEquals(alr, ['foo=/foo.rpath.com@foo:2/2-2-2'])
Пример #2
0
 def getProductLabelFromNameAndVersion(self, productName, versionName):
     versionId = self.getBranchIdFromName(productName, versionName)
     error, stream = self.server.getProductDefinitionForVersion(versionId)
     if error:
         raise errors.RbuilderError(*stream)
     product = proddef.ProductDefinition(stream)
     return product.getProductDefinitionLabel()
Пример #3
0
def getProductDefinition(cfg, version='1.0', upstream=None, buildFlavors=None):
    p = proddef.ProductDefinition()
    p.setBaseFlavor(str(cfg.buildFlavor))
    p.setProductName('foo')
    p.setProductDescription('foo')
    p.setProductShortname('foo')
    p.setProductVersion(version)
    p.setProductVersionDescription('version description')
    p.setConaryRepositoryHostname('localhost')
    p.setConaryNamespace('foo')
    p.setImageGroup('group-os')
    p.addStage(name='devel', labelSuffix='-devel')
    p.addStage(name='qa', labelSuffix='-qa')
    p.addStage(name='stable', labelSuffix='')
    if upstream:
        if not isinstance(upstream, list):
            upstream = [upstream]
        for item in upstream:
            upstreamName, upstreamLabel = item.split('=', 1)
            p.addSearchPath(upstreamName, upstreamLabel)
    if not buildFlavors:
        buildFlavors = ['']
    arch = deps.getMajorArch(cfg.buildFlavor)
    for idx, buildFlavor in enumerate(buildFlavors):
        buildFlavor = buildFlavor.strip()
        if buildFlavor:
            buildFlavor += ' '
        buildFlavor += 'is: ' + arch
        p.addBuildDefinition(name='build%s' % idx,
                             image=p.imageType('applianceIsoImage'),
                             stages=['devel', 'qa', 'stable'],
                             imageGroup='group-dist',
                             flavor=buildFlavor)

    xmlsubs = p.xmlFactory()
    platformClassifier = xmlsubs.platformClassifierTypeSub(tags='linux')

    if platform_information is None:
        platformInformation = xmlsubs.platformInformationTypeSub(
            originLabel=str(cfg.buildLabel), )
        platformInformation.set_platformClassifier(platformClassifier)
        platformInformation.set_bootstrapTrove([])
        platformInformation.set_rpmRequirement([])
    else:
        platformInformation = platform_information.PlatformInformation(
            str(cfg.buildLabel),
            platformClassifier=platformClassifier,
            bootstrapTroves=[],
            rpmRequirements=[],
        )

        def export(*args, **kwargs):
            pass

        platformInformation.export = export

    p.setPlatformInformation(platformInformation)

    return p
Пример #4
0
    def testCore(self):
        pd = proddef.ProductDefinition()
        pd.setConaryRepositoryHostname('localhost')
        pd.setConaryNamespace('rpl')
        pd.setProductShortname('a')
        pd.setProductVersion('1')
        pd.addStage('foo', '')
        pd.addStage('bar', '-bar')

        productClass = mock.MockObject(stableReturnValues=True)
        productClass._mock.setReturn(pd)
        self.mock(proddef, 'ProductDefinition', productClass)

        handle = self.getRbuildHandle()
        p = abstract.ProductStore(handle)

        proddefObj = p.getProduct()
        _, kw = productClass._mock.popCall()
        kw = dict(kw)
        self.assertEquals(kw, {})  # no fromStream=

        # get trivial errors out of the way first
        self.assertRaises(errors.IncompleteInterfaceError, p.getStatus, 'asdf')
        self.assertRaises(errors.IncompleteInterfaceError, p.getPackageJobId)
        self.assertRaises(errors.IncompleteInterfaceError, p.getGroupJobId)
        self.assertRaises(errors.IncompleteInterfaceError, p.getImageJobId)
        self.assertRaises(errors.IncompleteInterfaceError, p.setPackageJobId,
                          1)
        self.assertRaises(errors.IncompleteInterfaceError, p.setGroupJobId, 1)
        self.assertRaises(errors.IncompleteInterfaceError, p.setImageJobId, 1)
        self.assertRaises(errors.IncompleteInterfaceError,
                          p.getRbuildConfigData)
        self.assertRaises(errors.RbuildError, p.getRbuildConfigPath)
        self.assertRaises(errors.IncompleteInterfaceError,
                          p.getRmakeConfigData)
        self.assertRaises(errors.RbuildError, p.getRmakeConfigPath)

        handle.product = None
        p.update()
        self.assertEquals(handle.product, proddefObj)

        self.assertEquals([x for x in p.iterStageNames()], ['foo', 'bar'])

        self.assertEquals(p.getNextStageName('foo'), 'bar')
        self.assertEquals(p.getNextStageName('bar'), None)

        self.assertRaises(errors.RbuildError, p.checkStageIsValid, 'fdsa')

        p._currentStage = None
        self.assertRaises(errors.RbuildError, p.getActiveStageName)
        mock.mockMethod(p.checkStageIsValid)
        p.setActiveStageName('foo')
        p.checkStageIsValid._mock.assertCalled('foo')
        self.assertEquals(p.getActiveStageName(), 'foo')

        self.assertEquals(p.getActiveStageLabel(), 'localhost@rpl:a-1')
Пример #5
0
 def _newProduct(self, name='Foo', shortName='foo', description='More foo',
         version='1.0', versionDescription='Super version 1.0',
         conaryRepositoryHostname='cny.tv', conaryNamespace='ns'):
     pd = proddef.ProductDefinition()
     pd.setProductName(name)
     pd.setProductShortname(shortName)
     pd.setProductDescription(description)
     pd.setProductVersion(version)
     pd.setProductVersionDescription(versionDescription)
     pd.setConaryRepositoryHostname(conaryRepositoryHostname)
     pd.setConaryNamespace(conaryNamespace)
     pd.setImageGroup('group-os')
     return pd
Пример #6
0
    def testGetBuildDefinitionGroupToBuild(self):
        handle = self.getRbuildHandle()
        productStore = abstract.ProductStore(handle)
        product = proddef.ProductDefinition()
        handle.product = product

        mock.mockMethod(productStore.getSourceGroupMatch)
        productStore.getSourceGroupMatch._mock.setDefaultReturn(
            'group-source-match')

        product.addBuildDefinition(imageGroup='group-foo',
                                   sourceGroup='group-foo-source',
                                   flavor='is: x86')
        bd = product.buildDefinition[0]
        results = productStore.getBuildDefinitionGroupToBuild(bd)
        self.assertEquals(results, 'group-foo-source')
                                           
        product.addBuildDefinition(imageGroup='group-bar',
                                   sourceGroup='group-bar-source',
                                   flavor='is: x86')
        bd = product.buildDefinition[1]
        results = productStore.getBuildDefinitionGroupToBuild(bd)
        self.assertEquals(results, 'group-bar-source')

        product.setSourceGroup('group-toplevel-source')

        product.addBuildDefinition(imageGroup='group-bar',
                                   flavor='is: x86')
        bd = product.buildDefinition[2]
        results = productStore.getBuildDefinitionGroupToBuild(bd)
        self.assertEquals(results, 'group-toplevel-source')

        product.addBuildDefinition(imageGroup='group-bar',
                                   sourceGroup='group-bar-source',
                                   flavor='is: x86')
        bd = product.buildDefinition[3]
        results = productStore.getBuildDefinitionGroupToBuild(bd)
        self.assertEquals(results, 'group-bar-source')

        product.setSourceGroup(None)
        product.addBuildDefinition(imageGroup='group-bar',
                                   flavor='is: x86')
        bd = product.buildDefinition[4]
        results = productStore.getBuildDefinitionGroupToBuild(bd)
        self.assertEquals(results, 'group-source-match')
Пример #7
0
    def testGetSourceGroupMatch(self):
        handle = self.getRbuildHandle()
        productStore = abstract.ProductStore(handle)
        product = proddef.ProductDefinition()
        product.setBaseFlavor('ssl,readline')
        handle.product = product

        product.addBuildDefinition(imageGroup='group-foo',
                                   sourceGroup='group-foo-source',
                                   flavor='is: x86')
        product.addBuildDefinition(imageGroup='group-foo', flavor='is: x86')

        bd = product.buildDefinition[1]
        results = productStore.getSourceGroupMatch(bd)
        self.assertEquals(results, 'group-foo-source')

        product.addBuildDefinition(flavor='is: x86')
        bd = product.buildDefinition[2]
        results = productStore.getSourceGroupMatch(bd)
        self.assertEquals(results, None)
Пример #8
0
    def testGetGroupFlavors(self):
        handle = self.getRbuildHandle()
        productStore = abstract.ProductStore(handle)
        product = proddef.ProductDefinition()
        product.setBaseFlavor('ssl,readline')
        handle.product = product
        mock.mockMethod(productStore.getProduct)
        productStore.getProduct._mock.setDefaultReturn(product)
        # First, make sure that zero images defined is an error RBLD-171
        self.assertRaises(errors.MissingImageDefinitionError,
                          productStore.getGroupFlavors)

        # Now, test that the right flavor sets are found
        product.addBuildDefinition(imageGroup='group-foo', flavor='is: x86')
        product.addBuildDefinition(imageGroup='group-bar', flavor='is: x86_64')
        results = productStore.getGroupFlavors()
        # These flavors are too simplistic to work in practice! RBLD-172
        x86Flavor = 'readline,ssl is: x86'
        x8664Flavor = 'readline,ssl is: x86_64'
        assert (results == [('group-foo', x86Flavor),
                            ('group-bar', x8664Flavor)])
Пример #9
0
    def getProductLabelFromNameAndVersion(self, productName, versionName):
        #pylint: disable-msg=R0914
        # not a great candidate for refactoring
        productId = self.getProductId(productName)
        error, versionList = self.server.getProductVersionListForProduct(
            productId)
        if error:
            raise errors.RbuilderError(*versionList)

        versionId = None
        versionNames = []
        # W0612: leave unused variables as documentation
        # W0631: versionId is guaranteed to be defined
        #pylint: disable-msg=W0612,W0631
        for (versionId2, productId2, namespace, versionName2,
             desc) in versionList:
            versionNames.append(versionName2)
            if versionName == versionName2:
                versionId = versionId2
                break

        if versionId:
            error, stream = self.server.getProductDefinitionForVersion(
                versionId)
            if error:
                raise errors.RbuilderError(*stream)
            product = proddef.ProductDefinition(stream)
            return product.getProductDefinitionLabel()
        else:
            errstr = '%s is not a valid version for product %s.' % \
                (versionName, productName)
            if versionNames:
                errstr += '\nValid versions are: %s' % \
                    ', '.join(versionNames)
            else:
                errstr += '\nNo versions found for product %s.' % productName
            raise errors.RbuildError(errstr)