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.
This commit is contained in:
Victor Stinner 2022-02-25 00:32:02 +01:00 committed by GitHub
parent c9c178fdb1
commit 9475dc0b8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 0 deletions

View File

@ -3,6 +3,7 @@ from test import support
from test.support import import_helper
import binascii
import copy
import os
import pickle
import random
import sys
@ -18,6 +19,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):
@ -182,6 +212,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
@ -233,6 +264,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

View File

@ -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.