This is an automated email from the ASF dual-hosted git repository. tvb pushed a commit to branch tristan/junction-source-mirrors in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 520b99831c974737a4fa48f7f9c8dcaa7391aea8 Author: Tristan van Berkom <[email protected]> AuthorDate: Sat Jul 6 19:02:09 2024 +0900 Test pip and junction origins for SourceMirror plugins. This patch: * Extends the tests/frontend/mirror.py::test_source_mirror_plugin test to be parameterized and run the same test for each load origin. This was just easier to do than extending tests/plugins/loading.py * Adds the same sample mirror plugin from tests/frontend local project directory to the sample_plugins project so we can use that to test the other origins. --- tests/frontend/mirror.py | 33 ++++++++++++++++++-- tests/plugins/sample-plugins/project.conf | 5 +++ tests/plugins/sample-plugins/setup.py | 3 ++ .../src/sample_plugins/sourcemirrors/__init__.py | 0 .../src/sample_plugins/sourcemirrors/mirror.py | 36 ++++++++++++++++++++++ 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/tests/frontend/mirror.py b/tests/frontend/mirror.py index 7701b6616..698522304 100644 --- a/tests/frontend/mirror.py +++ b/tests/frontend/mirror.py @@ -817,7 +817,8 @@ def test_mirror_expand_project_and_toplevel_root(cli, tmpdir): # @pytest.mark.datafiles(DATA_DIR) @pytest.mark.usefixtures("datafiles") -def test_source_mirror_plugin(cli, tmpdir): [email protected]("origin", [("local"), ("junction"), ("pip")]) +def test_source_mirror_plugin(cli, tmpdir, origin): output_file = os.path.join(str(tmpdir), "output.txt") project_dir = str(tmpdir) element_dir = os.path.join(project_dir, "elements") @@ -827,6 +828,34 @@ def test_source_mirror_plugin(cli, tmpdir): element = generate_element(output_file) _yaml.roundtrip_dump(element, element_path) + def source_mirror_plugin_origin(): + if origin == "local": + return {"origin": "local", "path": "sourcemirrors", "source-mirrors": ["mirror"]} + elif origin == "pip": + return { + "origin": "pip", + "package-name": "sample-plugins>=1.2", + "source-mirrors": ["mirror"], + } + elif origin == "junction": + # For junction loading, just copy in the sample-plugins into a subdir and + # create a local junction + sample_plugins_dir = os.path.join(TOP_DIR, "..", "plugins", "sample-plugins") + sample_plugins_copy_dir = os.path.join(project_dir, "sample-plugins-copy") + junction_file = os.path.join(element_dir, "sample-plugins.bst") + + shutil.copytree(sample_plugins_dir, sample_plugins_copy_dir) + + _yaml.roundtrip_dump( + {"kind": "junction", "sources": [{"kind": "local", "path": "sample-plugins-copy"}]}, junction_file + ) + + return { + "origin": "junction", + "junction": "sample-plugins.bst", + "source-mirrors": ["mirror"], + } + project_file = os.path.join(project_dir, "project.conf") project = { "name": "test", @@ -870,7 +899,7 @@ def test_source_mirror_plugin(cli, tmpdir): ], "plugins": [ {"origin": "local", "path": "sources", "sources": ["fetch_source"]}, - {"origin": "local", "path": "sourcemirrors", "source-mirrors": ["mirror"]}, + source_mirror_plugin_origin(), ], } diff --git a/tests/plugins/sample-plugins/project.conf b/tests/plugins/sample-plugins/project.conf index 60fd37224..d111eae6d 100644 --- a/tests/plugins/sample-plugins/project.conf +++ b/tests/plugins/sample-plugins/project.conf @@ -13,3 +13,8 @@ plugins: sources: - git - sample + +- origin: local + path: src/sample_plugins/sourcemirrors + source-mirrors: + - mirror diff --git a/tests/plugins/sample-plugins/setup.py b/tests/plugins/sample-plugins/setup.py index 14fe1cf5b..04c8361cc 100755 --- a/tests/plugins/sample-plugins/setup.py +++ b/tests/plugins/sample-plugins/setup.py @@ -33,6 +33,9 @@ setup( "sample = sample_plugins.sources.sample", "git = sample_plugins.sources.git", ], + "buildstream.plugins.sourcemirrors": [ + "mirror = sample_plugins.sourcemirrors.mirror", + ], }, zip_safe=False, ) diff --git a/tests/plugins/sample-plugins/src/sample_plugins/sourcemirrors/__init__.py b/tests/plugins/sample-plugins/src/sample_plugins/sourcemirrors/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/plugins/sample-plugins/src/sample_plugins/sourcemirrors/mirror.py b/tests/plugins/sample-plugins/src/sample_plugins/sourcemirrors/mirror.py new file mode 100644 index 000000000..fc737031a --- /dev/null +++ b/tests/plugins/sample-plugins/src/sample_plugins/sourcemirrors/mirror.py @@ -0,0 +1,36 @@ +from typing import Optional, Dict, Any + +from buildstream import SourceMirror, MappingNode + + +# This mirror plugin basically implements the default behavior +# by loading the alias definitions as custom "config" configuration +# instead, and implementing the translate_url method. +# +class Sample(SourceMirror): + def configure(self, node): + node.validate_keys(["aliases"]) + + self.aliases = {} + + aliases = node.get_mapping("aliases") + for alias_name, url_list in aliases.items(): + self.aliases[alias_name] = url_list.as_str_list() + + self.set_supported_aliases(self.aliases.keys()) + + def translate_url( + self, + *, + alias: str, + alias_url: str, + source_url: str, + extra_data: Optional[Dict[str, Any]], + ) -> str: + return self.aliases[alias][0] + source_url + + +# Plugin entry point +def setup(): + + return Sample
