mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
gh-132983: Add the compression.zstd
pacakge and tests (#133365)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Co-authored-by: Gregory P. Smith <greg@krypto.org> Co-authored-by: Tomas R. <tomas.roun8@gmail.com> Co-authored-by: Rogdham <contact@rogdham.net>
This commit is contained in:
parent
793402e217
commit
c273f59fb3
15 changed files with 3358 additions and 100 deletions
|
@ -38,6 +38,10 @@ try:
|
|||
import lzma
|
||||
except ImportError:
|
||||
lzma = None
|
||||
try:
|
||||
from compression import zstd
|
||||
except ImportError:
|
||||
zstd = None
|
||||
|
||||
def sha256sum(data):
|
||||
return sha256(data).hexdigest()
|
||||
|
@ -48,6 +52,7 @@ 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")
|
||||
zstname = os.path.join(TEMPDIR, "testtar.tar.zst")
|
||||
tmpname = os.path.join(TEMPDIR, "tmp.tar")
|
||||
dotlessname = os.path.join(TEMPDIR, "testtar")
|
||||
|
||||
|
@ -90,6 +95,12 @@ class LzmaTest:
|
|||
open = lzma.LZMAFile if lzma else None
|
||||
taropen = tarfile.TarFile.xzopen
|
||||
|
||||
@support.requires_zstd()
|
||||
class ZstdTest:
|
||||
tarname = zstname
|
||||
suffix = 'zst'
|
||||
open = zstd.ZstdFile if zstd else None
|
||||
taropen = tarfile.TarFile.zstopen
|
||||
|
||||
class ReadTest(TarTest):
|
||||
|
||||
|
@ -271,6 +282,8 @@ class Bz2UstarReadTest(Bz2Test, UstarReadTest):
|
|||
class LzmaUstarReadTest(LzmaTest, UstarReadTest):
|
||||
pass
|
||||
|
||||
class ZstdUstarReadTest(ZstdTest, UstarReadTest):
|
||||
pass
|
||||
|
||||
class ListTest(ReadTest, unittest.TestCase):
|
||||
|
||||
|
@ -375,6 +388,8 @@ class Bz2ListTest(Bz2Test, ListTest):
|
|||
class LzmaListTest(LzmaTest, ListTest):
|
||||
pass
|
||||
|
||||
class ZstdListTest(ZstdTest, ListTest):
|
||||
pass
|
||||
|
||||
class CommonReadTest(ReadTest):
|
||||
|
||||
|
@ -837,6 +852,8 @@ class Bz2MiscReadTest(Bz2Test, MiscReadTestBase, unittest.TestCase):
|
|||
class LzmaMiscReadTest(LzmaTest, MiscReadTestBase, unittest.TestCase):
|
||||
pass
|
||||
|
||||
class ZstdMiscReadTest(ZstdTest, MiscReadTestBase, unittest.TestCase):
|
||||
pass
|
||||
|
||||
class StreamReadTest(CommonReadTest, unittest.TestCase):
|
||||
|
||||
|
@ -909,6 +926,9 @@ class Bz2StreamReadTest(Bz2Test, StreamReadTest):
|
|||
class LzmaStreamReadTest(LzmaTest, StreamReadTest):
|
||||
pass
|
||||
|
||||
class ZstdStreamReadTest(ZstdTest, StreamReadTest):
|
||||
pass
|
||||
|
||||
class TarStreamModeReadTest(StreamModeTest, unittest.TestCase):
|
||||
|
||||
def test_stream_mode_no_cache(self):
|
||||
|
@ -925,6 +945,9 @@ class Bz2StreamModeReadTest(Bz2Test, TarStreamModeReadTest):
|
|||
class LzmaStreamModeReadTest(LzmaTest, TarStreamModeReadTest):
|
||||
pass
|
||||
|
||||
class ZstdStreamModeReadTest(ZstdTest, TarStreamModeReadTest):
|
||||
pass
|
||||
|
||||
class DetectReadTest(TarTest, unittest.TestCase):
|
||||
def _testfunc_file(self, name, mode):
|
||||
try:
|
||||
|
@ -986,6 +1009,8 @@ class Bz2DetectReadTest(Bz2Test, DetectReadTest):
|
|||
class LzmaDetectReadTest(LzmaTest, DetectReadTest):
|
||||
pass
|
||||
|
||||
class ZstdDetectReadTest(ZstdTest, DetectReadTest):
|
||||
pass
|
||||
|
||||
class GzipBrokenHeaderCorrectException(GzipTest, unittest.TestCase):
|
||||
"""
|
||||
|
@ -1666,6 +1691,8 @@ class Bz2WriteTest(Bz2Test, WriteTest):
|
|||
class LzmaWriteTest(LzmaTest, WriteTest):
|
||||
pass
|
||||
|
||||
class ZstdWriteTest(ZstdTest, WriteTest):
|
||||
pass
|
||||
|
||||
class StreamWriteTest(WriteTestBase, unittest.TestCase):
|
||||
|
||||
|
@ -1727,6 +1754,9 @@ class Bz2StreamWriteTest(Bz2Test, StreamWriteTest):
|
|||
class LzmaStreamWriteTest(LzmaTest, StreamWriteTest):
|
||||
decompressor = lzma.LZMADecompressor if lzma else None
|
||||
|
||||
class ZstdStreamWriteTest(ZstdTest, StreamWriteTest):
|
||||
decompressor = zstd.ZstdDecompressor if zstd else None
|
||||
|
||||
class _CompressedWriteTest(TarTest):
|
||||
# This is not actually a standalone test.
|
||||
# It does not inherit WriteTest because it only makes sense with gz,bz2
|
||||
|
@ -2042,6 +2072,14 @@ class LzmaCreateTest(LzmaTest, CreateTest):
|
|||
tobj.add(self.file_path)
|
||||
|
||||
|
||||
class ZstdCreateTest(ZstdTest, CreateTest):
|
||||
|
||||
# Unlike gz and bz2, zstd uses the level keyword instead of compresslevel.
|
||||
# It does not allow for level to be specified when reading.
|
||||
def test_create_with_level(self):
|
||||
with tarfile.open(tmpname, self.mode, level=1) as tobj:
|
||||
tobj.add(self.file_path)
|
||||
|
||||
class CreateWithXModeTest(CreateTest):
|
||||
|
||||
prefix = "x"
|
||||
|
@ -2523,6 +2561,8 @@ class Bz2AppendTest(Bz2Test, AppendTestBase, unittest.TestCase):
|
|||
class LzmaAppendTest(LzmaTest, AppendTestBase, unittest.TestCase):
|
||||
pass
|
||||
|
||||
class ZstdAppendTest(ZstdTest, AppendTestBase, unittest.TestCase):
|
||||
pass
|
||||
|
||||
class LimitsTest(unittest.TestCase):
|
||||
|
||||
|
@ -2835,7 +2875,7 @@ class CommandLineTest(unittest.TestCase):
|
|||
support.findfile('tokenize_tests-no-coding-cookie-'
|
||||
'and-utf8-bom-sig-only.txt',
|
||||
subdir='tokenizedata')]
|
||||
for filetype in (GzipTest, Bz2Test, LzmaTest):
|
||||
for filetype in (GzipTest, Bz2Test, LzmaTest, ZstdTest):
|
||||
if not filetype.open:
|
||||
continue
|
||||
try:
|
||||
|
@ -4257,7 +4297,7 @@ def setUpModule():
|
|||
data = fobj.read()
|
||||
|
||||
# Create compressed tarfiles.
|
||||
for c in GzipTest, Bz2Test, LzmaTest:
|
||||
for c in GzipTest, Bz2Test, LzmaTest, ZstdTest:
|
||||
if c.open:
|
||||
os_helper.unlink(c.tarname)
|
||||
testtarnames.append(c.tarname)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue