summaryrefslogtreecommitdiff
path: root/tests/sourcecache/source-checkout.py
diff options
context:
space:
mode:
authorRaoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>2019-02-28 15:31:29 +0000
committerbst-marge-bot <marge-bot@buildstream.build>2019-03-13 17:40:57 +0000
commit8e00cabb1d895625b3dbc33c72628a4e583d0a1b (patch)
tree94caa9e0d64947227eb709c2114653ab62a98d9e /tests/sourcecache/source-checkout.py
parenta37c133a5c728559776a65c5504497af626e3dc9 (diff)
downloadbuildstream-raoul/440-source-cache.tar.gz
Source cache testsraoul/440-source-cache
Few different source cache tests have been to check that sources are staged into the local CAS and fetched where appropriate Part of #440
Diffstat (limited to 'tests/sourcecache/source-checkout.py')
-rw-r--r--tests/sourcecache/source-checkout.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/sourcecache/source-checkout.py b/tests/sourcecache/source-checkout.py
new file mode 100644
index 000000000..f526dc586
--- /dev/null
+++ b/tests/sourcecache/source-checkout.py
@@ -0,0 +1,74 @@
+#
+# Copyright (C) 2018 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
+#
+# Authors:
+# Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>
+#
+import os
+import pytest
+import shutil
+
+from buildstream._exceptions import ErrorDomain
+from buildstream.plugintestutils.runcli import cli
+
+from tests.testutils.element_generators import create_element_size
+
+DATA_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_source_checkout(tmpdir, datafiles, cli):
+ project_dir = os.path.join(str(tmpdir), 'project')
+ element_path = 'elements'
+ cache_dir = os.path.join(str(tmpdir), 'cache')
+ source_dir = os.path.join(cache_dir, 'sources')
+
+ cli.configure({
+ 'cachedir': cache_dir,
+ })
+ target_dir = os.path.join(str(tmpdir), 'target')
+
+ repo = create_element_size('target.bst', project_dir, element_path, [], 100000)
+
+ # without fetch it should fail
+ res = cli.run(project=project_dir, args=['source', 'checkout', 'target.bst', target_dir])
+ res.assert_main_error(ErrorDomain.PIPELINE, "uncached-sources")
+
+ # fetch and check it works
+ res = cli.run(project=project_dir,
+ args=['source', 'checkout', '--fetch', 'target.bst',
+ target_dir])
+ res.assert_success()
+ assert "Fetching from" in res.stderr
+
+ # remove the directory and check source checkout works with sources only in
+ # the CAS
+ shutil.rmtree(repo.repo)
+ shutil.rmtree(target_dir)
+ shutil.rmtree(source_dir)
+
+ res = cli.run(project=project_dir,
+ args=['source', 'checkout', 'target.bst', target_dir])
+ res.assert_success()
+ assert "Fetching from" not in res.stderr
+
+ # remove the CAS and check it doesn't work again
+ shutil.rmtree(target_dir)
+ shutil.rmtree(os.path.join(cache_dir, 'cas'))
+
+ res = cli.run(project=project_dir,
+ args=['source', 'checkout', '--fetch', 'target.bst', target_dir])
+ res.assert_task_error(ErrorDomain.PLUGIN, None)