diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-03-10 20:22:46 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-03-20 18:29:14 +0900 |
commit | 6b63828cd96a86e75aaa5ea32a7ceadccaea4185 (patch) | |
tree | a7b263a0792356efe700b4d6c05bb4800813f6f0 | |
parent | 93e29955910527cde4b7895f78f72d1a7672d0bd (diff) | |
download | buildstream-6b63828cd96a86e75aaa5ea32a7ceadccaea4185.tar.gz |
tests/frontend/buildtrack.py: Modified to test saving with project.refs
Test that we get the same functionality from the complex build + track
test regardless of whether we are saving refs inline or to a project.refs file.
-rw-r--r-- | tests/frontend/buildtrack.py | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/tests/frontend/buildtrack.py b/tests/frontend/buildtrack.py index 9ce1396f9..64617b860 100644 --- a/tests/frontend/buildtrack.py +++ b/tests/frontend/buildtrack.py @@ -28,7 +28,14 @@ def create_element(repo, name, path, dependencies, ref=None): _yaml.dump(element, os.path.join(path, name)) +def configure_project(path, config): + config['name'] = 'test' + config['element-path'] = 'elements' + _yaml.dump(config, os.path.join(path, 'project.conf')) + + @pytest.mark.datafiles(os.path.join(DATA_DIR)) +@pytest.mark.parametrize("ref_storage", [('inline'), ('project.refs')]) @pytest.mark.parametrize("exceptions,excepted", [ # Test with no exceptions ([], []), @@ -61,7 +68,7 @@ def create_element(repo, name, path, dependencies, ref=None): '5.bst', '6.bst', '7.bst' ]) ]) -def test_build_track(cli, datafiles, tmpdir, track_targets, +def test_build_track(cli, datafiles, tmpdir, ref_storage, track_targets, exceptions, tracked, excepted): project = os.path.join(datafiles.dirname, datafiles.basename) dev_files_path = os.path.join(project, 'files', 'dev-files') @@ -70,6 +77,10 @@ def test_build_track(cli, datafiles, tmpdir, track_targets, repo = create_repo('git', str(tmpdir)) ref = repo.create(dev_files_path) + configure_project(project, { + 'ref-storage': ref_storage + }) + create_elements = { '0.bst': [ '2.bst', @@ -91,14 +102,34 @@ def test_build_track(cli, datafiles, tmpdir, track_targets, ], '7.bst': [] } + + initial_project_refs = {} for element, dependencies in create_elements.items(): # Test the element inconsistency resolution by ensuring that # only elements that aren't tracked have refs if element in set(tracked) - set(excepted): + # Elements which should not have a ref set + # + create_element(repo, element, element_path, dependencies) + elif ref_storage == 'project.refs': + # Store a ref in project.refs + # create_element(repo, element, element_path, dependencies) + initial_project_refs[element] = [{'ref': ref}] else: + # Store a ref in the element itself + # create_element(repo, element, element_path, dependencies, ref=ref) + # Generate initial project.refs + if ref_storage == 'project.refs': + project_refs = { + 'projects': { + 'test': initial_project_refs + } + } + _yaml.dump(project_refs, os.path.join(project, 'project.refs')) + args = ['build'] args += itertools.chain.from_iterable(zip(itertools.repeat('--track'), track_targets)) args += itertools.chain.from_iterable(zip(itertools.repeat('--track-except'), exceptions)) @@ -109,15 +140,23 @@ def test_build_track(cli, datafiles, tmpdir, track_targets, assert set(tracked_elements) == set(tracked) - set(excepted) + # Delete element sources + source_dir = os.path.join(project, 'cache', 'sources') + shutil.rmtree(source_dir) + + # Delete artifacts one by one and assert element states for target in set(tracked) - set(excepted): cli.remove_artifact_from_cache(project, target) - # Delete element sources - source_dir = os.path.join(project, 'cache', 'sources') - shutil.rmtree(source_dir) - + # Assert that it's tracked assert cli.get_element_state(project, target) == 'fetch needed' + # Assert there was a project.refs created, depending on the configuration + if ref_storage == 'project.refs': + assert os.path.exists(os.path.join(project, 'project.refs')) + else: + assert not os.path.exists(os.path.join(project, 'project.refs')) + @pytest.mark.datafiles(os.path.join(DATA_DIR)) @pytest.mark.parametrize("exceptions,excepted", [ |