Skip to content
Snippets Groups Projects
Commit bbde1c21 authored by Tristan Van Berkom's avatar Tristan Van Berkom
Browse files

tests: Migrate dependency order/iteration testing to the format tests

Created new `tests/format/iteration.py` which tests the order in
which elements are iterated over in various scopes in a loaded
data model.
parent 8d676a84
No related branches found
No related tags found
1 merge request!1062General refactor in tests directory
Showing
with 108 additions and 17 deletions
......@@ -4,15 +4,15 @@ 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',
)
DATA_DIR = os.path.dirname(os.path.realpath(__file__))
#
# Exercising some different ways of loading the dependencies
#
@pytest.mark.datafiles(DATA_DIR)
def test_two_files(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
elements = cli.get_pipeline(project, ['target.bst'])
assert elements == ['firstdep.bst', 'target.bst']
......@@ -20,7 +20,7 @@ def test_two_files(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_shared_dependency(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
elements = cli.get_pipeline(project, ['shareddeptarget.bst'])
assert elements == ['firstdep.bst', 'shareddep.bst', 'shareddeptarget.bst']
......@@ -28,35 +28,35 @@ def test_shared_dependency(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_dependency_dict(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
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)
project = os.path.join(str(datafiles), 'dependencies1')
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)
project = os.path.join(str(datafiles), 'dependencies1')
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)
project = os.path.join(str(datafiles), 'dependencies1')
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)
project = os.path.join(str(datafiles), 'dependencies1')
elements = cli.get_pipeline(project, ['builddep.bst'], scope='run')
assert elements == ['builddep.bst']
......@@ -67,7 +67,7 @@ def test_build_dependency(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_runtime_dependency(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
elements = cli.get_pipeline(project, ['runtimedep.bst'], scope='build')
# FIXME: The empty line should probably never happen here when there are no results.
......@@ -78,7 +78,7 @@ def test_runtime_dependency(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_all_dependency(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
elements = cli.get_pipeline(project, ['alldep.bst'], scope='build')
assert elements == ['firstdep.bst']
......@@ -89,7 +89,7 @@ def test_all_dependency(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_list_build_dependency(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
# Check that the pipeline includes the build dependency
deps = cli.get_pipeline(project, ['builddep-list.bst'], scope="build")
......@@ -98,7 +98,7 @@ def test_list_build_dependency(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_list_runtime_dependency(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
# Check that the pipeline includes the runtime dependency
deps = cli.get_pipeline(project, ['runtimedep-list.bst'], scope="run")
......@@ -107,7 +107,7 @@ def test_list_runtime_dependency(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_list_dependencies_combined(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
# Check that runtime deps get combined
rundeps = cli.get_pipeline(project, ['list-combine.bst'], scope="run")
......@@ -124,10 +124,101 @@ def test_list_dependencies_combined(cli, datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_list_overlap(cli, datafiles):
project = str(datafiles)
project = os.path.join(str(datafiles), 'dependencies1')
# 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
#
# Testing the order of elements reported when iterating through
# Element.dependencies() with various scopes.
#
@pytest.mark.datafiles(DATA_DIR)
def test_scope_all(cli, datafiles):
project = os.path.join(str(datafiles), 'dependencies2')
elements = ['target.bst']
element_list = cli.get_pipeline(project, elements, scope='all')
assert(len(element_list) == 7)
assert(element_list[0] == "build-build.bst")
assert(element_list[1] == "run-build.bst")
assert(element_list[2] == "build.bst")
assert(element_list[3] == "dep-one.bst")
assert(element_list[4] == "run.bst")
assert(element_list[5] == "dep-two.bst")
assert(element_list[6] == "target.bst")
@pytest.mark.datafiles(DATA_DIR)
def test_scope_run(cli, datafiles):
project = os.path.join(str(datafiles), 'dependencies2')
elements = ['target.bst']
element_list = cli.get_pipeline(project, elements, scope='run')
assert(len(element_list) == 4)
assert(element_list[0] == "dep-one.bst")
assert(element_list[1] == "run.bst")
assert(element_list[2] == "dep-two.bst")
assert(element_list[3] == "target.bst")
@pytest.mark.datafiles(DATA_DIR)
def test_scope_build(cli, datafiles):
project = os.path.join(str(datafiles), 'dependencies2')
elements = ['target.bst']
element_list = cli.get_pipeline(project, elements, scope='build')
assert(len(element_list) == 3)
assert(element_list[0] == "dep-one.bst")
assert(element_list[1] == "run.bst")
assert(element_list[2] == "dep-two.bst")
@pytest.mark.datafiles(DATA_DIR)
def test_scope_build_of_child(cli, datafiles):
project = os.path.join(str(datafiles), 'dependencies2')
elements = ['target.bst']
element_list = cli.get_pipeline(project, elements, scope='build')
# First pass, lets check dep-two
element = element_list[2]
# Pass two, let's look at these
element_list = cli.get_pipeline(project, [element], scope='build')
assert(len(element_list) == 2)
assert(element_list[0] == "run-build.bst")
assert(element_list[1] == "build.bst")
@pytest.mark.datafiles(DATA_DIR)
def test_no_recurse(cli, datafiles):
project = os.path.join(str(datafiles), 'dependencies2')
elements = ['target.bst']
# We abuse the 'plan' scope here to ensure that we call
# element.dependencies() with recurse=False - currently, no `bst
# show` option does this directly.
element_list = cli.get_pipeline(project, elements, scope='plan')
assert(len(element_list) == 7)
assert(element_list[0] == 'build-build.bst')
assert(element_list[1] in ['build.bst', 'run-build.bst'])
assert(element_list[2] in ['build.bst', 'run-build.bst'])
assert(element_list[3] in ['dep-one.bst', 'run.bst', 'dep-two.bst'])
assert(element_list[4] in ['dep-one.bst', 'run.bst', 'dep-two.bst'])
assert(element_list[5] in ['dep-one.bst', 'run.bst', 'dep-two.bst'])
assert(element_list[6] == 'target.bst')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment