summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-30 16:29:00 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-30 16:29:00 +0900
commite472f5abd7f9aeff994a14e581c7a89199bd255f (patch)
tree515db039990c3c47257c17e38916819e1559e59c
parent1b878835991dc4d37d302cf9d64b52791f534adf (diff)
downloadbuildstream-e472f5abd7f9aeff994a14e581c7a89199bd255f.tar.gz
tests/frontend/track.py: Added tests for recursive tracking and --except
-rw-r--r--tests/frontend/track.py113
1 files changed, 103 insertions, 10 deletions
diff --git a/tests/frontend/track.py b/tests/frontend/track.py
index 0ed0b239e..6b704c8b9 100644
--- a/tests/frontend/track.py
+++ b/tests/frontend/track.py
@@ -12,6 +12,19 @@ DATA_DIR = os.path.join(
)
+def generate_element(repo, element_path, dep_name=None):
+ element = {
+ 'kind': 'import',
+ 'sources': [
+ repo.source_config()
+ ]
+ }
+ if dep_name:
+ element['depends'] = [dep_name]
+
+ _yaml.dump(element, element_path)
+
+
@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS])
def test_track(cli, tmpdir, datafiles, kind):
@@ -26,16 +39,8 @@ def test_track(cli, tmpdir, datafiles, kind):
repo = create_repo(kind, str(tmpdir))
ref = repo.create(dev_files_path)
- # Write out our test target
- element = {
- 'kind': 'import',
- 'sources': [
- repo.source_config()
- ]
- }
- _yaml.dump(element,
- os.path.join(element_path,
- element_name))
+ # Generate the element
+ generate_element(repo, os.path.join(element_path, element_name))
# Assert that a fetch is needed
assert cli.get_element_state(project, element_name) == 'no reference'
@@ -54,3 +59,91 @@ def test_track(cli, tmpdir, datafiles, kind):
# Assert that we are now buildable because the source is
# now cached.
assert cli.get_element_state(project, element_name) == 'buildable'
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS])
+def test_track_recurse(cli, tmpdir, datafiles, kind):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ dev_files_path = os.path.join(project, 'files', 'dev-files')
+ element_path = os.path.join(project, 'elements')
+ element_dep_name = 'track-test-dep-{}.bst'.format(kind)
+ element_target_name = 'track-test-target-{}.bst'.format(kind)
+
+ # Create our repo object of the given source type with
+ # the dev files, and then collect the initial ref.
+ #
+ repo = create_repo(kind, str(tmpdir))
+ ref = repo.create(dev_files_path)
+
+ # Write out our test targets
+ generate_element(repo, os.path.join(element_path, element_dep_name))
+ generate_element(repo, os.path.join(element_path, element_target_name),
+ dep_name=element_dep_name)
+
+ # Assert that a fetch is needed
+ assert cli.get_element_state(project, element_dep_name) == 'no reference'
+ assert cli.get_element_state(project, element_target_name) == 'no reference'
+
+ # Now first try to track it
+ result = cli.run(project=project, args=[
+ 'track', '--deps', 'all',
+ element_target_name])
+ assert result.exit_code == 0
+
+ # And now fetch it: The Source has probably already cached the
+ # latest ref locally, but it is not required to have cached
+ # the associated content of the latest ref at track time, that
+ # is the job of fetch.
+ result = cli.run(project=project, args=[
+ 'fetch', '--deps', 'all',
+ element_target_name])
+ assert result.exit_code == 0
+
+ # Assert that the dependency is buildable and the target is waiting
+ assert cli.get_element_state(project, element_dep_name) == 'buildable'
+ assert cli.get_element_state(project, element_target_name) == 'waiting'
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS])
+def test_track_recurse_except(cli, tmpdir, datafiles, kind):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ dev_files_path = os.path.join(project, 'files', 'dev-files')
+ element_path = os.path.join(project, 'elements')
+ element_dep_name = 'track-test-dep-{}.bst'.format(kind)
+ element_target_name = 'track-test-target-{}.bst'.format(kind)
+
+ # Create our repo object of the given source type with
+ # the dev files, and then collect the initial ref.
+ #
+ repo = create_repo(kind, str(tmpdir))
+ ref = repo.create(dev_files_path)
+
+ # Write out our test targets
+ generate_element(repo, os.path.join(element_path, element_dep_name))
+ generate_element(repo, os.path.join(element_path, element_target_name),
+ dep_name=element_dep_name)
+
+ # Assert that a fetch is needed
+ assert cli.get_element_state(project, element_dep_name) == 'no reference'
+ assert cli.get_element_state(project, element_target_name) == 'no reference'
+
+ # Now first try to track it
+ result = cli.run(project=project, args=[
+ 'track', '--deps', 'all', '--except', element_dep_name,
+ element_target_name])
+ assert result.exit_code == 0
+
+ # And now fetch it: The Source has probably already cached the
+ # latest ref locally, but it is not required to have cached
+ # the associated content of the latest ref at track time, that
+ # is the job of fetch.
+ result = cli.run(project=project, args=[
+ 'fetch', '--deps', 'none',
+ element_target_name])
+ assert result.exit_code == 0
+
+ # Assert that the dependency is buildable and the target is waiting
+ assert cli.get_element_state(project, element_dep_name) == 'no reference'
+ assert cli.get_element_state(project, element_target_name) == 'waiting'