def testBuiltInOverride(self): # Make sure we can override builtin recipes without destroying the # original modules. packageRecipeModuleId = id(packagerecipe) os.chdir(self.workDir) self.newpkg('foo') os.chdir('foo') self.writeFile('foo.recipe', fooRecipe) # override PackageRecipe with a derivative self.writeFile('packagerecipe.recipe', packageRecipe) i = len(sys.modules) repos = self.openRepository() loader = loadrecipe.RecipeLoader(self.workDir + '/foo/foo.recipe', self.cfg, repos=repos) # we don't update sys.modules for loaded modules assert (len(sys.modules) == i) recipe = loader.getRecipe() fooModule = recipe.__moduleObj__ loadedPackageRecipe = fooModule.PackageRecipe # these should be different because we overloaded PackageRecipe, but # the PackageRecipe we see from the packagerecipe should be the # original assert (loadedPackageRecipe != packagerecipe.PackageRecipe) assert (id(packagerecipe) == packageRecipeModuleId)
def _loadRecipeClassFromCheckout(self, recipePath): directory = os.path.dirname(recipePath) repos, sourceState = self._getRepositoryStateFromDirectory(directory) cfg = self.getConaryConfig() self._initializeFlavors() loader = loadrecipe.RecipeLoader(recipePath, cfg=cfg, repos=repos, branch=sourceState.getBranch(), buildFlavor=cfg.buildFlavor) return loader.getRecipe()
def _loadRecipe(self, recipe=recipes.testGroup1, group_name='group-test'): '''Return a recipe class from the given recipe blob''' temp_dir = tempfile.mkdtemp(prefix='conary-test-') try: recipe_file = os.path.join(temp_dir, group_name + '.recipe') open(recipe_file, 'w').write(recipe) loader = loadrecipe.RecipeLoader(recipe_file, self.cfg) finally: shutil.rmtree(temp_dir) return loader.getRecipe()
def testLoadRecipeFails(self): brokenRecipe = """\ class TestRecipe1(PackageRecipe): name = 'testcase' version = '1.0' a = bb # unknown variable def setup(self): pass """ os.chdir(self.workDir) self.writeFile('testcase.recipe', brokenRecipe) try: loadrecipe.RecipeLoader(self.workDir + '/testcase.recipe', self.cfg) except Exception, err: assert ('''Error in recipe file "testcase.recipe": Traceback (most recent call last):''' in str(err)) assert (str(err).endswith('''\ a = bb # unknown variable NameError: name \'bb\' is not defined '''))
def testLoadRecipeInRecipeFails(self): brokenRecipe = """\ class TestRecipe1(PackageRecipe): loadSuperClass('foo') name = 'testcase' version = '1.0' def setup(self): pass """ os.chdir(self.workDir) self.writeFile('testcase.recipe', brokenRecipe) repos = self.openRepository() self.checkException( loadrecipe.RecipeLoader, self.workDir + '/testcase.recipe', self.cfg, repos=None, error=( 'unable to load recipe file %s/testcase.recipe:\n' 'Error in recipe file "testcase.recipe", line 1:\n' ' cannot find source component foo:source: No repository access' % self.workDir)) self.checkException( loadrecipe.RecipeLoader, self.workDir + '/testcase.recipe', self.cfg, repos=repos, error= ('unable to load recipe file %s/testcase.recipe:\n' 'Error in recipe file "testcase.recipe", line 1:\n' ' cannot find source component foo:source: foo:source was not found on path localhost@rpl:linux' % self.workDir)) fooRecipe = """\ class Foo(PackageRecipe): name = 'foo' version = '1.0' a = b # nameerror def setup(self): pass """ self.writeFile('foo.recipe', fooRecipe) try: loadrecipe.RecipeLoader(self.workDir + '/testcase.recipe', self.cfg, repos=None) except Exception, err: if sys.version_info >= (2, 5): topModule = "<module>" else: topModule = "?" self.assertEqual( str(err), '''\ unable to load recipe file %s/testcase.recipe: Error in recipe file "testcase.recipe", line 1: unable to load recipe file %s/foo.recipe: Error in recipe file "foo.recipe": Traceback (most recent call last): File "%s/foo.recipe", line 1, in %s class Foo(PackageRecipe): File "%s/foo.recipe", line 4, in Foo a = b # nameerror NameError: name 'b' is not defined ''' % (self.workDir, self.workDir, self.workDir, topModule, self.workDir))