Skip to content

Commit a7239af

Browse files
committed
bpo-26253: tarfile: add compresslevel unit tests
Check outcoming file headers when writing a compressed file.
1 parent 1995f6d commit a7239af

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

Lib/test/test_tarfile.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,74 @@ class Bz2StreamWriteTest(Bz2Test, StreamWriteTest):
14051405
class LzmaStreamWriteTest(LzmaTest, StreamWriteTest):
14061406
decompressor = lzma.LZMADecompressor if lzma else None
14071407

1408+
class _CompressedWriteTest(TarTest):
1409+
# This is not actually a standalone test.
1410+
# It does not inherit WriteTest because it only makes sense with gz,bz2
1411+
source = (b"And we move to Bristol where they have a special, " +
1412+
b"Very Silly candidate")
1413+
1414+
def _compressed_tar(self, compresslevel):
1415+
fobj = io.BytesIO()
1416+
with tarfile.open(tmpname, self.mode, fobj,
1417+
compresslevel=compresslevel) as tarfl:
1418+
tarfl.addfile(tarfile.TarInfo("foo"), io.BytesIO(self.source))
1419+
return fobj
1420+
1421+
def _test_bz2_header(self, compresslevel):
1422+
fobj = self._compressed_tar(compresslevel)
1423+
self.assertEqual(fobj.getvalue()[0:10],
1424+
b"BZh%d1AY&SY" % compresslevel)
1425+
1426+
def _test_gz_header(self, compresslevel):
1427+
fobj = self._compressed_tar(compresslevel)
1428+
self.assertEqual(fobj.getvalue()[:3], b"\x1f\x8b\x08")
1429+
1430+
class Bz2CompressWriteTest(Bz2Test, _CompressedWriteTest, unittest.TestCase):
1431+
prefix = "w:"
1432+
def test_compression_levels(self):
1433+
self._test_bz2_header(1)
1434+
self._test_bz2_header(5)
1435+
self._test_bz2_header(9)
1436+
1437+
class Bz2CompressStreamWriteTest(Bz2Test, _CompressedWriteTest,
1438+
unittest.TestCase):
1439+
prefix = "w|"
1440+
def test_compression_levels(self):
1441+
self._test_bz2_header(1)
1442+
self._test_bz2_header(5)
1443+
self._test_bz2_header(9)
1444+
1445+
class GzCompressWriteTest(GzipTest, _CompressedWriteTest, unittest.TestCase):
1446+
prefix = "w:"
1447+
def test_compression_levels(self):
1448+
self._test_gz_header(1)
1449+
self._test_gz_header(5)
1450+
self._test_gz_header(9)
1451+
1452+
class GzCompressStreamWriteTest(GzipTest, _CompressedWriteTest,
1453+
unittest.TestCase):
1454+
prefix = "w|"
1455+
def test_compression_levels(self):
1456+
self._test_gz_header(1)
1457+
self._test_gz_header(5)
1458+
self._test_gz_header(9)
1459+
1460+
class CompressLevelRaises(unittest.TestCase):
1461+
def test_compresslevel_wrong_modes(self):
1462+
compresslevel = 5
1463+
fobj = io.BytesIO()
1464+
with self.assertRaises(TypeError):
1465+
tarfile.open(tmpname, "w:", fobj, compresslevel=compresslevel)
1466+
1467+
def test_wrong_compresslevels(self):
1468+
# BZ2 checks that the compresslevel is in [1,9]. gz does not
1469+
fobj = io.BytesIO()
1470+
with self.assertRaises(ValueError):
1471+
tarfile.open(tmpname, "w:bz2", fobj, compresslevel=0)
1472+
with self.assertRaises(ValueError):
1473+
tarfile.open(tmpname, "w:bz2", fobj, compresslevel=10)
1474+
with self.assertRaises(ValueError):
1475+
tarfile.open(tmpname, "w|bz2", fobj, compresslevel=10)
14081476

14091477
class GNUWriteTest(unittest.TestCase):
14101478
# This testcase checks for correct creation of GNU Longname

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy