diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-01-11 17:52:31 -0500 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-01-16 18:35:21 -0500 |
commit | 8d676a84f7410ba337be3e3cd8d24d7255cefee7 (patch) | |
tree | 2e0cfa823b3dbd1a5b0aff032ad2462dd31d9cdd /tests/format | |
parent | f712aaa552e11834d0c156661309e78b8747a81c (diff) | |
download | buildstream-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')
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 |