diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2017-10-30 16:29:00 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2017-10-30 16:29:00 +0900 |
commit | e472f5abd7f9aeff994a14e581c7a89199bd255f (patch) | |
tree | 515db039990c3c47257c17e38916819e1559e59c /tests | |
parent | 1b878835991dc4d37d302cf9d64b52791f534adf (diff) | |
download | buildstream-e472f5abd7f9aeff994a14e581c7a89199bd255f.tar.gz |
tests/frontend/track.py: Added tests for recursive tracking and --except
Diffstat (limited to 'tests')
-rw-r--r-- | tests/frontend/track.py | 113 |
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' |