def testTroveFilterFlavors2(self): recipe = self.getRecipe() filt1 = trovefilter.TroveFilter(recipe, flavor='xen,domU is: x86') filt2 = trovefilter.TroveFilter(recipe, flavor='xen,domU is: x86_64') filt3 = trovefilter.TroveFilter(recipe, flavor='xen,domU is: x86_64 x86') nvf1 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('is: x86')) nvf2 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86')) nvf3 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86_64')) nvf4 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86 x86_64')) self.assertEquals(filt1.match((nvf1, )), False) self.assertEquals(filt1.match((nvf2, )), True) self.assertEquals(filt2.match((nvf2, )), False) self.assertEquals(filt2.match((nvf3, )), True) self.assertEquals(filt2.match((nvf4, )), False) self.assertEquals(filt3.match((nvf4, )), True) self.assertEquals(filt3.match((nvf1, )), False) self.assertEquals(filt3.match((nvf2, )), False) self.assertEquals(filt3.match((nvf3, )), False)
def testTroveFilterFlavors3(self): recipe = self.getRecipe() filt1 = trovefilter.TroveFilter(recipe, flavor='xen,domU is: x86') filt2 = trovefilter.TroveFilter( recipe, flavor='xen,domU is: x86(sse, sse2, 486, 586, 686)') nvf1 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86')) nvf2 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86(sse, sse2, 486, 586, 686)')) self.assertEquals(filt1.match((nvf1, )), True) self.assertEquals(filt2.match((nvf2, )), True) # most important test. x86 filter matches x86(sse) self.assertEquals(filt1.match((nvf2, )), True) self.assertEquals(filt2.match((nvf1, )), False)
def testTroveFilterNot(self): recipe = self.getRecipe() filt = -trovefilter.TroveFilter(recipe, name='foo') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) nvf = ('bar', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) filt = ~trovefilter.TroveFilter(recipe, name='foo') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) nvf = ('bar', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True)
def testTroveFilterMacros(self): recipe = self.getRecipe() recipe.macros.name = 'foo' # test a macro in the name element filt = trovefilter.TroveFilter(recipe, '%(name)s', version='test.rpath.local@rpl:linux') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) # test a macro in the version element filt = trovefilter.TroveFilter( recipe, '%(name)s', version='%(name)s.rpath.local@rpl:linux') nvf = ('foo', versions.VersionFromString( \ '/foo.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True)
def testTroveFilterVersion(self): recipe = self.getRecipe() filt = trovefilter.TroveFilter(recipe, 'foo', version='test.rpath.local@rpl:linux') filt2 = trovefilter.TroveFilter(recipe, 'bar', version='test.rpath.local@rpl:linux') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) self.assertEquals(filt2.match((nvf, )), False) filt = trovefilter.TroveFilter(recipe, 'foo', version='/test.rpath.local@rpl:linux') self.assertEquals(filt.match((nvf, )), True) filt = trovefilter.TroveFilter( recipe, 'foo', version='/test.rpath.local@rpl:linux/1-1-1') self.assertEquals(filt.match((nvf, )), True) filt = trovefilter.TroveFilter(recipe, 'foo', version='test.rpath.local@rpl:linux') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:devel/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) filt = trovefilter.TroveFilter(recipe, 'foo', version='/test.rpath.local@rpl:linux') self.assertEquals(filt.match((nvf, )), False) filt = trovefilter.TroveFilter( recipe, 'foo', version='/test.rpath.local@rpl:linux/1-1-1') self.assertEquals(filt.match((nvf, )), False)
def testTroveFilterBlank(self): recipe = self.getRecipe() filt = trovefilter.TroveFilter(recipe) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) nvf = ('bar', versions.VersionFromString( \ '/test.rpath.local@rpl:devel/1.0-6-4'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True)
def testBadTroveFilters(self): recipe = self.getRecipe() filt = trovefilter.AbstractFilter() self.assertRaises(NotImplementedError, filt.match) try: filt = trovefilter.TroveFilter(recipe, 'foo(') except RuntimeError, e: self.assertEquals(str(e), "Bad Regexp: 'foo(' for name")
def testTroveFilterOr(self): recipe = self.getRecipe() filt1 = trovefilter.TroveFilter(recipe, name='foo') filt2 = trovefilter.TroveFilter(recipe, name='group-foo') filt3 = filt1 - filt2 filt4 = filt1 + -filt2 filt5 = filt2 - filt1 filt6 = filt2 | filt1 nvf1 = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) nvf2 = ('group-foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt3.match((nvf1, nvf2)), True) self.assertEquals(filt3.match((nvf2, )), False) self.assertEquals(filt4.match((nvf1, nvf2)), True) self.assertEquals(filt5.match((nvf1, nvf2)), True) self.assertEquals(filt5.match((nvf1, )), False) self.assertEquals(filt6.match((nvf1, nvf2)), True)
def testTroveFilterBasics(self): recipe = self.getRecipe() filt = trovefilter.TroveFilter(recipe, 'foo', version='test.rpath.local@rpl:devel') nvf = cmdline.parseTroveSpec('foo=test.rpath.local@rpl:devel') self.assertEquals(filt.match((nvf, )), True) nvf = cmdline.parseTroveSpec('foo=foo.rpath.local@rpl:devel') self.assertEquals(filt.match((nvf, )), False) filt = trovefilter.TroveFilter(recipe, 'foo', version='/test.rpath.local@rpl:devel') nvf = cmdline.parseTroveSpec('foo=/test.rpath.local@rpl:devel') self.assertEquals(filt.match((nvf, )), True) nvf = cmdline.parseTroveSpec('foo=/foo.rpath.local@rpl:devel') self.assertEquals(filt.match((nvf, )), False) filt = trovefilter.TroveFilter( recipe, 'foo', version='/test.rpath.local@rpl:devel/1-1-1') nvf = cmdline.parseTroveSpec('foo=/test.rpath.local@rpl:devel/1-1-1') self.assertEquals(filt.match((nvf, )), True) nvf = cmdline.parseTroveSpec('foo=/foo.rpath.local@rpl:devel/1-1-1') self.assertEquals(filt.match((nvf, )), False)
def testTroveFilterFlavors(self): recipe = self.getRecipe() filt = trovefilter.TroveFilter(recipe, flavor='xen,domU') filt2 = trovefilter.TroveFilter(recipe, name='bar', flavor='xen,domU') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) self.assertEquals(filt2.match((nvf, )), False) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86')) self.assertEquals(filt.match((nvf, )), True) self.assertEquals(filt2.match((nvf, )), False) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('xen,domU is: x86_64')) self.assertEquals(filt.match((nvf, )), True) self.assertEquals(filt2.match((nvf, )), False) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), 'xen,domU is: x86_64') self.assertEquals(filt.match((nvf, )), True) self.assertEquals(filt2.match((nvf, )), False)
def testTroveFilterRevision(self): recipe = self.getRecipe() filt = trovefilter.TroveFilter(recipe, version='1.1-1-1') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-2'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) filt = trovefilter.TroveFilter(recipe, version='1.1-1') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-1-2'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-2'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.2-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) filt = trovefilter.TroveFilter(recipe, version='1.1') nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-1-2'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.1-2-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) nvf = ('foo', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1.2-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False) filt = trovefilter.TroveFilter(recipe, version='') self.assertEquals(filt.match((nvf, )), True)
def testTroveWalk(self): recipe = self.getRecipe() fooData = self.getTrove('foo:data') fooDebuginfo = self.getTrove('foo:debuginfo', byDefault=False) foo = self.getTrove('foo', troveList=[fooData, fooDebuginfo]) cache = FakeCache({ fooData.getNameVersionFlavor(): fooData, fooDebuginfo.getNameVersionFlavor(): fooDebuginfo, foo.getNameVersionFlavor(): foo }) dummyGroup = self.getTrove('group-test', troveList=[foo], cache=cache) dummyGroup.imageGroup = False recipe.groups = {dummyGroup.getName(): dummyGroup} recipe.troveMap = {dummyGroup.getNameVersionFlavor(): dummyGroup} class RecordPolicy(policy.GroupEnforcementPolicy): def __init__(x, *args, **kwargs): x.troveSets = [] policy.GroupEnforcementPolicy.__init__(x, *args, **kwargs) def doTroveSet(x, troveSet): x.troveSets.append(troveSet) pol = RecordPolicy(recipe) pol.inclusionFilters = [trovefilter.TroveFilter(recipe, name='.*')] pol.exceptionFilters = [] pol.checkImageGroups = True pol.do() self.assertEquals(pol.troveSets, []) pol.checkImageGroups = False pol.do() fooPath = ([ dummyGroup.getNameVersionFlavor(), foo.getNameVersionFlavor() ], True, True) fooDataPath = ([ dummyGroup.getNameVersionFlavor(), foo.getNameVersionFlavor(), fooData.getNameVersionFlavor() ], True, False) fooDebuginfoPath = ([ dummyGroup.getNameVersionFlavor(), foo.getNameVersionFlavor(), fooDebuginfo.getNameVersionFlavor() ], False, False) troveSets = [[fooPath, fooDataPath, fooDebuginfoPath]] self.assertEquals(pol.troveSets, troveSets) self.assertEquals([x[0] for x in troveSets[0]], [x for x in pol.walkTrove([], cache, dummyGroup)])
def compileFilters(self, expressionList, filterList, unusedList=None): seen = [] if unusedList is not None: newUnused = [] # fix up the unused list, updateArgs is unaware of specific # filter types for expression in list(unusedList)[:]: if isinstance(expression, str): unusedList.discard(expression) expression = trovefilter.TroveFilter(self.recipe, name=expression) newUnused.append(expression) unusedList.update(newUnused) for expression in expressionList: if isinstance(expression, str): expression = trovefilter.TroveFilter(self.recipe, name=expression) if expression in seen: # only put each expression on the list once continue expression.compile() seen.append(expression) filterList.append(expression)
def testTroveFilterRegexps(self): recipe = self.getRecipe() recipe.macros.name = 'foo' # test a regexp in the name element filt = trovefilter.TroveFilter(recipe, '%(name)s1+', version='test.rpath.local@rpl:linux') nvf = ('foo11', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), True) # test that name regexp is anchored nvf = ('foo113', versions.VersionFromString( \ '/test.rpath.local@rpl:linux/1-1-1'), deps.parseFlavor('')) self.assertEquals(filt.match((nvf, )), False)
def testTroveFilterEquality(self): recipe = self.getRecipe() filt1 = trovefilter.TroveFilter(recipe, name='foo') filt2 = trovefilter.TroveFilter(recipe, name='group-foo') self.assertNotEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo') filt2 = trovefilter.TroveFilter(recipe, name='foo') self.assertEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux') filt2 = trovefilter.TroveFilter(recipe, name='foo') self.assertNotEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux') filt2 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux') self.assertEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux') filt2 = trovefilter.TroveFilter(recipe, name='foo', version='/c.r.c@rpl:linux') self.assertNotEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux', flavor='is: x86') filt2 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux') self.assertNotEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo', flavor='is: x86') filt2 = trovefilter.TroveFilter(recipe, name='foo', flavor='is: x86 x86_64') self.assertNotEquals(filt1, filt2) filt1 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux', flavor='is: x86') filt2 = trovefilter.TroveFilter(recipe, name='foo', version='c.r.c@rpl:linux', flavor='is: x86') self.assertEquals(filt1, filt2)
def testMultiTroveWalk(self): recipe = self.getRecipe() fooData = self.getTrove('foo:data') fooDebuginfo = self.getTrove('foo:debuginfo', byDefault=False) foo = self.getTrove('foo', troveList=[fooData, fooDebuginfo]) barData = self.getTrove('bar:data') barDebuginfo = self.getTrove('bar:debuginfo', byDefault=False) bar = self.getTrove('bar', troveList=[barData, barDebuginfo]) cache = FakeCache({ fooData.getNameVersionFlavor(): fooData, fooDebuginfo.getNameVersionFlavor(): fooDebuginfo, foo.getNameVersionFlavor(): foo }) subGroupFoo = self.getTrove('group-foo', troveList=[foo], cache=cache) subGroupFoo.imageGroup = True cache = FakeCache({ barData.getNameVersionFlavor(): barData, barDebuginfo.getNameVersionFlavor(): barDebuginfo, bar.getNameVersionFlavor(): bar }) subGroupBar = self.getTrove('group-bar', troveList=[bar], cache=cache) subGroupBar.imageGroup = True cache = FakeCache({ fooData.getNameVersionFlavor(): fooData, fooDebuginfo.getNameVersionFlavor(): fooDebuginfo, foo.getNameVersionFlavor(): foo, barData.getNameVersionFlavor(): barData, barDebuginfo.getNameVersionFlavor(): barDebuginfo, bar.getNameVersionFlavor(): bar }) dummyGroup = self.getTrove('group-test', troveList=[subGroupFoo, subGroupBar], cache=cache) dummyGroup.imageGroup = False recipe.groups = FakeCache({ dummyGroup.getName(): dummyGroup, subGroupFoo.getName(): subGroupFoo, subGroupBar.getName(): subGroupBar }) recipe.troveMap = { dummyGroup.getNameVersionFlavor(): dummyGroup, subGroupFoo.getNameVersionFlavor(): subGroupFoo, subGroupBar.getNameVersionFlavor(): subGroupBar, } class RecordPolicy(policy.GroupEnforcementPolicy): def __init__(x, *args, **kwargs): x.troveSets = [] policy.GroupEnforcementPolicy.__init__(x, *args, **kwargs) def doTroveSet(x, troveSet): x.troveSets.append(troveSet) pol = RecordPolicy(recipe) pol.inclusionFilters = [trovefilter.TroveFilter(recipe, name='.*')] pol.exceptionFilters = [] pol.checkImageGroups = True pol.do() fooPath = ([ subGroupFoo.getNameVersionFlavor(), foo.getNameVersionFlavor() ], True, True) fooDataPath = ([ subGroupFoo.getNameVersionFlavor(), foo.getNameVersionFlavor(), fooData.getNameVersionFlavor() ], True, False) fooDebuginfoPath = ([ subGroupFoo.getNameVersionFlavor(), foo.getNameVersionFlavor(), fooDebuginfo.getNameVersionFlavor() ], False, False) barPath = ([ subGroupBar.getNameVersionFlavor(), bar.getNameVersionFlavor() ], True, True) barDataPath = ([ subGroupBar.getNameVersionFlavor(), bar.getNameVersionFlavor(), barData.getNameVersionFlavor() ], True, False) barDebuginfoPath = ([ subGroupBar.getNameVersionFlavor(), bar.getNameVersionFlavor(), barDebuginfo.getNameVersionFlavor() ], False, False) troveSets = sorted([[fooPath, fooDataPath, fooDebuginfoPath], [barPath, barDataPath, barDebuginfoPath]]) self.assertEquals(sorted(pol.troveSets), troveSets)
@testhelp.context('trove-filter') def testBadTroveFilters(self): recipe = self.getRecipe() filt = trovefilter.AbstractFilter() self.assertRaises(NotImplementedError, filt.match) try: filt = trovefilter.TroveFilter(recipe, 'foo(') except RuntimeError, e: self.assertEquals(str(e), "Bad Regexp: 'foo(' for name") else: self.fail("Expected RuntimeError") nvf = cmdline.parseTroveSpec('foo=/test.rpath.local@rpl:devel') filt = trovefilter.TroveFilter(recipe, 'foo') self.assertEquals(filt.match((nvf, )), True) filt.compile() filt.versionType = True filt.version = 'foo' self.assertEquals(filt.match((nvf, )), False) @testhelp.context('trove-filter') def testTroveFilterVersion(self): recipe = self.getRecipe() filt = trovefilter.TroveFilter(recipe, 'foo', version='test.rpath.local@rpl:linux') filt2 = trovefilter.TroveFilter(recipe, 'bar', version='test.rpath.local@rpl:linux')