def test_wrong_name(self): mod_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data", "modules", "mod3") module.Module(project=mock.Mock(), path=mod_dir) self.handler.flush() assert "The name in the module file (mod1) does not match the directory name (mod3)" in self.stream.getvalue( ).strip()
async def test_invalid_yaml_syntax_in_module_yml(inmanta_module): inmanta_module.write_module_yml_file( """ test: - first second """ ) with pytest.raises(InvalidMetadata, match=f"Invalid yaml syntax in {inmanta_module.get_path_module_yml_file()}"): module.Module(None, inmanta_module.get_root_dir_of_module())
async def test_module_requires_single(inmanta_module): inmanta_module.write_module_yml_file( """ name: mod license: ASL version: 1.0.0 requires: std > 1.0.0 """ ) mod: module.Module = module.Module(None, inmanta_module.get_root_dir_of_module()) assert mod.requires() == [Requirement.parse("std > 1.0.0")]
async def test_module_version_non_pep440_complient(inmanta_module): inmanta_module.write_module_yml_file( """ name: mod license: ASL version: non_pep440_value compiler_version: 2017.2 """ ) with pytest.raises(InvalidMetadata, match="Version non_pep440_value is not PEP440 compliant"): module.Module(None, inmanta_module.get_root_dir_of_module())
async def test_module_requires_legacy_invalid(inmanta_module): inmanta_module.write_module_yml_file( """ name: mod license: ASL version: 1.0.0 requires: std: ip """ ) with pytest.raises(InvalidMetadata, match="Invalid legacy requires"): module.Module(None, inmanta_module.get_root_dir_of_module())
async def test_module_requires_legacy(inmanta_module): inmanta_module.write_module_yml_file( """ name: mod license: ASL version: 1.0.0 requires: std: std ip: ip > 1.0.0 """ ) mod: module.Module with warnings.catch_warnings(record=True) as w: mod = module.Module(None, inmanta_module.get_root_dir_of_module()) assert len(w) == 1 warning = w[0] assert issubclass(warning.category, MetadataDeprecationWarning) assert "yaml dictionary syntax for specifying module requirements has been deprecated" in str(warning.message) assert mod.requires() == [Requirement.parse("std"), Requirement.parse("ip > 1.0.0")]
def test_rewrite(tmpdir): module_path = tmpdir.join("mod").mkdir() model = module_path.join("model").mkdir() model.join("_init.cf").write("\n") module_yml = module_path.join("module.yml") module_yml.write(""" name: mod license: ASL version: 1.2 compiler_version: 2017.2 """) mod = module.Module(None, module_path.strpath) assert mod.version == "1.2" assert mod.compiler_version == "2017.2" mod.rewrite_version("1.3.1") assert mod.version == "1.3.1" assert mod.compiler_version == "2017.2"
async def test_version_argument(modules_repo): make_module_simple(modules_repo, "mod-version", [], "1.2") module_path = os.path.join(modules_repo, "mod-version") mod = module.Module(None, module_path) assert mod.version == "1.2" args = [sys.executable, "-m", "inmanta.app", "module", "commit", "-m", "msg", "-v", "1.3.1", "-r"] process = await asyncio.subprocess.create_subprocess_exec( *args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=module_path ) try: await asyncio.wait_for(process.communicate(), timeout=30) except asyncio.TimeoutError as e: process.kill() await process.communicate() raise e # Make sure exitcode is zero assert process.returncode == 0 # Verify changes assert mod._get_metadata_from_disk().version == "1.3.1"
def test_bad_module(): bad_mod_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data", "modules", "mod2") with pytest.raises(module.InvalidModuleException): module.Module(project=mock.Mock(), path=bad_mod_dir)
def test_module(): good_mod_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data", "modules", "mod1") module.Module(project=mock.Mock(), path=good_mod_dir)