summaryrefslogtreecommitdiff
path: root/tests/format
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2019-01-11 17:52:31 -0500
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2019-01-16 18:35:21 -0500
commit8d676a84f7410ba337be3e3cd8d24d7255cefee7 (patch)
tree2e0cfa823b3dbd1a5b0aff032ad2462dd31d9cdd /tests/format
parentf712aaa552e11834d0c156661309e78b8747a81c (diff)
downloadbuildstream-8d676a84f7410ba337be3e3cd8d24d7255cefee7.tar.gz
tests: Migrate dependencies test to tests/format
This used to be an internal test, converted this to use the `cli` fixture.
Diffstat (limited to 'tests/format')
-rw-r--r--tests/format/dependencies.py133
-rw-r--r--tests/format/dependencies/elements/alldep.bst5
-rw-r--r--tests/format/dependencies/elements/builddep-list.bst4
-rw-r--r--tests/format/dependencies/elements/builddep.bst5
-rw-r--r--tests/format/dependencies/elements/circular-firstdep.bst4
-rw-r--r--tests/format/dependencies/elements/circular-seconddep.bst4
-rw-r--r--tests/format/dependencies/elements/circulartarget.bst4
-rw-r--r--tests/format/dependencies/elements/firstdep.bst2
-rw-r--r--tests/format/dependencies/elements/invaliddep.bst4
-rw-r--r--tests/format/dependencies/elements/invaliddeptype.bst5
-rw-r--r--tests/format/dependencies/elements/list-combine.bst8
-rw-r--r--tests/format/dependencies/elements/list-overlap.bst7
-rw-r--r--tests/format/dependencies/elements/runtimedep-list.bst4
-rw-r--r--tests/format/dependencies/elements/runtimedep.bst5
-rw-r--r--tests/format/dependencies/elements/seconddep.bst2
-rw-r--r--tests/format/dependencies/elements/shareddep.bst4
-rw-r--r--tests/format/dependencies/elements/shareddeptarget.bst5
-rw-r--r--tests/format/dependencies/elements/target-depdict.bst4
-rw-r--r--tests/format/dependencies/elements/target.bst4
-rw-r--r--tests/format/dependencies/elements/thirddep.bst2
-rw-r--r--tests/format/dependencies/project.conf3
21 files changed, 218 insertions, 0 deletions
diff --git a/tests/format/dependencies.py b/tests/format/dependencies.py
new file mode 100644
index 000000000..bcfa2929a
--- /dev/null
+++ b/tests/format/dependencies.py
@@ -0,0 +1,133 @@
+import os
+import pytest
+
+from buildstream._exceptions import ErrorDomain, LoadErrorReason
+from tests.testutils import cli
+
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ 'dependencies',
+)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_two_files(cli, datafiles):
+ project = str(datafiles)
+
+ elements = cli.get_pipeline(project, ['target.bst'])
+ assert elements == ['firstdep.bst', 'target.bst']
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_shared_dependency(cli, datafiles):
+ project = str(datafiles)
+
+ elements = cli.get_pipeline(project, ['shareddeptarget.bst'])
+ assert elements == ['firstdep.bst', 'shareddep.bst', 'shareddeptarget.bst']
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_dependency_dict(cli, datafiles):
+ project = str(datafiles)
+ elements = cli.get_pipeline(project, ['target-depdict.bst'])
+ assert elements == ['firstdep.bst', 'target-depdict.bst']
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_invalid_dependency_declaration(cli, datafiles):
+ project = str(datafiles)
+ result = cli.run(project=project, args=['show', 'invaliddep.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_invalid_dependency_type(cli, datafiles):
+ project = str(datafiles)
+ result = cli.run(project=project, args=['show', 'invaliddeptype.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_circular_dependency(cli, datafiles):
+ project = str(datafiles)
+ result = cli.run(project=project, args=['show', 'circulartarget.bst'])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.CIRCULAR_DEPENDENCY)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_build_dependency(cli, datafiles):
+ project = str(datafiles)
+
+ elements = cli.get_pipeline(project, ['builddep.bst'], scope='run')
+ assert elements == ['builddep.bst']
+
+ elements = cli.get_pipeline(project, ['builddep.bst'], scope='build')
+ assert elements == ['firstdep.bst']
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_runtime_dependency(cli, datafiles):
+ project = str(datafiles)
+ elements = cli.get_pipeline(project, ['runtimedep.bst'], scope='build')
+
+ # FIXME: The empty line should probably never happen here when there are no results.
+ assert elements == ['']
+ elements = cli.get_pipeline(project, ['runtimedep.bst'], scope='run')
+ assert elements == ['firstdep.bst', 'runtimedep.bst']
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_all_dependency(cli, datafiles):
+ project = str(datafiles)
+
+ elements = cli.get_pipeline(project, ['alldep.bst'], scope='build')
+ assert elements == ['firstdep.bst']
+
+ elements = cli.get_pipeline(project, ['alldep.bst'], scope='run')
+ assert elements == ['firstdep.bst', 'alldep.bst']
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_list_build_dependency(cli, datafiles):
+ project = str(datafiles)
+
+ # Check that the pipeline includes the build dependency
+ deps = cli.get_pipeline(project, ['builddep-list.bst'], scope="build")
+ assert "firstdep.bst" in deps
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_list_runtime_dependency(cli, datafiles):
+ project = str(datafiles)
+
+ # Check that the pipeline includes the runtime dependency
+ deps = cli.get_pipeline(project, ['runtimedep-list.bst'], scope="run")
+ assert "firstdep.bst" in deps
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_list_dependencies_combined(cli, datafiles):
+ project = str(datafiles)
+
+ # Check that runtime deps get combined
+ rundeps = cli.get_pipeline(project, ['list-combine.bst'], scope="run")
+ assert "firstdep.bst" not in rundeps
+ assert "seconddep.bst" in rundeps
+ assert "thirddep.bst" in rundeps
+
+ # Check that build deps get combined
+ builddeps = cli.get_pipeline(project, ['list-combine.bst'], scope="build")
+ assert "firstdep.bst" in builddeps
+ assert "seconddep.bst" not in builddeps
+ assert "thirddep.bst" in builddeps
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_list_overlap(cli, datafiles):
+ project = str(datafiles)
+
+ # Check that dependencies get merged
+ rundeps = cli.get_pipeline(project, ['list-overlap.bst'], scope="run")
+ assert "firstdep.bst" in rundeps
+ builddeps = cli.get_pipeline(project, ['list-overlap.bst'], scope="build")
+ assert "firstdep.bst" in builddeps
diff --git a/tests/format/dependencies/elements/alldep.bst b/tests/format/dependencies/elements/alldep.bst
new file mode 100644
index 000000000..7df79c92d
--- /dev/null
+++ b/tests/format/dependencies/elements/alldep.bst
@@ -0,0 +1,5 @@
+kind: manual
+description: This element has a dependency with type 'all'
+depends:
+ - filename: firstdep.bst
+ type: all
diff --git a/tests/format/dependencies/elements/builddep-list.bst b/tests/format/dependencies/elements/builddep-list.bst
new file mode 100644
index 000000000..a0cbcaf23
--- /dev/null
+++ b/tests/format/dependencies/elements/builddep-list.bst
@@ -0,0 +1,4 @@
+kind: stack
+description: This element has a build-only dependency specified via build-depends
+build-depends:
+ - firstdep.bst
diff --git a/tests/format/dependencies/elements/builddep.bst b/tests/format/dependencies/elements/builddep.bst
new file mode 100644
index 000000000..ab8171e2c
--- /dev/null
+++ b/tests/format/dependencies/elements/builddep.bst
@@ -0,0 +1,5 @@
+kind: manual
+description: This element has a build-only dependency
+depends:
+ - filename: firstdep.bst
+ type: build
diff --git a/tests/format/dependencies/elements/circular-firstdep.bst b/tests/format/dependencies/elements/circular-firstdep.bst
new file mode 100644
index 000000000..604212042
--- /dev/null
+++ b/tests/format/dependencies/elements/circular-firstdep.bst
@@ -0,0 +1,4 @@
+kind: manual
+description: Depend on another dep which depends on the target
+depends:
+- circular-seconddep.bst
diff --git a/tests/format/dependencies/elements/circular-seconddep.bst b/tests/format/dependencies/elements/circular-seconddep.bst
new file mode 100644
index 000000000..1b944c912
--- /dev/null
+++ b/tests/format/dependencies/elements/circular-seconddep.bst
@@ -0,0 +1,4 @@
+kind: manual
+description: Depend on the target, creating a circular dependency
+depends:
+- circulartarget.bst
diff --git a/tests/format/dependencies/elements/circulartarget.bst b/tests/format/dependencies/elements/circulartarget.bst
new file mode 100644
index 000000000..eac50469c
--- /dev/null
+++ b/tests/format/dependencies/elements/circulartarget.bst
@@ -0,0 +1,4 @@
+kind: stack
+description: This is a main target which introduces a circular dependency
+depends:
+- circular-firstdep.bst
diff --git a/tests/format/dependencies/elements/firstdep.bst b/tests/format/dependencies/elements/firstdep.bst
new file mode 100644
index 000000000..5c9c1c1e6
--- /dev/null
+++ b/tests/format/dependencies/elements/firstdep.bst
@@ -0,0 +1,2 @@
+kind: manual
+description: This is the first dependency
diff --git a/tests/format/dependencies/elements/invaliddep.bst b/tests/format/dependencies/elements/invaliddep.bst
new file mode 100644
index 000000000..65c43c60a
--- /dev/null
+++ b/tests/format/dependencies/elements/invaliddep.bst
@@ -0,0 +1,4 @@
+kind: pony
+description: This is an invalid dependency
+depends:
+ more: it should be a list, not a dict
diff --git a/tests/format/dependencies/elements/invaliddeptype.bst b/tests/format/dependencies/elements/invaliddeptype.bst
new file mode 100644
index 000000000..4f4dac973
--- /dev/null
+++ b/tests/format/dependencies/elements/invaliddeptype.bst
@@ -0,0 +1,5 @@
+kind: manual
+description: This is an invalid dependency type
+depends:
+ - filename: firstdep.bst
+ type: should be build or runtime
diff --git a/tests/format/dependencies/elements/list-combine.bst b/tests/format/dependencies/elements/list-combine.bst
new file mode 100644
index 000000000..ed3452206
--- /dev/null
+++ b/tests/format/dependencies/elements/list-combine.bst
@@ -0,0 +1,8 @@
+kind: stack
+description: This element depends on three elements in different ways
+build-depends:
+- firstdep.bst
+runtime-depends:
+- seconddep.bst
+depends:
+- thirddep.bst
diff --git a/tests/format/dependencies/elements/list-overlap.bst b/tests/format/dependencies/elements/list-overlap.bst
new file mode 100644
index 000000000..0ee94f11c
--- /dev/null
+++ b/tests/format/dependencies/elements/list-overlap.bst
@@ -0,0 +1,7 @@
+kind: stack
+description: This element depends on two elements in different ways
+build-depends:
+- firstdep.bst
+depends:
+- filename: firstdep.bst
+ type: runtime
diff --git a/tests/format/dependencies/elements/runtimedep-list.bst b/tests/format/dependencies/elements/runtimedep-list.bst
new file mode 100644
index 000000000..1207a492d
--- /dev/null
+++ b/tests/format/dependencies/elements/runtimedep-list.bst
@@ -0,0 +1,4 @@
+kind: stack
+description: This element has a runtime-only dependency
+runtime-depends:
+ - firstdep.bst
diff --git a/tests/format/dependencies/elements/runtimedep.bst b/tests/format/dependencies/elements/runtimedep.bst
new file mode 100644
index 000000000..6a5247117
--- /dev/null
+++ b/tests/format/dependencies/elements/runtimedep.bst
@@ -0,0 +1,5 @@
+kind: manual
+description: This element has a runtime-only dependency
+depends:
+ - filename: firstdep.bst
+ type: runtime
diff --git a/tests/format/dependencies/elements/seconddep.bst b/tests/format/dependencies/elements/seconddep.bst
new file mode 100644
index 000000000..93ded4359
--- /dev/null
+++ b/tests/format/dependencies/elements/seconddep.bst
@@ -0,0 +1,2 @@
+kind: manual
+description: This is the second dependency
diff --git a/tests/format/dependencies/elements/shareddep.bst b/tests/format/dependencies/elements/shareddep.bst
new file mode 100644
index 000000000..ac123e253
--- /dev/null
+++ b/tests/format/dependencies/elements/shareddep.bst
@@ -0,0 +1,4 @@
+kind: stack
+description: This is the first dependency
+depends:
+- firstdep.bst
diff --git a/tests/format/dependencies/elements/shareddeptarget.bst b/tests/format/dependencies/elements/shareddeptarget.bst
new file mode 100644
index 000000000..b6efb1306
--- /dev/null
+++ b/tests/format/dependencies/elements/shareddeptarget.bst
@@ -0,0 +1,5 @@
+kind: stack
+description: This is the main target
+depends:
+- firstdep.bst
+- shareddep.bst
diff --git a/tests/format/dependencies/elements/target-depdict.bst b/tests/format/dependencies/elements/target-depdict.bst
new file mode 100644
index 000000000..6a150753c
--- /dev/null
+++ b/tests/format/dependencies/elements/target-depdict.bst
@@ -0,0 +1,4 @@
+kind: manual
+description: This is the main target
+depends:
+- filename: firstdep.bst
diff --git a/tests/format/dependencies/elements/target.bst b/tests/format/dependencies/elements/target.bst
new file mode 100644
index 000000000..b856b0f93
--- /dev/null
+++ b/tests/format/dependencies/elements/target.bst
@@ -0,0 +1,4 @@
+kind: stack
+description: This is the main target
+depends:
+- firstdep.bst
diff --git a/tests/format/dependencies/elements/thirddep.bst b/tests/format/dependencies/elements/thirddep.bst
new file mode 100644
index 000000000..39b58e57a
--- /dev/null
+++ b/tests/format/dependencies/elements/thirddep.bst
@@ -0,0 +1,2 @@
+kind: manual
+description: This is the third dependency
diff --git a/tests/format/dependencies/project.conf b/tests/format/dependencies/project.conf
new file mode 100644
index 000000000..fcd60b6df
--- /dev/null
+++ b/tests/format/dependencies/project.conf
@@ -0,0 +1,3 @@
+# Basic project
+name: test
+element-path: elements