diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/artifactcache/junctions.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/artifactcache/junctions.py b/tests/artifactcache/junctions.py index bfddcedac..1fafb11f1 100644 --- a/tests/artifactcache/junctions.py +++ b/tests/artifactcache/junctions.py @@ -133,3 +133,65 @@ def test_caching_junction_elements(cli, tmpdir, datafiles): 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') + + +@pytest.mark.datafiles(DATA_DIR) +def test_ignore_junction_remotes(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) + + 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: + + # Immediately declare the artifact caches in the appropriate project configs + project_set_artifacts(project, share.repo) + project_set_artifacts(base_project, base_share.repo) + + # Build and populate the project remotes with their respective elements + result = cli.run(project=project, args=['build', 'target.bst']) + assert result.exit_code == 0 + + # And finally assert that the artifacts are in the right shares + # + # The parent project's cache should only contain project elements + assert_shared(cli, share, project, 'target.bst', project_name='parent') + assert_shared(cli, share, project, 'app.bst', project_name='parent') + assert_not_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') + + # Ensure that, from now on, we ignore junction element remotes + junction_data['config'] = {"ignore-junction-remotes": True} + _yaml.roundtrip_dump(junction_data, junction_element) + + # Now delete everything from the local cache and try to + # redownload from the shares. + # + cas = os.path.join(cli.directory, 'cas') + shutil.rmtree(cas) + artifact_dir = os.path.join(cli.directory, 'artifacts') + shutil.rmtree(artifact_dir) + + # Assert that nothing is cached locally anymore + state = cli.get_element_state(project, 'target.bst') + assert state != 'cached' + state = cli.get_element_state(base_project, 'base-element.bst') + assert state != 'cached' + + # Now try bst artifact pull + result = cli.run(project=project, args=['artifact', 'pull', '--deps', 'all', 'target.bst']) + assert result.exit_code == 0 + + # And assert that they are again in the local cache, without having built + state = cli.get_element_state(project, 'target.bst') + assert state == 'cached' + # We shouldn't be able to download base-element! + state = cli.get_element_state(base_project, 'base-element.bst') + assert state != 'cached' |