diff options
Diffstat (limited to 'tests/frontend')
-rw-r--r-- | tests/frontend/overlaps.py | 41 | ||||
-rw-r--r-- | tests/frontend/overlaps/sub-collect.bst | 11 | ||||
-rw-r--r-- | tests/frontend/overlaps/sub-project/a-sub.bst | 7 | ||||
-rw-r--r-- | tests/frontend/overlaps/sub-project/files/a/file3 | 1 | ||||
-rw-r--r-- | tests/frontend/overlaps/sub-project/files/z/file1 | 1 | ||||
-rw-r--r-- | tests/frontend/overlaps/sub-project/files/z/file2 | 1 | ||||
-rw-r--r-- | tests/frontend/overlaps/sub-project/z-sub.bst | 7 |
7 files changed, 61 insertions, 8 deletions
diff --git a/tests/frontend/overlaps.py b/tests/frontend/overlaps.py index 36e15acd7..7c86445f6 100644 --- a/tests/frontend/overlaps.py +++ b/tests/frontend/overlaps.py @@ -1,6 +1,7 @@ import os import pytest from tests.testutils.runcli import cli +from tests.testutils import generate_junction from buildstream._exceptions import ErrorDomain from buildstream import _yaml @@ -10,15 +11,12 @@ DATA_DIR = os.path.join( "overlaps" ) -project_template = { - "name": "test", - "element-path": "." -} - -def gen_project(project_dir, fail_on_overlap): - template = dict(project_template) - template["fail-on-overlap"] = fail_on_overlap +def gen_project(project_dir, fail_on_overlap, project_name="test"): + template = { + "name": project_name, + "fail-on-overlap": fail_on_overlap + } projectfile = os.path.join(project_dir, "project.conf") _yaml.dump(template, projectfile) @@ -82,3 +80,30 @@ def test_overlaps_script(cli, datafiles): result = cli.run(project=project_dir, silent=True, args=[ 'build', 'script.bst']) result.assert_success() + + +@pytest.mark.datafiles(DATA_DIR) +@pytest.mark.parametrize("project_policy", [('fail'), ('warn')]) +@pytest.mark.parametrize("subproject_policy", [('fail'), ('warn')]) +def test_overlap_subproject(cli, tmpdir, datafiles, project_policy, subproject_policy): + project_dir = str(datafiles) + subproject_dir = os.path.join(project_dir, 'sub-project') + junction_path = os.path.join(project_dir, 'sub-project.bst') + + gen_project(project_dir, bool(project_policy == 'fail'), project_name='test') + gen_project(subproject_dir, bool(subproject_policy == 'fail'), project_name='subtest') + generate_junction(tmpdir, subproject_dir, junction_path) + + # Here we have a dependency chain where the project element + # always overlaps with the subproject element. + # + # Test that overlap error vs warning policy for this overlap + # is always controlled by the project and not the subproject. + # + result = cli.run(project=project_dir, silent=True, args=['build', 'sub-collect.bst']) + if project_policy == 'fail': + result.assert_main_error(ErrorDomain.STREAM, None) + result.assert_task_error(ErrorDomain.ELEMENT, "overlap-error") + else: + result.assert_success() + assert "WARNING Non-whitelisted overlaps detected" in result.stderr diff --git a/tests/frontend/overlaps/sub-collect.bst b/tests/frontend/overlaps/sub-collect.bst new file mode 100644 index 000000000..85d327e1b --- /dev/null +++ b/tests/frontend/overlaps/sub-collect.bst @@ -0,0 +1,11 @@ +kind: compose + +depends: +- filename: c.bst + type: build +- filename: a-sub.bst + junction: sub-project.bst + type: build +- filename: z-sub.bst + junction: sub-project.bst + type: build diff --git a/tests/frontend/overlaps/sub-project/a-sub.bst b/tests/frontend/overlaps/sub-project/a-sub.bst new file mode 100644 index 000000000..40b8f5d9c --- /dev/null +++ b/tests/frontend/overlaps/sub-project/a-sub.bst @@ -0,0 +1,7 @@ +kind: import +config: + source: / + target: / +sources: +- kind: local + path: "files/a" diff --git a/tests/frontend/overlaps/sub-project/files/a/file3 b/tests/frontend/overlaps/sub-project/files/a/file3 new file mode 100644 index 000000000..e416e0d0d --- /dev/null +++ b/tests/frontend/overlaps/sub-project/files/a/file3 @@ -0,0 +1 @@ +barny diff --git a/tests/frontend/overlaps/sub-project/files/z/file1 b/tests/frontend/overlaps/sub-project/files/z/file1 new file mode 100644 index 000000000..257cc5642 --- /dev/null +++ b/tests/frontend/overlaps/sub-project/files/z/file1 @@ -0,0 +1 @@ +foo diff --git a/tests/frontend/overlaps/sub-project/files/z/file2 b/tests/frontend/overlaps/sub-project/files/z/file2 new file mode 100644 index 000000000..5716ca598 --- /dev/null +++ b/tests/frontend/overlaps/sub-project/files/z/file2 @@ -0,0 +1 @@ +bar diff --git a/tests/frontend/overlaps/sub-project/z-sub.bst b/tests/frontend/overlaps/sub-project/z-sub.bst new file mode 100644 index 000000000..e9729ae31 --- /dev/null +++ b/tests/frontend/overlaps/sub-project/z-sub.bst @@ -0,0 +1,7 @@ +kind: import +config: + source: / + target: / +sources: +- kind: local + path: "files/z" |