diff options
author | James Ennis <james.ennis@codethink.co.uk> | 2019-08-01 12:06:02 +0100 |
---|---|---|
committer | James Ennis <james.ennis@codethink.com> | 2019-08-06 13:03:47 +0000 |
commit | ef757b5e8ee7d1bfab8750d4a87cbc374eda295e (patch) | |
tree | 1ed88743f0d11200c87ffeaed740f294504568be /tests/artifactcache | |
parent | 34529551faf0c1206e5fe887355da882a5c32c9e (diff) | |
download | buildstream-ef757b5e8ee7d1bfab8750d4a87cbc374eda295e.tar.gz |
plugins/elements/junction.py: Add 'cache-junction-elements' option
The 'cache-junction-elements' configuration option for junction's
is a boolean which enables elements from within the junction to
interact with the parent project's remote(s).
A test has been added to enforce this behaviour and the
BST_FORMAT_VERSION has been bumped.
Diffstat (limited to 'tests/artifactcache')
-rw-r--r-- | tests/artifactcache/junctions.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/artifactcache/junctions.py b/tests/artifactcache/junctions.py index c93d79c4b..bfddcedac 100644 --- a/tests/artifactcache/junctions.py +++ b/tests/artifactcache/junctions.py @@ -87,3 +87,49 @@ def test_push_pull(cli, tmpdir, datafiles): assert state == 'cached' state = cli.get_element_state(base_project, 'base-element.bst') assert state == 'cached' + + +@pytest.mark.datafiles(DATA_DIR) +def test_caching_junction_elements(cli, tmpdir, datafiles): + project = os.path.join(str(datafiles), 'parent') + base_project = os.path.join(str(project), 'base') + + # Load the junction element + junction_element = os.path.join(project, 'base.bst') + junction_data = _yaml.roundtrip_load(junction_element) + + # Add the "cache-junction-elements" boolean to the junction Element + junction_data['config'] = {"cache-junction-elements": True} + _yaml.roundtrip_dump(junction_data, junction_element) + + with create_artifact_share(os.path.join(str(tmpdir), 'artifactshare-parent')) as share,\ + create_artifact_share(os.path.join(str(tmpdir), 'artifactshare-base')) as base_share: + + # First build it without the artifact cache configured + result = cli.run(project=project, args=['build', 'target.bst']) + assert result.exit_code == 0 + + # Assert that we are now cached locally + state = cli.get_element_state(project, 'target.bst') + assert state == 'cached' + state = cli.get_element_state(base_project, 'base-element.bst') + assert state == 'cached' + + project_set_artifacts(project, share.repo) + project_set_artifacts(base_project, base_share.repo) + + # Now try bst artifact push + result = cli.run(project=project, args=['artifact', 'push', '--deps', 'all', 'target.bst']) + assert result.exit_code == 0 + + # And finally assert that the artifacts are in the right shares + # + # The parent project's cache should *also* contain elements from the junction + assert_shared(cli, share, project, 'target.bst', project_name='parent') + assert_shared(cli, share, project, 'app.bst', project_name='parent') + assert_shared(cli, share, base_project, 'base-element.bst', project_name='base') + + # The junction project's cache should only contain elements in the junction project + assert_not_shared(cli, base_share, project, 'target.bst', project_name='parent') + assert_not_shared(cli, base_share, project, 'app.bst', project_name='parent') + assert_shared(cli, base_share, base_project, 'base-element.bst', project_name='base') |