summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2018-12-20 11:03:52 +0100
committerJürg Billeter <j@bitron.ch>2018-12-20 11:07:20 +0100
commitb325989ef3817ef265b3f80deca67815cb19bad1 (patch)
treecc882088ccb44dbbb30720699de245d051c6d8da
parent7a102144e0d3728d03b6102dd94a1f5f4ade60fe (diff)
downloadbuildstream-b325989ef3817ef265b3f80deca67815cb19bad1.tar.gz
tests/sources: Test that fetch() is not called for cached sources
-rw-r--r--tests/sources/no-fetch-cached/files/file1
-rw-r--r--tests/sources/no-fetch-cached/plugins/sources/always_cached.py45
-rw-r--r--tests/sources/no-fetch-cached/project.conf8
-rw-r--r--tests/sources/no_fetch_cached.py44
4 files changed, 98 insertions, 0 deletions
diff --git a/tests/sources/no-fetch-cached/files/file b/tests/sources/no-fetch-cached/files/file
new file mode 100644
index 000000000..980a0d5f1
--- /dev/null
+++ b/tests/sources/no-fetch-cached/files/file
@@ -0,0 +1 @@
+Hello World!
diff --git a/tests/sources/no-fetch-cached/plugins/sources/always_cached.py b/tests/sources/no-fetch-cached/plugins/sources/always_cached.py
new file mode 100644
index 000000000..fa143a020
--- /dev/null
+++ b/tests/sources/no-fetch-cached/plugins/sources/always_cached.py
@@ -0,0 +1,45 @@
+"""
+always_cached
+=============
+
+This is a test source plugin that is always cached.
+Used to test that BuildStream core does not call fetch() for cached sources.
+
+"""
+
+from buildstream import Consistency, Source
+
+
+class AlwaysCachedSource(Source):
+
+ def configure(self, node):
+ pass
+
+ def preflight(self):
+ pass
+
+ def get_unique_key(self):
+ return None
+
+ def get_consistency(self):
+ return Consistency.CACHED
+
+ def load_ref(self, node):
+ pass
+
+ def get_ref(self):
+ return None
+
+ def set_ref(self, ref, node):
+ pass
+
+ def fetch(self):
+ # Source is always cached, so fetch() should never be called
+ assert False
+
+ def stage(self, directory):
+ pass
+
+
+def setup():
+ return AlwaysCachedSource
diff --git a/tests/sources/no-fetch-cached/project.conf b/tests/sources/no-fetch-cached/project.conf
new file mode 100644
index 000000000..af0cec15c
--- /dev/null
+++ b/tests/sources/no-fetch-cached/project.conf
@@ -0,0 +1,8 @@
+# Project with local source plugins
+name: no-fetch-cached
+
+plugins:
+- origin: local
+ path: plugins/sources
+ sources:
+ always_cached: 0
diff --git a/tests/sources/no_fetch_cached.py b/tests/sources/no_fetch_cached.py
new file mode 100644
index 000000000..d2880f628
--- /dev/null
+++ b/tests/sources/no_fetch_cached.py
@@ -0,0 +1,44 @@
+import os
+import pytest
+
+from buildstream import _yaml
+
+from tests.testutils import cli, create_repo
+from tests.testutils.site import HAVE_GIT
+
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ 'no-fetch-cached'
+)
+
+
+##################################################################
+# Tests #
+##################################################################
+# Test that fetch() is not called for cached sources
+@pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
+@pytest.mark.datafiles(DATA_DIR)
+def test_no_fetch_cached(cli, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+
+ # Create the repo from 'files' subdir
+ repo = create_repo('git', str(tmpdir))
+ ref = repo.create(os.path.join(project, 'files'))
+
+ # Write out test target with a cached and a non-cached source
+ element = {
+ 'kind': 'import',
+ 'sources': [
+ repo.source_config(ref=ref),
+ {
+ 'kind': 'always_cached'
+ }
+ ]
+ }
+ _yaml.dump(element, os.path.join(project, 'target.bst'))
+
+ # Test fetch of target with a cached and a non-cached source
+ result = cli.run(project=project, args=[
+ 'source', 'fetch', 'target.bst'
+ ])
+ result.assert_success()