summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Maw <jonathan.maw@codethink.co.uk>2017-12-08 19:54:37 +0000
committerJonathan Maw <jonathan.maw@codethink.co.uk>2018-01-25 13:27:42 +0000
commitefbf144e3d5e433c20f2646040548008e82d9a60 (patch)
tree2079a8a186fcaab1cbc073e7767782e248e041b0
parenta921474d0731e03e1e9e788ec3905d99ec0754ea (diff)
downloadbuildstream-efbf144e3d5e433c20f2646040548008e82d9a60.tar.gz
tests: Add overlap tests
-rw-r--r--tests/frontend/overlaps.py62
-rw-r--r--tests/frontend/overlaps/a-whitelisted.bst13
-rw-r--r--tests/frontend/overlaps/a.bst (renamed from tests/frontend/overlaps/three.bst)4
-rw-r--r--tests/frontend/overlaps/a/file1 (renamed from tests/frontend/overlaps/one/file1)0
-rw-r--r--tests/frontend/overlaps/a/file2 (renamed from tests/frontend/overlaps/one/file2)0
-rw-r--r--tests/frontend/overlaps/b-whitelisted.bst16
-rw-r--r--tests/frontend/overlaps/b.bst (renamed from tests/frontend/overlaps/two.bst)4
-rw-r--r--tests/frontend/overlaps/b/file2 (renamed from tests/frontend/overlaps/two/file2)0
-rw-r--r--tests/frontend/overlaps/b/file3 (renamed from tests/frontend/overlaps/two/file3)0
-rw-r--r--tests/frontend/overlaps/basic/project.conf4
-rw-r--r--tests/frontend/overlaps/c-whitelisted.bst11
-rw-r--r--tests/frontend/overlaps/c.bst (renamed from tests/frontend/overlaps/one.bst)2
-rw-r--r--tests/frontend/overlaps/c/file1 (renamed from tests/frontend/overlaps/three/file1)0
-rw-r--r--tests/frontend/overlaps/c/file2 (renamed from tests/frontend/overlaps/three/file2)0
-rw-r--r--tests/frontend/overlaps/c/file3 (renamed from tests/frontend/overlaps/three/file3)0
-rw-r--r--tests/frontend/overlaps/collect-partially-whitelisted.bst9
-rw-r--r--tests/frontend/overlaps/collect-whitelisted.bst9
-rw-r--r--tests/frontend/overlaps/collect.bst6
18 files changed, 125 insertions, 15 deletions
diff --git a/tests/frontend/overlaps.py b/tests/frontend/overlaps.py
index f62a18132..abafe4869 100644
--- a/tests/frontend/overlaps.py
+++ b/tests/frontend/overlaps.py
@@ -1,6 +1,8 @@
import os
import pytest
from tests.testutils.runcli import cli
+from buildstream._exceptions import ErrorDomain
+from buildstream import _yaml
# Project directory
DATA_DIR = os.path.join(
@@ -8,14 +10,64 @@ 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
+ projectfile = os.path.join(project_dir, "project.conf")
+ _yaml.dump(template, projectfile)
+
@pytest.mark.datafiles(DATA_DIR)
def test_overlaps(cli, datafiles):
- project = os.path.join(datafiles.dirname, datafiles.basename, "basic")
- result = cli.run(project=project, silent=True, args=[
+ project_dir = str(datafiles)
+ gen_project(project_dir, False)
+ result = cli.run(project=project_dir, silent=True, args=[
'build', 'collect.bst'])
+ result.assert_success()
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_overlaps_error(cli, datafiles):
+ project_dir = str(datafiles)
+ gen_project(project_dir, True)
+ result = cli.run(project=project_dir, silent=True, args=[
+ 'build', 'collect.bst'])
+ result.assert_main_error(ErrorDomain.PIPELINE, None)
+ result.assert_task_error(ErrorDomain.ELEMENT, "overlap-error")
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_overlaps_whitelist(cli, datafiles):
+ project_dir = str(datafiles)
+ gen_project(project_dir, True)
+ result = cli.run(project=project_dir, silent=True, args=[
+ 'build', 'collect-whitelisted.bst'])
+ result.assert_success()
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_overlaps_whitelist_ignored(cli, datafiles):
+ project_dir = str(datafiles)
+ gen_project(project_dir, False)
+ result = cli.run(project=project_dir, silent=True, args=[
+ 'build', 'collect-whitelisted.bst'])
result.assert_success()
- assert "/file1: three.bst above one.bst" in result.stderr
- assert "/file2: two.bst above three.bst above one.bst" in result.stderr
- assert "/file3: two.bst above three.bst" in result.stderr
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_overlaps_whitelist_on_overlapper(cli, datafiles):
+ # Tests that the overlapping element is responsible for whitelisting,
+ # i.e. that if A overlaps B overlaps C, and the B->C overlap is permitted,
+ # it'll still fail because A doesn't permit overlaps.
+ project_dir = str(datafiles)
+ gen_project(project_dir, True)
+ result = cli.run(project=project_dir, silent=True, args=[
+ 'build', 'collect-partially-whitelisted.bst'])
+ result.assert_main_error(ErrorDomain.PIPELINE, None)
+ result.assert_task_error(ErrorDomain.ELEMENT, "overlap-error")
diff --git a/tests/frontend/overlaps/a-whitelisted.bst b/tests/frontend/overlaps/a-whitelisted.bst
new file mode 100644
index 000000000..d995b4161
--- /dev/null
+++ b/tests/frontend/overlaps/a-whitelisted.bst
@@ -0,0 +1,13 @@
+kind: import
+config:
+ source: /
+ target: /
+depends:
+- b-whitelisted.bst
+sources:
+- kind: local
+ path: "a"
+public:
+ bst:
+ overlap-whitelist:
+ - "file*"
diff --git a/tests/frontend/overlaps/three.bst b/tests/frontend/overlaps/a.bst
index f52588ab8..c8a78a8b1 100644
--- a/tests/frontend/overlaps/three.bst
+++ b/tests/frontend/overlaps/a.bst
@@ -2,6 +2,8 @@ kind: import
config:
source: /
target: /
+depends:
+- b.bst
sources:
- kind: local
- path: "../three"
+ path: "a"
diff --git a/tests/frontend/overlaps/one/file1 b/tests/frontend/overlaps/a/file1
index 257cc5642..257cc5642 100644
--- a/tests/frontend/overlaps/one/file1
+++ b/tests/frontend/overlaps/a/file1
diff --git a/tests/frontend/overlaps/one/file2 b/tests/frontend/overlaps/a/file2
index 5716ca598..5716ca598 100644
--- a/tests/frontend/overlaps/one/file2
+++ b/tests/frontend/overlaps/a/file2
diff --git a/tests/frontend/overlaps/b-whitelisted.bst b/tests/frontend/overlaps/b-whitelisted.bst
new file mode 100644
index 000000000..3dfe931e1
--- /dev/null
+++ b/tests/frontend/overlaps/b-whitelisted.bst
@@ -0,0 +1,16 @@
+kind: import
+config:
+ source: /
+ target: /
+depends:
+- c.bst
+sources:
+- kind: local
+ path: "b"
+variables:
+ FILE: file
+public:
+ bst:
+ overlap-whitelist:
+ - file2
+ - "%{FILE}3"
diff --git a/tests/frontend/overlaps/two.bst b/tests/frontend/overlaps/b.bst
index 14686b875..56f501851 100644
--- a/tests/frontend/overlaps/two.bst
+++ b/tests/frontend/overlaps/b.bst
@@ -2,6 +2,8 @@ kind: import
config:
source: /
target: /
+depends:
+- c.bst
sources:
- kind: local
- path: "../two"
+ path: "b"
diff --git a/tests/frontend/overlaps/two/file2 b/tests/frontend/overlaps/b/file2
index 257cc5642..257cc5642 100644
--- a/tests/frontend/overlaps/two/file2
+++ b/tests/frontend/overlaps/b/file2
diff --git a/tests/frontend/overlaps/two/file3 b/tests/frontend/overlaps/b/file3
index 5716ca598..5716ca598 100644
--- a/tests/frontend/overlaps/two/file3
+++ b/tests/frontend/overlaps/b/file3
diff --git a/tests/frontend/overlaps/basic/project.conf b/tests/frontend/overlaps/basic/project.conf
deleted file mode 100644
index d903e16c7..000000000
--- a/tests/frontend/overlaps/basic/project.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-# Basic project configuration that doesnt override anything
-#
-name: pony
-element-path: "../"
diff --git a/tests/frontend/overlaps/c-whitelisted.bst b/tests/frontend/overlaps/c-whitelisted.bst
new file mode 100644
index 000000000..c71ef3128
--- /dev/null
+++ b/tests/frontend/overlaps/c-whitelisted.bst
@@ -0,0 +1,11 @@
+kind: import
+config:
+ source: /
+ target: /
+sources:
+- kind: local
+ path: "c"
+public:
+ bst:
+ overlap-whitelist:
+ - "file*"
diff --git a/tests/frontend/overlaps/one.bst b/tests/frontend/overlaps/c.bst
index e5560832d..3ad2d1bce 100644
--- a/tests/frontend/overlaps/one.bst
+++ b/tests/frontend/overlaps/c.bst
@@ -4,4 +4,4 @@ config:
target: /
sources:
- kind: local
- path: "../one"
+ path: "c"
diff --git a/tests/frontend/overlaps/three/file1 b/tests/frontend/overlaps/c/file1
index 76018072e..76018072e 100644
--- a/tests/frontend/overlaps/three/file1
+++ b/tests/frontend/overlaps/c/file1
diff --git a/tests/frontend/overlaps/three/file2 b/tests/frontend/overlaps/c/file2
index 5716ca598..5716ca598 100644
--- a/tests/frontend/overlaps/three/file2
+++ b/tests/frontend/overlaps/c/file2
diff --git a/tests/frontend/overlaps/three/file3 b/tests/frontend/overlaps/c/file3
index 257cc5642..257cc5642 100644
--- a/tests/frontend/overlaps/three/file3
+++ b/tests/frontend/overlaps/c/file3
diff --git a/tests/frontend/overlaps/collect-partially-whitelisted.bst b/tests/frontend/overlaps/collect-partially-whitelisted.bst
new file mode 100644
index 000000000..ab6ba5526
--- /dev/null
+++ b/tests/frontend/overlaps/collect-partially-whitelisted.bst
@@ -0,0 +1,9 @@
+kind: compose
+
+depends:
+- filename: a.bst
+ type: build
+- filename: b-whitelisted.bst
+ type: build
+- filename: c.bst
+ type: build
diff --git a/tests/frontend/overlaps/collect-whitelisted.bst b/tests/frontend/overlaps/collect-whitelisted.bst
new file mode 100644
index 000000000..eb634d151
--- /dev/null
+++ b/tests/frontend/overlaps/collect-whitelisted.bst
@@ -0,0 +1,9 @@
+kind: compose
+
+depends:
+- filename: a-whitelisted.bst
+ type: build
+- filename: b-whitelisted.bst
+ type: build
+- filename: c.bst
+ type: build
diff --git a/tests/frontend/overlaps/collect.bst b/tests/frontend/overlaps/collect.bst
index e0f8186ff..ee8b86acf 100644
--- a/tests/frontend/overlaps/collect.bst
+++ b/tests/frontend/overlaps/collect.bst
@@ -1,9 +1,9 @@
kind: compose
depends:
-- filename: one.bst
+- filename: a.bst
type: build
-- filename: two.bst
+- filename: b.bst
type: build
-- filename: three.bst
+- filename: c.bst
type: build