diff --git a/tests/frontend/configurable_warnings.py b/tests/frontend/configurable_warnings.py new file mode 100644 index 0000000000000000000000000000000000000000..f99cda2d2f70e74d2a1a07d447ba267ccdc69f90 --- /dev/null +++ b/tests/frontend/configurable_warnings.py @@ -0,0 +1,66 @@ +import pytest +import os + +from buildstream.plugin import CoreWarnings +from buildstream._exceptions import ErrorDomain, LoadErrorReason +from buildstream import _yaml +from tests.testutils.runcli import cli + +TOP_DIR = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + "configuredwarning" +) + + +def get_project(fatal_warnings): + return { + "name": "test", + "element-path": "elements", + "plugins": [ + { + "origin": "local", + "path": "plugins", + "elements": { + "warninga": 0, + "warningb": 0, + "corewarn": 0, + } + } + ], + "fatal-warnings": fatal_warnings + } + + +def build_project(datafiles, fatal_warnings): + project_path = os.path.join(datafiles.dirname, datafiles.basename) + + project = get_project(fatal_warnings) + + _yaml.dump(project, os.path.join(project_path, "project.conf")) + + return project_path + + +@pytest.mark.datafiles(TOP_DIR) +@pytest.mark.parametrize("element_name, fatal_warnings, expect_fatal, error_domain", [ + ("corewarn.bst", [CoreWarnings.OVERLAPS], True, ErrorDomain.STREAM), + ("warninga.bst", ["warninga:warning-a"], True, ErrorDomain.STREAM), + ("warningb.bst", ["warningb:warning-b"], True, ErrorDomain.STREAM), + ("corewarn.bst", [], False, None), + ("warninga.bst", [], False, None), + ("warningb.bst", [], False, None), + ("corewarn.bst", "true", True, ErrorDomain.STREAM), + ("warninga.bst", "true", True, ErrorDomain.STREAM), + ("warningb.bst", "true", True, ErrorDomain.STREAM), + ("warninga.bst", [CoreWarnings.OVERLAPS], False, None), + ("warningb.bst", [CoreWarnings.OVERLAPS], False, None), +]) +def test_fatal_warnings(cli, datafiles, element_name, + fatal_warnings, expect_fatal, error_domain): + project_path = build_project(datafiles, fatal_warnings) + + result = cli.run(project=project_path, args=["build", element_name]) + if expect_fatal: + result.assert_main_error(error_domain, None, "Expected fatal execution") + else: + result.assert_success("Unexpected fatal execution") diff --git a/tests/frontend/configuredwarning/elements/corewarn.bst b/tests/frontend/configuredwarning/elements/corewarn.bst new file mode 100644 index 0000000000000000000000000000000000000000..6eac4e07e181d9a2519d788a9df97e2d0fc06126 --- /dev/null +++ b/tests/frontend/configuredwarning/elements/corewarn.bst @@ -0,0 +1 @@ +kind: corewarn \ No newline at end of file diff --git a/tests/frontend/configuredwarning/elements/warninga.bst b/tests/frontend/configuredwarning/elements/warninga.bst new file mode 100644 index 0000000000000000000000000000000000000000..43c3458a867bb8df8080b98d7f8054ad93caee9b --- /dev/null +++ b/tests/frontend/configuredwarning/elements/warninga.bst @@ -0,0 +1 @@ +kind: warninga diff --git a/tests/frontend/configuredwarning/elements/warningb.bst b/tests/frontend/configuredwarning/elements/warningb.bst new file mode 100644 index 0000000000000000000000000000000000000000..2def6c5a4161376252d2d5a3f8cf670cb369f8fd --- /dev/null +++ b/tests/frontend/configuredwarning/elements/warningb.bst @@ -0,0 +1 @@ +kind: warningb diff --git a/tests/frontend/configuredwarning/plugins/corewarn.py b/tests/frontend/configuredwarning/plugins/corewarn.py new file mode 100644 index 0000000000000000000000000000000000000000..0d5aa82c8635c8c8f3345107b881acc651cd7b8e --- /dev/null +++ b/tests/frontend/configuredwarning/plugins/corewarn.py @@ -0,0 +1,30 @@ +from buildstream import Element +from buildstream.plugin import CoreWarnings + + +class CoreWarn(Element): + def configure(self, node): + pass + + def preflight(self): + pass + + def get_unique_key(self): + pass + + def get_warnings(self): + return [] # CoreWarnings should be included regardless of plugins. + + def configure_sandbox(self, sandbox): + pass + + def stage(self, sandbox): + pass + + def assemble(self, sandbox): + self.warn("Testing: CoreWarning produced during assemble", + warning_token=CoreWarnings.OVERLAPS) + + +def setup(): + return CoreWarn diff --git a/tests/frontend/configuredwarning/plugins/warninga.py b/tests/frontend/configuredwarning/plugins/warninga.py new file mode 100644 index 0000000000000000000000000000000000000000..9fd8dc61b5c2e513858ab87de486d9403630b1c6 --- /dev/null +++ b/tests/frontend/configuredwarning/plugins/warninga.py @@ -0,0 +1,27 @@ +from buildstream import Element + +WARNING_A = "warning-a" + + +class WarningA(Element): + def configure(self, node): + pass + + def preflight(self): + pass + + def get_unique_key(self): + pass + + def configure_sandbox(self, sandbox): + pass + + def stage(self, sandbox): + pass + + def assemble(self, sandbox): + self.warn("Testing: warning-a produced during assemble", warning_token=WARNING_A) + + +def setup(): + return WarningA diff --git a/tests/frontend/configuredwarning/plugins/warningb.py b/tests/frontend/configuredwarning/plugins/warningb.py new file mode 100644 index 0000000000000000000000000000000000000000..64d25ef394892c5ff8f22e7ad63815f4b47c353a --- /dev/null +++ b/tests/frontend/configuredwarning/plugins/warningb.py @@ -0,0 +1,27 @@ +from buildstream import Element + +WARNING_B = "warning-b" + + +class WarningB(Element): + def configure(self, node): + pass + + def preflight(self): + pass + + def get_unique_key(self): + pass + + def configure_sandbox(self, sandbox): + pass + + def stage(self, sandbox): + pass + + def assemble(self, sandbox): + self.warn("Testing: warning-b produced during assemble", warning_token=WARNING_B) + + +def setup(): + return WarningB diff --git a/tests/frontend/configuredwarning/project.conf b/tests/frontend/configuredwarning/project.conf new file mode 100644 index 0000000000000000000000000000000000000000..c73d217b80a6639a5b9fce5d0d024b7b3483314c --- /dev/null +++ b/tests/frontend/configuredwarning/project.conf @@ -0,0 +1,8 @@ +name: test +element-path: elements +plugins: +- origin: local + path: element_plugins + elements: + warninga: 0 + warningb: 0