Skip to content
Snippets Groups Projects
Commit c9e34cbf authored by James Ennis's avatar James Ennis Committed by Jim MacArthur
Browse files

tar.py: Add test for a tarball containing a read-only dir

parent 78035f57
No related branches found
No related tags found
Loading
Pipeline #28537721 failed
......@@ -3,6 +3,7 @@ import pytest
import tarfile
import tempfile
import subprocess
from shutil import copyfile
from buildstream._exceptions import ErrorDomain
from buildstream import _yaml
......@@ -257,3 +258,33 @@ def test_stage_default_basedir_lzip(cli, tmpdir, datafiles, srcdir):
original_contents = list_dir_contents(original_dir)
checkout_contents = list_dir_contents(checkoutdir)
assert(checkout_contents == original_contents)
# Test that a tarball that contains a read only dir works
@pytest.mark.datafiles(os.path.join(DATA_DIR, 'read-only'))
def test_read_only_dir(cli, tmpdir, datafiles):
try:
project = os.path.join(datafiles.dirname, datafiles.basename)
generate_project(project, tmpdir)
# Get the tarball in tests/sources/tar/read-only/content
#
# NOTE that we need to do this because tarfile.open and tar.add()
# are packing the tar up with writeable files and dirs
tarball = os.path.join(str(datafiles), 'content', 'a.tar.gz')
if not os.path.exists(tarball):
raise FileNotFoundError('{} does not exist'.format(tarball))
copyfile(tarball, os.path.join(tmpdir, 'a.tar.gz'))
# Track, fetch, build, checkout
result = cli.run(project=project, args=['track', 'target.bst'])
result.assert_success()
result = cli.run(project=project, args=['fetch', 'target.bst'])
result.assert_success()
result = cli.run(project=project, args=['build', 'target.bst'])
result.assert_success()
finally:
# Make tmpdir deletable no matter what happens
print("Cleaning {}".format(tmpdir))
for dirpath, dnames, fnames in os.walk(tmpdir):
os.chmod(dirpath, 0o777)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment