diff options
Diffstat (limited to 'tests/sourcecache/source-checkout.py')
-rw-r--r-- | tests/sourcecache/source-checkout.py | 74 |
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) |