Skip to content

Commit

Permalink
skip two test_zlib tests failing on s390x
Browse files Browse the repository at this point in the history
Code is originally from gh#python/cpython!31096, it was released
upstream in 3.11.0.

Fixes: gh#python#90781
Fixes: bpo-46623
Patch: bpo-46623-skip-zlib-s390x.patch
  • Loading branch information
vstinner authored and mcepl committed Apr 4, 2024
1 parent d43fed4 commit 2873423
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
34 changes: 34 additions & 0 deletions Lib/test/test_zlib.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import unittest
from test import support
import binascii
import os
import pickle
import random
import sys
Expand All @@ -15,6 +16,37 @@
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 in ['s390x', 's390'],
'skipped on s390x')


class VersionTestCase(unittest.TestCase):

Expand Down Expand Up @@ -174,6 +206,7 @@ def test_keywords(self):
bufsize=zlib.DEF_BUF_SIZE),
HAMLET_SCENE)

@skip_on_s390x
def test_speech128(self):
# compress more data
data = HAMLET_SCENE * 128
Expand Down Expand Up @@ -225,6 +258,7 @@ def test_64bit_compress(self, size):

class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
# Test compression object
@skip_on_s390x
def test_pair(self):
# straightforward compress/decompress objects
datasrc = HAMLET_SCENE * 128
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit 2873423

Please sign in to comment.