diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-02-22 17:15:09 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-02-22 18:06:03 +0900 |
commit | e0238689550a9e6e979aa7a35bb4b7ead6b45c8f (patch) | |
tree | d8890820fa725bec3004e138c51295522c8d41eb | |
parent | fefc68fb7813a1be5a7bef6c45cdb248e7b2bafb (diff) | |
download | buildstream-e0238689550a9e6e979aa7a35bb4b7ead6b45c8f.tar.gz |
tests/frontend/overlaps.py: Added regression test for cross project overlaps
This test ensures the overlap failure vs warning policy in one
project only ever affects the artifacts created for the project
which declares it and does not force it's policy onto another
consuming project.
A regression test against issue #926
-rw-r--r-- | tests/frontend/overlaps.py | 39 | ||||
-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, 60 insertions, 7 deletions
diff --git a/tests/frontend/overlaps.py b/tests/frontend/overlaps.py index 22365e442..b58ac6bcd 100644 --- a/tests/frontend/overlaps.py +++ b/tests/frontend/overlaps.py @@ -4,6 +4,7 @@ from buildstream.plugintestutils.runcli import cli from buildstream._exceptions import ErrorDomain from buildstream import _yaml from buildstream.plugin import CoreWarnings +from tests.testutils import generate_junction # Project directory DATA_DIR = os.path.join( @@ -11,14 +12,11 @@ DATA_DIR = os.path.join( "overlaps" ) -project_template = { - "name": "test", - "element-path": "." -} - -def gen_project(project_dir, fail_on_overlap, use_fatal_warnings=True): - template = dict(project_template) +def gen_project(project_dir, fail_on_overlap, use_fatal_warnings=True, project_name="test"): + template = { + "name": project_name + } if use_fatal_warnings: template["fatal-warnings"] = [CoreWarnings.OVERLAPS] if fail_on_overlap else [] else: @@ -89,3 +87,30 @@ def test_overlaps_script(cli, datafiles, use_fatal_warnings): 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.PLUGIN, CoreWarnings.OVERLAPS) + else: + result.assert_success() + assert "WARNING [overlaps]" 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" |