summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTristan van Berkom <tristan@codethink.co.uk>2020-12-02 16:57:07 +0900
committerTristan van Berkom <tristan@codethink.co.uk>2020-12-07 21:11:29 +0900
commit83ca98712643f2b86d7ec23414c0e2e538dc597f (patch)
tree18be977ce3999151d427f3b5696cd0611f2cde8d /tests
parentf9cf2e59be5ea6798aa4b9cba4f62de28693b5c4 (diff)
downloadbuildstream-83ca98712643f2b86d7ec23414c0e2e538dc597f.tar.gz
Refactor ArtifactElement instantiation
When instantiating an ArtifactElement, use an ArtifactProject to ensure that the Element does not accidentally have access to any incidentally existing project loaded from the current working directory. Also pass along the Artifact to the Element's initializer directly, and conditionally instantiate the element based on it's artifact instead of based on loading YAML configuration. Fixes #1410 Summary of changes: * _artifactelement.py: - Now load the Artifact and pass it along to the Element constructor - Now use an ArtifactProject for the element's project - Remove overrides of Element methods, instead of behaving differently, now we just fill in all the blanks for an Element to behave more naturally when loaded from an artifact. - Avoid redundantly loading the same artifact twice, if the artifact was cached then we will load only one artifact. * element.py: - Conditionally instantiate from the passed Artifact instead of considering any YAML loading. - Error out early in _prepare_sandbox() in case that we are trying to instantiate a sandbox for an uncached artifact, in which case we don't have any SandboxConfig at hand to do so. * _stream.py: - Clear the ArtifactProject cache after loading artifacts - Ensure we load a list of unique artifacts without any duplicates * tests/frontend/buildcheckout.py: Expect a different error when trying to checkout an uncached artifact * tests/frontend/push.py, tests/frontend/artifact_show.py: No longer expect duplicates to show up with wild card statements which would capture multiple versions of the same artifact (this changes because of #1410 being fixed)
Diffstat (limited to 'tests')
-rw-r--r--tests/frontend/artifact_show.py2
-rw-r--r--tests/frontend/buildcheckout.py3
-rw-r--r--tests/frontend/push.py8
3 files changed, 7 insertions, 6 deletions
diff --git a/tests/frontend/artifact_show.py b/tests/frontend/artifact_show.py
index ebea7cf33..392a9e2c6 100644
--- a/tests/frontend/artifact_show.py
+++ b/tests/frontend/artifact_show.py
@@ -110,7 +110,7 @@ def test_artifact_show_artifact_ref(cli, tmpdir, datafiles):
[
# List only artifact results in the test/project
#
- ("test/**", ["test/target/", "test/target/", "test/compose-all/", "test/import-bin", "test/import-dev"]),
+ ("test/**", ["test/target/", "test/compose-all/", "test/import-bin", "test/import-dev"]),
# List only artifact results by their .bst element names
#
("**.bst", ["import-bin.bst", "import-dev.bst", "compose-all.bst", "target.bst", "subdir/target.bst"]),
diff --git a/tests/frontend/buildcheckout.py b/tests/frontend/buildcheckout.py
index 709259397..6d1190667 100644
--- a/tests/frontend/buildcheckout.py
+++ b/tests/frontend/buildcheckout.py
@@ -469,8 +469,7 @@ def test_build_checkout_invalid_ref(datafiles, cli):
non_existent_artifact = "test/checkout-deps/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
checkout_args = ["artifact", "checkout", "--deps", "none", "--tar", checkout, non_existent_artifact]
result = cli.run(project=project, args=checkout_args)
-
- assert "Error while staging dependencies into a sandbox: 'No artifacts to stage'" in result.stderr
+ result.assert_main_error(ErrorDomain.STREAM, "missing-sandbox-config")
@pytest.mark.datafiles(DATA_DIR)
diff --git a/tests/frontend/push.py b/tests/frontend/push.py
index 80cf07067..0b1d988f9 100644
--- a/tests/frontend/push.py
+++ b/tests/frontend/push.py
@@ -166,11 +166,13 @@ def test_push_artifact_glob(cli, tmpdir, datafiles):
# Configure artifact share
cli.configure({"artifacts": {"url": share.repo, "push": True}})
- # Run bst artifact push with a wildcard.
- # This matches two artifact refs (weak and strong cache keys).
+ # Run bst artifact push with a wildcard, there is only one artifact
+ # matching "test/target/*", even though it can be accessed both by it's
+ # strong and weak key.
+ #
result = cli.run(project=project, args=["artifact", "push", "test/target/*"])
result.assert_success()
- assert len(result.get_pushed_elements()) == 2
+ assert len(result.get_pushed_elements()) == 1
# Tests that: