This is an automated email from the ASF dual-hosted git repository. juergbi pushed a commit to branch juerg/subproject-ref-storage in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 079dbfdb3f5194e90863aa3162b07065285a6e60 Author: Jürg Billeter <[email protected]> AuthorDate: Sun Jun 12 12:33:01 2022 +0200 tests/format/junctions.py: Test project.refs in subproject --- tests/format/junctions.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tests/format/junctions.py b/tests/format/junctions.py index 929832635..d17d47f5e 100644 --- a/tests/format/junctions.py +++ b/tests/format/junctions.py @@ -2,6 +2,7 @@ # pylint: disable=redefined-outer-name import os +import shutil import pytest @@ -9,6 +10,7 @@ from buildstream import _yaml from buildstream.exceptions import ErrorDomain, LoadErrorReason from buildstream._testing import cli # pylint: disable=unused-import from buildstream._testing import create_repo +from tests.testutils import generate_junction DATA_DIR = os.path.join( @@ -119,6 +121,51 @@ def test_nested(cli, tmpdir, datafiles, target, expected): assert os.path.exists(os.path.join(checkoutdir, filename)) +# +# Test successful builds of deeply nested targets with both the top-level project +# and a subproject configured to use `project.refs` +# [email protected](DATA_DIR) [email protected]( + "target,expected", + [ + ("target.bst", ["sub.txt", "subsub.txt"]), + ("deeptarget.bst", ["sub.txt", "subsub.txt", "subsubsub.txt"]), + ], + ids=["simple", "deep"], +) +def test_nested_ref_storage(cli, tmpdir, datafiles, target, expected): + project = os.path.join(str(datafiles), "nested") + subproject = os.path.join(project, "subproject") + subsubproject = os.path.join(subproject, "subsubproject") + + checkoutdir = os.path.join(str(tmpdir), "checkout") + + # Configure both the top-level project and the subproject to use project.refs / junction.refs + update_project(project, {"ref-storage": "project.refs"}) + update_project(subproject, {"ref-storage": "project.refs"}) + + # Move the subsubproject from a local directory to a repo to test `junction.refs` in the subproject + subsubref = generate_junction( + tmpdir, subsubproject, os.path.join(subproject, "subsubproject.bst"), store_ref=False + ) + shutil.rmtree(subsubproject) + + # Store ref to the subsubproject repo in the subproject's `junction.refs` + project_refs = {"projects": {"subtest": {"subsubproject.bst": [{"ref": subsubref}]}}} + _yaml.roundtrip_dump(project_refs, os.path.join(subproject, "junction.refs")) + + # Build, checkout + result = cli.run(project=project, args=["build", target]) + result.assert_success() + result = cli.run(project=project, args=["artifact", "checkout", target, "--directory", checkoutdir]) + result.assert_success() + + # Check that the checkout contains the expected files from all subprojects + for filename in expected: + assert os.path.exists(os.path.join(checkoutdir, filename)) + + # # Test missing elements/junctions in subprojects #
