summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2019-02-22 17:15:09 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2019-02-22 18:06:03 +0900
commite0238689550a9e6e979aa7a35bb4b7ead6b45c8f (patch)
treed8890820fa725bec3004e138c51295522c8d41eb
parentfefc68fb7813a1be5a7bef6c45cdb248e7b2bafb (diff)
downloadbuildstream-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.py39
-rw-r--r--tests/frontend/overlaps/sub-collect.bst11
-rw-r--r--tests/frontend/overlaps/sub-project/a-sub.bst7
-rw-r--r--tests/frontend/overlaps/sub-project/files/a/file31
-rw-r--r--tests/frontend/overlaps/sub-project/files/z/file11
-rw-r--r--tests/frontend/overlaps/sub-project/files/z/file21
-rw-r--r--tests/frontend/overlaps/sub-project/z-sub.bst7
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"