You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by gi...@apache.org on 2020/12/29 13:14:20 UTC

[buildstream] 02/02: tar.py: Add test for a tarball containing a read-only dir

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch jennis/read_only_dir_in_tarball
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 66e5535eb5b9684832e0497e315ba915a10a973b
Author: James Ennis <ja...@codethink.co.uk>
AuthorDate: Thu Aug 23 13:34:32 2018 +0100

    tar.py: Add test for a tarball containing a read-only dir
---
 tests/sources/tar.py | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/tests/sources/tar.py b/tests/sources/tar.py
index fb02de3..687bd67 100644
--- a/tests/sources/tar.py
+++ b/tests/sources/tar.py
@@ -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,27 @@ 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 breaks
+@pytest.mark.datafiles(os.path.join(DATA_DIR, 'read-only'))
+def test_read_only_dir(cli, tmpdir, datafiles, srcdir):
+    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()