def test_bad_version_spec(tmpdir): tmpdir.mkdir('meta').join('runtime.yml').write(BAD_VERSION_SPEC) with pytest.raises( exc.RuntimeFileError, match="not a valid semantic_version requirement specification"): loader = loaders.RuntimeFileLoader(collection_path=tmpdir) loader.get_requires_ansible()
def test_runtime_no_meta_runtime(tmpdir): loader = loaders.RuntimeFileLoader(collection_path=tmpdir) with pytest.raises( exc.RuntimeFileError, match=r"'requires_ansible' in meta/runtime.yml is mandatory", ): loader.get_requires_ansible()
def load(self): self._load_collection_manifest() self._rename_extract_path() self._check_filename_matches_manifest() self._check_metadata_filepaths() self.doc_strings = {} if self.cfg.run_ansible_doc: self.doc_strings = loaders.DocStringLoader( path=self.path, fq_collection_name='{}.{}'.format(self.metadata.namespace, self.metadata.name), logger=self.log, cfg=self.cfg, ).load() self.content_objs = list(self._load_contents()) self.contents = self._build_contents_blob() self.docs_blob = self._build_docs_blob() self.requires_ansible = loaders.RuntimeFileLoader( self.path).get_requires_ansible() return schema.ImportResult( metadata=self.metadata, docs_blob=self.docs_blob, contents=self.contents, requires_ansible=self.requires_ansible, )
def test_too_long_requires_ansible(tmpdir): tmpdir.mkdir('meta').join('runtime.yml').write(TOO_LONG_REQUIRES_ANSIBLE) with pytest.raises( exc.RuntimeFileError, match="'requires_ansible' must not be greater than 255 characters" ): loader = loaders.RuntimeFileLoader(collection_path=tmpdir) loader.get_requires_ansible()
def test_no_requires_ansible(tmpdir): tmpdir.mkdir("meta").join("runtime.yml").write(RUNTIME_PLUGIN_ROUTING) loader = loaders.RuntimeFileLoader(collection_path=tmpdir) with pytest.raises( exc.RuntimeFileError, match=r"'requires_ansible' in meta/runtime.yml is mandatory", ): loader.get_requires_ansible()
def load(self): # NOTE: If we knew the chksum for MANIFEST.json, we could check it here first self.manifest = self._load_manifest() self.metadata = self.manifest.collection_info # The default name for 'file_manifest_file' is FILES.json self.file_manifest_file = self.manifest.file_manifest_file # load data from FILES.json self.file_manifest = self._load_file_manifest( path_prefix=self.path, file_manifest_file=self.file_manifest_file) # check chksum for each file in FILES.json # Note: Will raise exceptions on file_manifest / FILES.json errors self._check_file_manifest(self.path, self.file_manifest, self.file_manifest_file.name) self._rename_extract_path() self._check_filename_matches_manifest() self._check_metadata_filepaths() self.doc_strings = {} if self.cfg.run_ansible_doc: self.doc_strings = loaders.DocStringLoader( path=self.path, fq_collection_name="{}.{}".format(self.metadata.namespace, self.metadata.name), logger=self.log, cfg=self.cfg, ).load() self.content_objs = list(self._load_contents()) self.contents = self._build_contents_blob() self.docs_blob = self._build_docs_blob() self.requires_ansible = loaders.RuntimeFileLoader( self.path).get_requires_ansible() self._check_ansible_test_ignore_files() self._check_ee_yml_dep_files() return schema.ImportResult( metadata=self.metadata, docs_blob=self.docs_blob, contents=self.contents, requires_ansible=self.requires_ansible, )
def test_get_requires_ansible(tmpdir): tmpdir.mkdir('meta').join('runtime.yml').write(RUNTIME_FULL_YAML) loader = loaders.RuntimeFileLoader(collection_path=tmpdir) requires_ansible = loader.get_requires_ansible() assert requires_ansible == '>=2.9.10,<2.11.5'
def test_no_requires_ansible(tmpdir): tmpdir.mkdir('meta').join('runtime.yml').write(RUNTIME_PLUGIN_ROUTING) loader = loaders.RuntimeFileLoader(collection_path=tmpdir) requires_ansible = loader.get_requires_ansible() assert requires_ansible is None
def test_runtime_file_bad_yaml(tmpdir): tmpdir.mkdir('meta').join('runtime.yml').write(BAD_YAML) with pytest.raises(exc.RuntimeFileError, match='Error during parsing of runtime.yml'): loaders.RuntimeFileLoader(collection_path=tmpdir)
def test_no_runtime_file(tmpdir): loader = loaders.RuntimeFileLoader(collection_path=tmpdir) assert loader.data is None