def test_dependency(self): """ test all possible ways of specifying dependencies """ self.contents = '\n'.join([ 'name = "pi"', 'version = "3.14"', 'homepage = "http://google.com"', 'description = "test easyconfig"', 'toolchain = {"name":"GCC", "version": "4.6.3"}', 'dependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', 'builddependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', ]) self.prep() eb = EasyConfig(self.eb_file, valid_stops=self.all_stops) # should include builddependencies self.assertEqual(len(eb.dependencies()), 4) self.assertEqual(len(eb.builddependencies()), 2) first = eb.dependencies()[0] second = eb.dependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(first['tc'], '1.1-GCC-4.6.3') self.assertEqual(second['tc'], '2.2-GCC-4.6.3') # same tests for builddependencies first = eb.builddependencies()[0] second = eb.builddependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(first['tc'], '1.1-GCC-4.6.3') self.assertEqual(second['tc'], '2.2-GCC-4.6.3') eb['dependencies'] = ["wrong type"] self.assertErrorRegex(EasyBuildError, "wrong type from unsupported type", eb.dependencies) eb['dependencies'] = [()] self.assertErrorRegex(EasyBuildError, "without name", eb.dependencies) eb['dependencies'] = [{'name': "test"}] self.assertErrorRegex(EasyBuildError, "without version", eb.dependencies)
def test_dependency(self): """ test all possible ways of specifying dependencies """ self.contents = '\n'.join([ 'easyblock = "ConfigureMake"', 'name = "pi"', 'version = "3.14"', 'homepage = "http://example.com"', 'description = "test easyconfig"', 'toolchain = {"name":"GCC", "version": "4.6.3"}', 'dependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', 'builddependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', ]) self.prep() eb = EasyConfig(self.eb_file) # should include builddependencies self.assertEqual(len(eb.dependencies()), 4) self.assertEqual(len(eb.builddependencies()), 2) first = eb.dependencies()[0] second = eb.dependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3') self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3') # same tests for builddependencies first = eb.builddependencies()[0] second = eb.builddependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3') self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3') self.assertErrorRegex(EasyBuildError, "Dependency foo of unsupported type", eb._parse_dependency, "foo") self.assertErrorRegex(EasyBuildError, "without name", eb._parse_dependency, ()) self.assertErrorRegex(EasyBuildError, "without version", eb._parse_dependency, {'name': 'test'}) err_msg = "Incorrect external dependency specification" self.assertErrorRegex(EasyBuildError, err_msg, eb._parse_dependency, (EXTERNAL_MODULE_MARKER,)) self.assertErrorRegex(EasyBuildError, err_msg, eb._parse_dependency, ('foo', '1.2.3', EXTERNAL_MODULE_MARKER))
def test_dependency(self): """ test all possible ways of specifying dependencies """ self.contents = '\n'.join([ 'easyblock = "ConfigureMake"', 'name = "pi"', 'version = "3.14"', 'homepage = "http://example.com"', 'description = "test easyconfig"', 'toolchain = {"name":"GCC", "version": "4.6.3"}', 'dependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', 'builddependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', ]) self.prep() eb = EasyConfig(self.eb_file) # should include builddependencies self.assertEqual(len(eb.dependencies()), 4) self.assertEqual(len(eb.builddependencies()), 2) first = eb.dependencies()[0] second = eb.dependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3') self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3') # same tests for builddependencies first = eb.builddependencies()[0] second = eb.builddependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3') self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3') self.assertErrorRegex(EasyBuildError, "Dependency foo of unsupported type", eb._parse_dependency, "foo") self.assertErrorRegex(EasyBuildError, "without name", eb._parse_dependency, ()) self.assertErrorRegex(EasyBuildError, "without version", eb._parse_dependency, {'name': 'test'})
def test_dependency(self): """ test all possible ways of specifying dependencies """ self.contents = '\n'.join([ 'name = "pi"', 'version = "3.14"', 'homepage = "http://example.com"', 'description = "test easyconfig"', 'toolchain = {"name":"GCC", "version": "4.6.3"}', 'dependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', 'builddependencies = [("first", "1.1"), {"name": "second", "version": "2.2"}]', ]) self.prep() eb = EasyConfig(self.eb_file, build_options={'valid_stops': self.all_stops}) # should include builddependencies self.assertEqual(len(eb.dependencies()), 4) self.assertEqual(len(eb.builddependencies()), 2) first = eb.dependencies()[0] second = eb.dependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3') self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3') # same tests for builddependencies first = eb.builddependencies()[0] second = eb.builddependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3') self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3') self.assertErrorRegex(EasyBuildError, "Dependency foo of unsupported type", eb._parse_dependency, "foo") self.assertErrorRegex(EasyBuildError, "without name", eb._parse_dependency, ()) self.assertErrorRegex(EasyBuildError, "without version", eb._parse_dependency, {'name': 'test'})
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, build_options=None, build_specs=None): """ Process easyconfig, returning some information for each block @param path: path to easyconfig file @param build_options: dictionary specifying build options (e.g. robot_path, check_osdeps, ...) @param build_specs: dictionary specifying build specifications (e.g. version, toolchain, ...) """ blocks = retrieve_blocks_in_spec(path, build_options.get("only_blocks", None)) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname _log.debug("Processing easyconfig %s" % spec) # create easyconfig try: ec = EasyConfig(spec, build_options=build_options, build_specs=build_specs) 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 = { "ec": ec, "spec": spec, "module": det_full_module_name(ec), "dependencies": [], "builddependencies": [], } if len(blocks) > 1: easyconfig["originalSpec"] = path # add build dependencies for dep in ec.builddependencies(): _log.debug("Adding build dependency %s for app %s." % (dep, name)) easyconfig["builddependencies"].append(dep) # add dependencies (including build dependencies) for dep in ec.dependencies(): _log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig["dependencies"].append(dep) # add toolchain as dependency too if ec.toolchain.name != DUMMY_TOOLCHAIN_NAME: dep = ec.toolchain.as_dict() _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["unresolved_deps"] = copy.deepcopy(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 = { 'ec': ec, 'spec': spec, 'module': det_full_module_name(ec), 'dependencies': [], 'builddependencies': [], } if len(blocks) > 1: easyconfig['originalSpec'] = path # add build dependencies for dep in ec.builddependencies(): _log.debug("Adding build dependency %s for app %s." % (dep, name)) easyconfig['builddependencies'].append(dep) # add dependencies (including build dependencies) for dep in ec.dependencies(): _log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) # add toolchain as dependency too if ec.toolchain.name != DUMMY_TOOLCHAIN_NAME: dep = ec.toolchain.as_dict() _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['unresolved_deps'] = copy.deepcopy(easyconfig['dependencies']) easyconfigs.append(easyconfig)
def runTest(self): """ test all possible ways of specifying dependencies """ eb = EasyConfig(self.eb_file, valid_stops=self.all_stops) # should include builddependencies self.assertEqual(len(eb.dependencies()), 4) self.assertEqual(len(eb.builddependencies()), 2) first = eb.dependencies()[0] second = eb.dependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(first['tc'], '1.1-GCC-4.6.3') self.assertEqual(second['tc'], '2.2-GCC-4.6.3') # same tests for builddependencies first = eb.builddependencies()[0] second = eb.builddependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(first['tc'], '1.1-GCC-4.6.3') self.assertEqual(second['tc'], '2.2-GCC-4.6.3') eb['dependencies'] = ["wrong type"] self.assertErrorRegex(EasyBuildError, "wrong type from unsupported type", eb.dependencies) eb['dependencies'] = [()] self.assertErrorRegex(EasyBuildError, "without name", eb.dependencies) eb['dependencies'] = [{'name': "test"}] self.assertErrorRegex(EasyBuildError, "without version", eb.dependencies)
def test_external_dependencies(self): """Test specifying external (build) dependencies.""" ectxt = read_file(os.path.join(os.path.dirname(__file__), 'easyconfigs', 'toy-0.0-deps.eb')) toy_ec = os.path.join(self.test_prefix, 'toy-0.0-external-deps.eb') # just specify some of the test modules we ship, doesn't matter where they come from ectxt += "\ndependencies += [('foobar/1.2.3', EXTERNAL_MODULE)]" ectxt += "\nbuilddependencies = [('somebuilddep/0.1', EXTERNAL_MODULE)]" write_file(toy_ec, ectxt) build_options = { 'valid_module_classes': module_classes(), 'external_modules_metadata': ConfigObj(), } init_config(build_options=build_options) ec = EasyConfig(toy_ec) builddeps = ec.builddependencies() self.assertEqual(len(builddeps), 1) self.assertEqual(builddeps[0]['short_mod_name'], 'somebuilddep/0.1') self.assertEqual(builddeps[0]['full_mod_name'], 'somebuilddep/0.1') self.assertEqual(builddeps[0]['external_module'], True) deps = ec.dependencies() self.assertEqual(len(deps), 4) correct_deps = ['ictce/4.1.13', 'GCC/4.7.2', 'foobar/1.2.3', 'somebuilddep/0.1'] self.assertEqual([d['short_mod_name'] for d in deps], correct_deps) self.assertEqual([d['full_mod_name'] for d in deps], correct_deps) self.assertEqual([d['external_module'] for d in deps], [False, True, True, True]) metadata = os.path.join(self.test_prefix, 'external_modules_metadata.cfg') metadatatxt = '\n'.join(['[foobar/1.2.3]', 'name = foo,bar', 'version = 1.2.3,3.2.1', 'prefix = /foo/bar']) write_file(metadata, metadatatxt) cfg = init_config(args=['--external-modules-metadata=%s' % metadata]) build_options = { 'external_modules_metadata': cfg.external_modules_metadata, 'valid_module_classes': module_classes(), } init_config(build_options=build_options) ec = EasyConfig(toy_ec) self.assertEqual(ec.dependencies()[2]['short_mod_name'], 'foobar/1.2.3') self.assertEqual(ec.dependencies()[2]['external_module'], True) metadata = { 'name': ['foo', 'bar'], 'version': ['1.2.3', '3.2.1'], 'prefix': '/foo/bar', } self.assertEqual(ec.dependencies()[2]['external_module_metadata'], metadata)