summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2019-02-22 10:05:35 +0000
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2019-02-22 10:05:35 +0000
commit1170f18c4a12cf65543ac2adcffdc9242c2b6345 (patch)
treed8890820fa725bec3004e138c51295522c8d41eb
parentfefc68fb7813a1be5a7bef6c45cdb248e7b2bafb (diff)
parente0238689550a9e6e979aa7a35bb4b7ead6b45c8f (diff)
downloadbuildstream-1170f18c4a12cf65543ac2adcffdc9242c2b6345.tar.gz
Merge branch 'tristan/fix-overlap-subproject-policy' into 'master'
tests/frontend/overlaps.py: Added regression test for cross project overlaps See merge request BuildStream/buildstream!1173
-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"