89 lines
3.3 KiB
Diff
89 lines
3.3 KiB
Diff
From e5be32d6eb880c9563fde2f23cc31b7e449719ec Mon Sep 17 00:00:00 2001
|
|
From: Victor Stinner <vstinner@python.org>
|
|
Date: Wed, 24 Jan 2024 18:14:14 +0100
|
|
Subject: [PATCH] bpo-46623: Skip two test_zlib tests on s390x (GH-31096)
|
|
|
|
Skip test_pair() and test_speech128() of test_zlib on s390x since
|
|
they fail if zlib uses the s390x hardware accelerator.
|
|
---
|
|
Lib/test/test_zlib.py | 32 +++++++++++++++++++
|
|
.../2022-02-03-09-45-26.bpo-46623.vxzuhV.rst | 2 ++
|
|
2 files changed, 34 insertions(+)
|
|
create mode 100644 Misc/NEWS.d/next/Tests/2022-02-03-09-45-26.bpo-46623.vxzuhV.rst
|
|
|
|
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py
|
|
index 02509cd..f3654c9 100644
|
|
--- a/Lib/test/test_zlib.py
|
|
+++ b/Lib/test/test_zlib.py
|
|
@@ -2,6 +2,7 @@ import unittest
|
|
from test import support
|
|
import binascii
|
|
import copy
|
|
+import os
|
|
import pickle
|
|
import random
|
|
import sys
|
|
@@ -16,6 +17,35 @@ requires_Decompress_copy = unittest.skipUnless(
|
|
hasattr(zlib.decompressobj(), "copy"),
|
|
'requires Decompress.copy()')
|
|
|
|
+# bpo-46623: On s390x, when a hardware accelerator is used, using different
|
|
+# ways to compress data with zlib can produce different compressed data.
|
|
+# Simplified test_pair() code:
|
|
+#
|
|
+# def func1(data):
|
|
+# return zlib.compress(data)
|
|
+#
|
|
+# def func2(data)
|
|
+# co = zlib.compressobj()
|
|
+# x1 = co.compress(data)
|
|
+# x2 = co.flush()
|
|
+# return x1 + x2
|
|
+#
|
|
+# On s390x if zlib uses a hardware accelerator, func1() creates a single
|
|
+# "final" compressed block whereas func2() produces 3 compressed blocks (the
|
|
+# last one is a final block). On other platforms with no accelerator, func1()
|
|
+# and func2() produce the same compressed data made of a single (final)
|
|
+# compressed block.
|
|
+#
|
|
+# Only the compressed data is different, the decompression returns the original
|
|
+# data:
|
|
+#
|
|
+# zlib.decompress(func1(data)) == zlib.decompress(func2(data)) == data
|
|
+#
|
|
+# Make the assumption that s390x always has an accelerator to simplify the skip
|
|
+# condition. Windows doesn't have os.uname() but it doesn't support s390x.
|
|
+skip_on_s390x = unittest.skipIf(hasattr(os, 'uname') and os.uname().machine == 's390x',
|
|
+ 'skipped on s390x')
|
|
+
|
|
|
|
class VersionTestCase(unittest.TestCase):
|
|
|
|
@@ -174,6 +204,7 @@ class CompressTestCase(BaseCompressTestCase, unittest.TestCase):
|
|
bufsize=zlib.DEF_BUF_SIZE),
|
|
HAMLET_SCENE)
|
|
|
|
+ @skip_on_s390x
|
|
def test_speech128(self):
|
|
# compress more data
|
|
data = HAMLET_SCENE * 128
|
|
@@ -225,6 +256,7 @@ class CompressTestCase(BaseCompressTestCase, unittest.TestCase):
|
|
|
|
class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
|
|
# Test compression object
|
|
+ @skip_on_s390x
|
|
def test_pair(self):
|
|
# straightforward compress/decompress objects
|
|
datasrc = HAMLET_SCENE * 128
|
|
diff --git a/Misc/NEWS.d/next/Tests/2022-02-03-09-45-26.bpo-46623.vxzuhV.rst b/Misc/NEWS.d/next/Tests/2022-02-03-09-45-26.bpo-46623.vxzuhV.rst
|
|
new file mode 100644
|
|
index 0000000..be085c0
|
|
--- /dev/null
|
|
+++ b/Misc/NEWS.d/next/Tests/2022-02-03-09-45-26.bpo-46623.vxzuhV.rst
|
|
@@ -0,0 +1,2 @@
|
|
+Skip test_pair() and test_speech128() of test_zlib on s390x since they fail
|
|
+if zlib uses the s390x hardware accelerator. Patch by Victor Stinner.
|
|
--
|
|
2.43.0
|
|
|