abderrahim commented on code in PR #1994:
URL: https://github.com/apache/buildstream/pull/1994#discussion_r2041193470


##########
tests/frontend/show_artifact_cas_digest.py:
##########
@@ -0,0 +1,129 @@
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+
+# Pylint doesn't play well with fixtures and dependency injection from pytest
+# pylint: disable=redefined-outer-name
+
+import os
+import shutil
+
+import pytest
+
+from buildstream._testing import cli  # pylint: disable=unused-import
+from buildstream.exceptions import ErrorDomain
+
+from tests.testutils import (
+    create_artifact_share,
+    assert_shared,
+    assert_not_shared,
+)
+
+
+DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 
"show_artifact_cas_digest_project")
+
+# This tests that cache keys behave as expected when
+# dependencies have been specified as `strict` and
+# when building in strict mode.
+#
+# This test will:
+#
+#  * Build the target once (and assert that it is cached)
+#  * Modify some local files which are imported
+#    by an import element which the target depends on
+#  * Assert that the cached state of the target element
+#    is as expected
+#
+# We run the test twice, once with an element which strict
+# depends on the changing import element, and one which
+# depends on it regularly.
+#
[email protected](DATA_DIR)
[email protected](
+    "target, expected_digests",
+    [
+        ("import-basic-files.bst", {
+            "import-basic-files.bst": 
"7093d3c89029932ce1518bd2192e1d3cf60fd88e356b39195d10b87b598c78f0/168",
+        }),
+        ("import-executable-files.bst", {
+            "import-executable-files.bst": 
"133a9ae2eda30945a363272ac14bb2c8a941770b5a37c2847c99934f2972ce4f/170",
+        }),
+        ("import-symlinks.bst", {
+            "import-symlinks.bst": 
"95947ea55021e26cec4fd4f9de90d2b7f4f7d803ccc91656b3e1f2c9923ddf19/131",
+        }),
+    ],
+)
+def test_show_artifact_cas_digest(cli, tmpdir, datafiles, target, 
expected_digests):
+    project = str(datafiles)
+    expected_no_digest = ""
+
+    # Configure a local cache
+    local_cache = os.path.join(str(tmpdir), "cache")
+    cli.configure({"cachedir": local_cache})
+
+    with create_artifact_share(os.path.join(str(tmpdir), "artifactshare")) as 
share:
+
+        cli.configure({"artifacts": {"servers": [{"url": share.repo}]}})
+
+        # Check the element and its dependencies have not been built locally 
and are not existing in the remote cache

Review Comment:
   This feels unnecessary, every time the test run it should start with a fresh 
directory.



##########
tests/frontend/show_artifact_cas_digest.py:
##########
@@ -0,0 +1,129 @@
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+
+# Pylint doesn't play well with fixtures and dependency injection from pytest
+# pylint: disable=redefined-outer-name
+
+import os
+import shutil
+
+import pytest
+
+from buildstream._testing import cli  # pylint: disable=unused-import
+from buildstream.exceptions import ErrorDomain
+
+from tests.testutils import (
+    create_artifact_share,
+    assert_shared,
+    assert_not_shared,
+)
+
+
+DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 
"show_artifact_cas_digest_project")
+
+# This tests that cache keys behave as expected when
+# dependencies have been specified as `strict` and
+# when building in strict mode.
+#
+# This test will:
+#
+#  * Build the target once (and assert that it is cached)
+#  * Modify some local files which are imported
+#    by an import element which the target depends on
+#  * Assert that the cached state of the target element
+#    is as expected
+#
+# We run the test twice, once with an element which strict
+# depends on the changing import element, and one which
+# depends on it regularly.
+#
[email protected](DATA_DIR)
[email protected](
+    "target, expected_digests",
+    [
+        ("import-basic-files.bst", {
+            "import-basic-files.bst": 
"7093d3c89029932ce1518bd2192e1d3cf60fd88e356b39195d10b87b598c78f0/168",
+        }),
+        ("import-executable-files.bst", {
+            "import-executable-files.bst": 
"133a9ae2eda30945a363272ac14bb2c8a941770b5a37c2847c99934f2972ce4f/170",
+        }),
+        ("import-symlinks.bst", {
+            "import-symlinks.bst": 
"95947ea55021e26cec4fd4f9de90d2b7f4f7d803ccc91656b3e1f2c9923ddf19/131",
+        }),
+    ],
+)
+def test_show_artifact_cas_digest(cli, tmpdir, datafiles, target, 
expected_digests):

Review Comment:
   The whole test like this takes a very long time, more than 10s on my 
computer (per test). I wonder if it would be possible to split it such that 
each part is tested separately? We probably need @gtristan's guidance on this 
one.



##########
tests/frontend/show_artifact_cas_digest.py:
##########
@@ -0,0 +1,129 @@
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+
+# Pylint doesn't play well with fixtures and dependency injection from pytest
+# pylint: disable=redefined-outer-name
+
+import os
+import shutil
+
+import pytest
+
+from buildstream._testing import cli  # pylint: disable=unused-import
+from buildstream.exceptions import ErrorDomain
+
+from tests.testutils import (
+    create_artifact_share,
+    assert_shared,
+    assert_not_shared,
+)
+
+
+DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 
"show_artifact_cas_digest_project")
+
+# This tests that cache keys behave as expected when
+# dependencies have been specified as `strict` and
+# when building in strict mode.
+#
+# This test will:
+#
+#  * Build the target once (and assert that it is cached)
+#  * Modify some local files which are imported
+#    by an import element which the target depends on
+#  * Assert that the cached state of the target element
+#    is as expected
+#
+# We run the test twice, once with an element which strict
+# depends on the changing import element, and one which
+# depends on it regularly.
+#
[email protected](DATA_DIR)
[email protected](
+    "target, expected_digests",
+    [
+        ("import-basic-files.bst", {
+            "import-basic-files.bst": 
"7093d3c89029932ce1518bd2192e1d3cf60fd88e356b39195d10b87b598c78f0/168",
+        }),
+        ("import-executable-files.bst", {
+            "import-executable-files.bst": 
"133a9ae2eda30945a363272ac14bb2c8a941770b5a37c2847c99934f2972ce4f/170",
+        }),
+        ("import-symlinks.bst", {
+            "import-symlinks.bst": 
"95947ea55021e26cec4fd4f9de90d2b7f4f7d803ccc91656b3e1f2c9923ddf19/131",
+        }),
+    ],
+)
+def test_show_artifact_cas_digest(cli, tmpdir, datafiles, target, 
expected_digests):
+    project = str(datafiles)
+    expected_no_digest = ""
+
+    # Configure a local cache
+    local_cache = os.path.join(str(tmpdir), "cache")
+    cli.configure({"cachedir": local_cache})
+
+    with create_artifact_share(os.path.join(str(tmpdir), "artifactshare")) as 
share:
+
+        cli.configure({"artifacts": {"servers": [{"url": share.repo}]}})
+
+        # Check the element and its dependencies have not been built locally 
and are not existing in the remote cache
+        for component in sorted(expected_digests.keys()):
+            assert cli.get_element_state(project, component) == "buildable"
+            assert_not_shared(cli, share, project, component)
+
+        # Check the element and its dependencies have no artifact digest
+        result = cli.run(project=project, silent=True, args=["show", 
"--format", "%{name},%{artifact-cas-digest}", target])
+        result.assert_success()
+
+        digests = dict(line.split(",", 2) for line in 
result.output.splitlines())

Review Comment:
   I feel this is over engineered, you're testing a single element each time.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to