From 478e5c47ac96bbe165c4f2908f48754d4495804c Mon Sep 17 00:00:00 2001 From: Valentin David Date: Mon, 11 Feb 2019 18:51:20 +0100 Subject: buildstream/_cas/cascache.py: Set 0644 rights to pulled files This was broken by 5ef19a0b31df84caed1e41719ef7ea5c6bd8a8bc. --- tests/frontend/pull.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'tests') diff --git a/tests/frontend/pull.py b/tests/frontend/pull.py index 9579d9f27..2555355d3 100644 --- a/tests/frontend/pull.py +++ b/tests/frontend/pull.py @@ -1,5 +1,6 @@ import os import shutil +import stat import pytest from buildstream.plugintestutils import cli from tests.testutils import create_artifact_share, generate_junction @@ -462,3 +463,74 @@ def test_build_remote_option(caplog, cli, tmpdir, datafiles): assert shareproject.repo not in result.stderr assert shareuser.repo not in result.stderr assert sharecli.repo in result.stderr + + +@pytest.mark.datafiles(DATA_DIR) +def test_pull_access_rights(caplog, cli, tmpdir, datafiles): + project = str(datafiles) + checkout = os.path.join(str(tmpdir), 'checkout') + + # Work-around datafiles not preserving mode + os.chmod(os.path.join(project, 'files/bin-files/usr/bin/hello'), 0o0755) + + # We need a big file that does not go into a batch to test a different + # code path + os.makedirs(os.path.join(project, 'files/dev-files/usr/share'), exist_ok=True) + with open(os.path.join(project, 'files/dev-files/usr/share/big-file'), 'w') as f: + buf = ' ' * 4096 + for _ in range(1024): + f.write(buf) + + with create_artifact_share(os.path.join(str(tmpdir), 'artifactshare')) as share: + + cli.configure({ + 'artifacts': {'url': share.repo, 'push': True} + }) + result = cli.run(project=project, args=['build', 'compose-all.bst']) + result.assert_success() + + result = cli.run(project=project, + args=['artifact', 'checkout', + '--hardlinks', '--no-integrate', + 'compose-all.bst', + '--directory', checkout]) + result.assert_success() + + st = os.lstat(os.path.join(checkout, 'usr/include/pony.h')) + assert stat.S_ISREG(st.st_mode) + assert stat.S_IMODE(st.st_mode) == 0o0644 + + st = os.lstat(os.path.join(checkout, 'usr/bin/hello')) + assert stat.S_ISREG(st.st_mode) + assert stat.S_IMODE(st.st_mode) == 0o0755 + + st = os.lstat(os.path.join(checkout, 'usr/share/big-file')) + assert stat.S_ISREG(st.st_mode) + assert stat.S_IMODE(st.st_mode) == 0o0644 + + shutil.rmtree(checkout) + + artifacts = os.path.join(cli.directory, 'artifacts') + shutil.rmtree(artifacts) + + result = cli.run(project=project, args=['artifact', 'pull', 'compose-all.bst']) + result.assert_success() + + result = cli.run(project=project, + args=['artifact', 'checkout', + '--hardlinks', '--no-integrate', + 'compose-all.bst', + '--directory', checkout]) + result.assert_success() + + st = os.lstat(os.path.join(checkout, 'usr/include/pony.h')) + assert stat.S_ISREG(st.st_mode) + assert stat.S_IMODE(st.st_mode) == 0o0644 + + st = os.lstat(os.path.join(checkout, 'usr/bin/hello')) + assert stat.S_ISREG(st.st_mode) + assert stat.S_IMODE(st.st_mode) == 0o0755 + + st = os.lstat(os.path.join(checkout, 'usr/share/big-file')) + assert stat.S_ISREG(st.st_mode) + assert stat.S_IMODE(st.st_mode) == 0o0644 -- cgit v1.2.1