Esempio n. 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'])
Esempio n. 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()
Esempio n. 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
Esempio n. 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')
Esempio n. 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
Esempio n. 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')
Esempio n. 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)
Esempio n. 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)])
Esempio n. 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)