def test_validation(self): """ test other validations beside mandatory variables """ self.contents = '\n'.join([ 'name = "pi"', 'version = "3.14"', 'homepage = "http://google.com"', 'description = "test easyconfig"', 'toolchain = {"name":"dummy", "version": "dummy"}', 'stop = "notvalid"', ]) self.prep() eb = EasyConfig(self.eb_file, validate=False, valid_stops=self.all_stops) self.assertErrorRegex(EasyBuildError, r"\w* provided '\w*' is not valid", eb.validate) eb['stop'] = 'patch' # this should now not crash eb.validate() eb['osdependencies'] = ['non-existent-dep'] self.assertErrorRegex(EasyBuildError, "OS dependencies were not found", eb.validate) # dummy toolchain, installversion == version self.assertEqual(eb.get_installversion(), "3.14") os.chmod(self.eb_file, 0000) self.assertErrorRegex(EasyBuildError, "Unexpected IOError", EasyConfig, self.eb_file) os.chmod(self.eb_file, 0755) self.contents += "\nsyntax_error'" self.prep() self.assertErrorRegex(EasyBuildError, "SyntaxError", EasyConfig, self.eb_file)
def process_easyconfig(path, onlyBlocks=None, regtest_online=False, validate=True): """ Process easyconfig, returning some information for each block """ blocks = retrieve_blocks_in_spec(path, onlyBlocks) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname # - use mod? __init__ and importCfg are ignored. _log.debug("Processing easyconfig %s" % spec) # create easyconfig try: all_stops = [x[0] for x in EasyBlock.get_steps()] ec = EasyConfig(spec, validate=validate, valid_module_classes=module_classes(), valid_stops=all_stops) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) _log.exception(msg) name = ec["name"] # this app will appear as following module in the list easyconfig = { "spec": spec, "module": (ec.name, ec.get_installversion()), "dependencies": [], "builddependencies": [], } if len(blocks) > 1: easyconfig["originalSpec"] = path # add build dependencies for dep in ec.builddependencies(): deptup = (dep["name"], dep["tc"]) _log.debug("Adding build dependency %s for app %s." % (deptup, name)) easyconfig["builddependencies"].append(deptup) # add dependencies (including build dependencies) for dep in ec.dependencies(): deptup = (dep["name"], dep["tc"]) _log.debug("Adding dependency %s for app %s." % (deptup, name)) easyconfig["dependencies"].append(deptup) # add toolchain as dependency too if ec.toolchain.name != "dummy": dep = (ec.toolchain.name, ec.toolchain.version) _log.debug("Adding toolchain %s as dependency for app %s." % (dep, name)) easyconfig["dependencies"].append(dep) del ec # this is used by the parallel builder easyconfig["unresolvedDependencies"] = copy.copy(easyconfig["dependencies"]) easyconfigs.append(easyconfig)
def process_easyconfig(path, onlyBlocks=None, regtest_online=False, validate=True): """ Process easyconfig, returning some information for each block """ blocks = retrieve_blocks_in_spec(path, onlyBlocks) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname # - use mod? __init__ and importCfg are ignored. _log.debug("Processing easyconfig %s" % spec) # create easyconfig try: all_stops = [x[0] for x in EasyBlock.get_steps()] ec = EasyConfig(spec, validate=validate, valid_module_classes=module_classes(), valid_stops=all_stops) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) _log.exception(msg) name = ec['name'] # this app will appear as following module in the list easyconfig = { 'spec': spec, 'module': (ec.name, ec.get_installversion()), 'dependencies': [], 'builddependencies': [], } if len(blocks) > 1: easyconfig['originalSpec'] = path # add build dependencies for dep in ec.builddependencies(): deptup = (dep['name'], dep['tc']) _log.debug("Adding build dependency %s for app %s." % (deptup, name)) easyconfig['builddependencies'].append(deptup) # add dependencies (including build dependencies) for dep in ec.dependencies(): deptup = (dep['name'], dep['tc']) _log.debug("Adding dependency %s for app %s." % (deptup, name)) easyconfig['dependencies'].append(deptup) # add toolchain as dependency too if ec.toolchain.name != 'dummy': dep = (ec.toolchain.name, ec.toolchain.version) _log.debug("Adding toolchain %s as dependency for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) del ec # this is used by the parallel builder easyconfig['unresolvedDependencies'] = copy.copy(easyconfig['dependencies']) easyconfigs.append(easyconfig)
def process_easyconfig(path, onlyBlocks=None, regtest_online=False, validate=True): """ Process easyconfig, returning some information for each block """ blocks = retrieve_blocks_in_spec(path, onlyBlocks) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname # - use mod? __init__ and importCfg are ignored. log.debug("Processing easyconfig %s" % spec) # create easyconfig try: all_stops = [x[0] for x in EasyBlock.get_steps()] ec = EasyConfig(spec, validate=validate, valid_module_classes=module_classes(), valid_stops=all_stops) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) log.exception(msg) name = ec['name'] # this app will appear as following module in the list easyconfig = { 'spec': spec, 'module': (ec.name, ec.get_installversion()), 'dependencies': [] } if len(blocks) > 1: easyconfig['originalSpec'] = path for d in ec.dependencies(): dep = (d['name'], d['tc']) log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) if ec.toolchain.name != 'dummy': dep = (ec.toolchain.name, ec.toolchain.version) log.debug("Adding toolchain %s as dependency for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) del ec # this is used by the parallel builder easyconfig['unresolvedDependencies'] = copy.copy(easyconfig['dependencies']) easyconfigs.append(easyconfig)
def runTest(self): """ test other validations beside mandatory variables """ eb = EasyConfig(self.eb_file, validate=False, valid_stops=self.all_stops) self.assertErrorRegex(EasyBuildError, r"\w* provided '\w*' is not valid", eb.validate) eb['stop'] = 'patch' # this should now not crash eb.validate() eb['osdependencies'] = ['non-existent-dep'] self.assertErrorRegex(EasyBuildError, "OS dependencies were not found", eb.validate) # dummy toolchain, installversion == version self.assertEqual(eb.get_installversion(), "3.14") os.chmod(self.eb_file, 0000) self.assertErrorRegex(EasyBuildError, "Unexpected IOError", EasyConfig, self.eb_file) os.chmod(self.eb_file, 0755) self.contents += "\nsyntax_error'" self.setUp() self.assertErrorRegex(EasyBuildError, "SyntaxError", EasyConfig, self.eb_file)