diff options
author | Jonathan Maw <jonathan.maw@codethink.co.uk> | 2017-12-08 19:54:37 +0000 |
---|---|---|
committer | Jonathan Maw <jonathan.maw@codethink.co.uk> | 2018-01-25 13:27:42 +0000 |
commit | efbf144e3d5e433c20f2646040548008e82d9a60 (patch) | |
tree | 2079a8a186fcaab1cbc073e7767782e248e041b0 | |
parent | a921474d0731e03e1e9e788ec3905d99ec0754ea (diff) | |
download | buildstream-efbf144e3d5e433c20f2646040548008e82d9a60.tar.gz |
tests: Add overlap tests
-rw-r--r-- | tests/frontend/overlaps.py | 62 | ||||
-rw-r--r-- | tests/frontend/overlaps/a-whitelisted.bst | 13 | ||||
-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.bst | 16 | ||||
-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.conf | 4 | ||||
-rw-r--r-- | tests/frontend/overlaps/c-whitelisted.bst | 11 | ||||
-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.bst | 9 | ||||
-rw-r--r-- | tests/frontend/overlaps/collect-whitelisted.bst | 9 | ||||
-rw-r--r-- | tests/frontend/overlaps/collect.bst | 6 |
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 |