You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/02/21 07:21:46 UTC

[buildstream] branch tristan/test-plugin-shadowing created (now dd986d9)

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a change to branch tristan/test-plugin-shadowing
in repository https://gitbox.apache.org/repos/asf/buildstream.git.


      at dd986d9  tests: Test that user specified plugins shadow core plugins

This branch includes the following new commits:

     new dd986d9  tests: Test that user specified plugins shadow core plugins

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[buildstream] 01/01: tests: Test that user specified plugins shadow core plugins

Posted by tv...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch tristan/test-plugin-shadowing
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit dd986d9456e2b837d4ce2f6815a01a0bf18d1c51
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Mon Feb 21 16:17:57 2022 +0900

    tests: Test that user specified plugins shadow core plugins
    
    Fixes #1555
---
 tests/plugins/shadow.py                  | 47 ++++++++++++++++++++++++++++++++
 tests/plugins/shadow/elements/manual.bst |  1 +
 tests/plugins/shadow/plugins/manual.py   | 19 +++++++++++++
 tests/plugins/shadow/project.conf        |  8 ++++++
 4 files changed, 75 insertions(+)

diff --git a/tests/plugins/shadow.py b/tests/plugins/shadow.py
new file mode 100644
index 0000000..e69373a
--- /dev/null
+++ b/tests/plugins/shadow.py
@@ -0,0 +1,47 @@
+# Pylint doesn't play well with fixtures and dependency injection from pytest
+# pylint: disable=redefined-outer-name
+
+#
+# This test case ensures that user provided plugins appropriately shadow
+# core defined plugins, which is a behavior that is required in order to
+# make it safe for BuildStream to add more plugins in the future without
+# stomping on plugin namespace.
+#
+
+import os
+import pytest
+
+from buildstream.testing import cli  # pylint: disable=unused-import
+from buildstream import _yaml
+
+
+DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "shadow")
+
+
+def update_project(project_path, updated_configuration):
+    project_conf_path = os.path.join(project_path, "project.conf")
+    project_conf = _yaml.roundtrip_load(project_conf_path)
+
+    project_conf.update(updated_configuration)
+
+    _yaml.roundtrip_dump(project_conf, project_conf_path)
+
+
+#
+# Run the test with and without shadowing the "manual" plugin.
+#
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("shadow", [True, False], ids=["shadowed", "not-shadowed"])
+def test_manual(cli, datafiles, shadow):
+    project = str(datafiles)
+
+    if shadow:
+        update_project(project, {"plugins": [{"origin": "local", "path": "plugins", "elements": ["manual"]}]})
+
+    result = cli.run(project=project, args=["show", "manual.bst"])
+    result.assert_success()
+
+    if shadow:
+        assert "This is an overridden manual element" in result.stderr
+    else:
+        assert "This is an overridden manual element" not in result.stderr
diff --git a/tests/plugins/shadow/elements/manual.bst b/tests/plugins/shadow/elements/manual.bst
new file mode 100644
index 0000000..4d7f702
--- /dev/null
+++ b/tests/plugins/shadow/elements/manual.bst
@@ -0,0 +1 @@
+kind: manual
diff --git a/tests/plugins/shadow/plugins/manual.py b/tests/plugins/shadow/plugins/manual.py
new file mode 100644
index 0000000..eafff19
--- /dev/null
+++ b/tests/plugins/shadow/plugins/manual.py
@@ -0,0 +1,19 @@
+from buildstream import Element
+
+
+class Manual(Element):
+    BST_MIN_VERSION = "2.0"
+
+    def configure(self, node):
+        self.info("This is an overridden manual element")
+
+    def preflight(self):
+        pass
+
+    def get_unique_key(self):
+        return {}
+
+
+# Plugin entry point
+def setup():
+    return Manual
diff --git a/tests/plugins/shadow/project.conf b/tests/plugins/shadow/project.conf
new file mode 100644
index 0000000..738051a
--- /dev/null
+++ b/tests/plugins/shadow/project.conf
@@ -0,0 +1,8 @@
+# This project.conf gets rewritten for each plugin loading test
+name: test
+
+# Required BuildStream version
+min-version: 2.0
+
+# Subdirectory where elements are stored
+element-path: elements