From 4a300a248864588ef3204a76fc0a26a632184372 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Sat, 4 Nov 2023 12:57:53 +0300 Subject: [PATCH] gh-108303: Move `zip` and `tar` archives to `Lib/test/archivetestdata` (#111549) --- .../{ziptestdata => archivetestdata}/README.md | 15 ++++++++------- .../exe_with_z64 | Bin .../exe_with_zip | Bin .../{ziptestdata => archivetestdata}/header.sh | 0 Lib/test/{ => archivetestdata}/recursion.tar | Bin .../testdata_module_inside_zip.py | 0 Lib/test/{ => archivetestdata}/testtar.tar | Bin Lib/test/{ => archivetestdata}/testtar.tar.xz | Bin .../{ => archivetestdata}/zip_cp437_header.zip | Bin Lib/test/{ => archivetestdata}/zipdir.zip | Bin Lib/test/test_contextlib.py | 2 +- Lib/test/test_tarfile.py | 12 ++++++------ Lib/test/test_zipfile/test_core.py | 14 +++++++------- Makefile.pre.in | 4 ++-- 14 files changed, 24 insertions(+), 23 deletions(-) rename Lib/test/{ziptestdata => archivetestdata}/README.md (76%) rename Lib/test/{ziptestdata => archivetestdata}/exe_with_z64 (100%) rename Lib/test/{ziptestdata => archivetestdata}/exe_with_zip (100%) rename Lib/test/{ziptestdata => archivetestdata}/header.sh (100%) rename Lib/test/{ => archivetestdata}/recursion.tar (100%) rename Lib/test/{ziptestdata => archivetestdata}/testdata_module_inside_zip.py (100%) rename Lib/test/{ => archivetestdata}/testtar.tar (100%) rename Lib/test/{ => archivetestdata}/testtar.tar.xz (100%) rename Lib/test/{ => archivetestdata}/zip_cp437_header.zip (100%) rename Lib/test/{ => archivetestdata}/zipdir.zip (100%) diff --git a/Lib/test/ziptestdata/README.md b/Lib/test/archivetestdata/README.md similarity index 76% rename from Lib/test/ziptestdata/README.md rename to Lib/test/archivetestdata/README.md index 00d96d445bf543f..7b555fa32765bfc 100644 --- a/Lib/test/ziptestdata/README.md +++ b/Lib/test/archivetestdata/README.md @@ -1,21 +1,23 @@ -# Test data for `test_zipfile` +# Test data for `test_zipfile`, `test_tarfile` (and even some others) -The test executables in this directory are created manually from header.sh and +## `test_zipfile` + +The test executables in this directory are created manually from `header.sh` and the `testdata_module_inside_zip.py` file. You must have Info-ZIP's zip utility installed (`apt install zip` on Debian). -## Purpose +### Purpose of `exe_with_zip` and `exe_with_z64` These are used to test executable files with an appended zipfile, in a scenario where the executable is _not_ a Python interpreter itself so our automatic zipimport machinery (that'd look for `__main__.py`) is not being used. -## Updating the test executables +### Updating the test executables If you update header.sh or the testdata_module_inside_zip.py file, rerun the commands below. These are expected to be rarely changed, if ever. -### Standard old format (2.0) zip file +#### Standard old format (2.0) zip file ``` zip -0 zip2.zip testdata_module_inside_zip.py @@ -23,7 +25,7 @@ cat header.sh zip2.zip >exe_with_zip rm zip2.zip ``` -### Modern format (4.5) zip64 file +#### Modern format (4.5) zip64 file Redirecting from stdin forces Info-ZIP's zip tool to create a zip64. @@ -32,4 +34,3 @@ zip -0 zip64.zip cat header.sh zip64.zip >exe_with_z64 rm zip64.zip ``` - diff --git a/Lib/test/ziptestdata/exe_with_z64 b/Lib/test/archivetestdata/exe_with_z64 similarity index 100% rename from Lib/test/ziptestdata/exe_with_z64 rename to Lib/test/archivetestdata/exe_with_z64 diff --git a/Lib/test/ziptestdata/exe_with_zip b/Lib/test/archivetestdata/exe_with_zip similarity index 100% rename from Lib/test/ziptestdata/exe_with_zip rename to Lib/test/archivetestdata/exe_with_zip diff --git a/Lib/test/ziptestdata/header.sh b/Lib/test/archivetestdata/header.sh similarity index 100% rename from Lib/test/ziptestdata/header.sh rename to Lib/test/archivetestdata/header.sh diff --git a/Lib/test/recursion.tar b/Lib/test/archivetestdata/recursion.tar similarity index 100% rename from Lib/test/recursion.tar rename to Lib/test/archivetestdata/recursion.tar diff --git a/Lib/test/ziptestdata/testdata_module_inside_zip.py b/Lib/test/archivetestdata/testdata_module_inside_zip.py similarity index 100% rename from Lib/test/ziptestdata/testdata_module_inside_zip.py rename to Lib/test/archivetestdata/testdata_module_inside_zip.py diff --git a/Lib/test/testtar.tar b/Lib/test/archivetestdata/testtar.tar similarity index 100% rename from Lib/test/testtar.tar rename to Lib/test/archivetestdata/testtar.tar diff --git a/Lib/test/testtar.tar.xz b/Lib/test/archivetestdata/testtar.tar.xz similarity index 100% rename from Lib/test/testtar.tar.xz rename to Lib/test/archivetestdata/testtar.tar.xz diff --git a/Lib/test/zip_cp437_header.zip b/Lib/test/archivetestdata/zip_cp437_header.zip similarity index 100% rename from Lib/test/zip_cp437_header.zip rename to Lib/test/archivetestdata/zip_cp437_header.zip diff --git a/Lib/test/zipdir.zip b/Lib/test/archivetestdata/zipdir.zip similarity index 100% rename from Lib/test/zipdir.zip rename to Lib/test/archivetestdata/zipdir.zip diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index 3dad2567015e249..e32a091fdd1c92a 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -1318,7 +1318,7 @@ def test_simple(self): def test_reentrant(self): old_cwd = os.getcwd() target1 = self.make_relative_path('data') - target2 = self.make_relative_path('ziptestdata') + target2 = self.make_relative_path('archivetestdata') self.assertNotIn(old_cwd, (target1, target2)) chdir1, chdir2 = chdir(target1), chdir(target2) diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index cc26da05daeafc7..761560bfbf8b536 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -43,7 +43,7 @@ def sha256sum(data): TEMPDIR = os.path.abspath(os_helper.TESTFN) + "-tardir" tarextdir = TEMPDIR + '-extract-test' -tarname = support.findfile("testtar.tar") +tarname = support.findfile("testtar.tar", subdir="archivetestdata") gzipname = os.path.join(TEMPDIR, "testtar.tar.gz") bz2name = os.path.join(TEMPDIR, "testtar.tar.bz2") xzname = os.path.join(TEMPDIR, "testtar.tar.xz") @@ -491,7 +491,7 @@ def test_length_zero_header(self): # bpo-39017 (CVE-2019-20907): reading a zero-length header should fail # with an exception with self.assertRaisesRegex(tarfile.ReadError, "file could not be opened successfully"): - with tarfile.open(support.findfile('recursion.tar')) as tar: + with tarfile.open(support.findfile('recursion.tar', subdir='archivetestdata')): pass def test_extractfile_name(self): @@ -2565,7 +2565,7 @@ def test__all__(self): support.check__all__(self, tarfile, not_exported=not_exported) def test_useful_error_message_when_modules_missing(self): - fname = os.path.join(os.path.dirname(__file__), 'testtar.tar.xz') + fname = os.path.join(os.path.dirname(__file__), 'archivetestdata', 'testtar.tar.xz') with self.assertRaises(tarfile.ReadError) as excinfo: error = tarfile.CompressionError('lzma module is not available'), with unittest.mock.patch.object(tarfile.TarFile, 'xzopen', side_effect=error): @@ -2630,7 +2630,7 @@ def test_test_command_verbose(self): self.assertIn(b'is a tar archive.\n', out) def test_test_command_invalid_file(self): - zipname = support.findfile('zipdir.zip') + zipname = support.findfile('zipdir.zip', subdir='archivetestdata') rc, out, err = self.tarfilecmd_failure('-t', zipname) self.assertIn(b' is not a tar archive.', err) self.assertEqual(out, b'') @@ -2672,7 +2672,7 @@ def test_list_command_verbose(self): self.assertEqual(out, expected) def test_list_command_invalid_file(self): - zipname = support.findfile('zipdir.zip') + zipname = support.findfile('zipdir.zip', subdir='archivetestdata') rc, out, err = self.tarfilecmd_failure('-l', zipname) self.assertIn(b' is not a tar archive.', err) self.assertEqual(out, b'') @@ -2797,7 +2797,7 @@ def test_extract_command_different_directory(self): os_helper.rmtree(tarextdir) def test_extract_command_invalid_file(self): - zipname = support.findfile('zipdir.zip') + zipname = support.findfile('zipdir.zip', subdir='archivetestdata') with os_helper.temp_cwd(tarextdir): rc, out, err = self.tarfilecmd_failure('-e', zipname) self.assertIn(b' is not a tar archive.', err) diff --git a/Lib/test/test_zipfile/test_core.py b/Lib/test/test_zipfile/test_core.py index fb6b0b3e23d75e1..a51764b92973630 100644 --- a/Lib/test/test_zipfile/test_core.py +++ b/Lib/test/test_zipfile/test_core.py @@ -1754,7 +1754,7 @@ def test_unsupported_version(self): @requires_zlib() def test_read_unicode_filenames(self): # bug #10801 - fname = findfile('zip_cp437_header.zip') + fname = findfile('zip_cp437_header.zip', subdir='archivetestdata') with zipfile.ZipFile(fname) as zipfp: for name in zipfp.namelist(): zipfp.open(name).close() @@ -2804,7 +2804,7 @@ def setUp(self): os.mkdir(TESTFN2) def test_extract_dir(self): - with zipfile.ZipFile(findfile("zipdir.zip")) as zipf: + with zipfile.ZipFile(findfile("zipdir.zip", subdir="archivetestdata")) as zipf: zipf.extractall(TESTFN2) self.assertTrue(os.path.isdir(os.path.join(TESTFN2, "a"))) self.assertTrue(os.path.isdir(os.path.join(TESTFN2, "a", "b"))) @@ -2973,7 +2973,7 @@ def test_bad_use(self): self.assertNotEqual(err.strip(), b'') def test_test_command(self): - zip_name = findfile('zipdir.zip') + zip_name = findfile('zipdir.zip', subdir='archivetestdata') for opt in '-t', '--test': out = self.zipfilecmd(opt, zip_name) self.assertEqual(out.rstrip(), b'Done testing') @@ -2982,7 +2982,7 @@ def test_test_command(self): self.assertEqual(out, b'') def test_list_command(self): - zip_name = findfile('zipdir.zip') + zip_name = findfile('zipdir.zip', subdir='archivetestdata') t = io.StringIO() with zipfile.ZipFile(zip_name, 'r') as tf: tf.printdir(t) @@ -3015,7 +3015,7 @@ def test_create_command(self): unlink(TESTFN2) def test_extract_command(self): - zip_name = findfile('zipdir.zip') + zip_name = findfile('zipdir.zip', subdir='archivetestdata') for opt in '-e', '--extract': with temp_dir() as extdir: out = self.zipfilecmd(opt, zip_name, extdir) @@ -3036,8 +3036,8 @@ class TestExecutablePrependedZip(unittest.TestCase): """Test our ability to open zip files with an executable prepended.""" def setUp(self): - self.exe_zip = findfile('exe_with_zip', subdir='ziptestdata') - self.exe_zip64 = findfile('exe_with_z64', subdir='ziptestdata') + self.exe_zip = findfile('exe_with_zip', subdir='archivetestdata') + self.exe_zip64 = findfile('exe_with_z64', subdir='archivetestdata') def _test_zip_works(self, name): # bpo28494 sanity check: ensure is_zipfile works on these. diff --git a/Makefile.pre.in b/Makefile.pre.in index 2950d87700ed5e6..20f2f6b2ca6731c 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -2169,6 +2169,7 @@ LIBSUBDIRS= asyncio \ TESTSUBDIRS= idlelib/idle_test \ test \ test/audiodata \ + test/archivetestdata \ test/certdata \ test/certdata/capath \ test/cjkencodings \ @@ -2283,8 +2284,7 @@ TESTSUBDIRS= idlelib/idle_test \ test/tracedmodules \ test/typinganndata \ test/xmltestdata \ - test/xmltestdata/c14n-20 \ - test/ziptestdata + test/xmltestdata/c14n-20 COMPILEALL_OPTS=-j0