summaryrefslogtreecommitdiff
path: root/test/zlib/test_zlib.rb
diff options
context:
space:
mode:
authorJun Aruga <jaruga@ruby-lang.org>2023-09-25 11:55:17 -0400
committergit <svn-admin@ruby-lang.org>2023-09-25 17:59:04 +0000
commit295862e22ad88b3c7204df18b9b6a8560a1896f9 (patch)
tree29beb7cd7220066ddc530ba5dd057d6537b4b837 /test/zlib/test_zlib.rb
parentca2594535dd314086b5599fcd39cd80f863d80f4 (diff)
[ruby/zlib] Workaround: Fix test failures on Ubuntu jammy s390x.
This commit fixes the test failures on the zlib in Ubuntu jammy s390x. According to the <https://packages.ubuntu.com/jammy-updates/zlib1g> - `zlib_1.2.11.dfsg-2ubuntu9.2.debian.tar.xz`, the zlib deb package is applying the patch 410.patch (madler/zlib#410), and configured by `./configure --dfltcc` on Ubuntu jammy s390x. The `--dfltcc` is to enable the deflate algorithm in hardware. It produces a different (but still valid) compressed byte stream, and causes the test failures in ruby/zlib. As a workaround, set the environment variable `DFLTCC=0` disabling the implementation in zlib on s390x to the failing tests. Note we need to test in a child Ruby process with `assert_separately` to test on the `DFLTCC=0` set by the parent Ruby process. https://github.com/ruby/zlib/commit/9f3b9c470c
Diffstat (limited to 'test/zlib/test_zlib.rb')
-rw-r--r--test/zlib/test_zlib.rb148
1 files changed, 84 insertions, 64 deletions
diff --git a/test/zlib/test_zlib.rb b/test/zlib/test_zlib.rb
index 779c583424..ede09b9d8c 100644
--- a/test/zlib/test_zlib.rb
+++ b/test/zlib/test_zlib.rb
@@ -12,6 +12,10 @@ rescue LoadError
end
if defined? Zlib
+ child_env = {}
+ child_env['DFLTCC'] = '0' if RUBY_PLATFORM =~ /s390x/
+ Zlib::CHILD_ENV = child_env.freeze
+
class TestZlibDeflate < Test::Unit::TestCase
def test_initialize
z = Zlib::Deflate.new
@@ -44,59 +48,63 @@ if defined? Zlib
end
def test_deflate_chunked
- original = ''.dup
- chunks = []
- r = Random.new 0
-
- z = Zlib::Deflate.new
-
- 2.times do
- input = r.bytes(20000)
- original << input
- z.deflate(input) do |chunk|
- chunks << chunk
+ assert_separately([Zlib::CHILD_ENV, '-rzlib'], <<~'end;')
+ original = ''.dup
+ chunks = []
+ r = Random.new 0
+
+ z = Zlib::Deflate.new
+
+ 2.times do
+ input = r.bytes(20000)
+ original << input
+ z.deflate(input) do |chunk|
+ chunks << chunk
+ end
end
- end
- assert_equal [16384, 16384],
- chunks.map { |chunk| chunk.length }
+ assert_equal [16384, 16384],
+ chunks.map { |chunk| chunk.length }
- final = z.finish
+ final = z.finish
- assert_equal 7253, final.length
+ assert_equal 7253, final.length
- chunks << final
- all = chunks.join
+ chunks << final
+ all = chunks.join
- inflated = Zlib.inflate all
+ inflated = Zlib.inflate all
- assert_equal original, inflated
+ assert_equal original, inflated
+ end;
end
def test_deflate_chunked_break
- chunks = []
- r = Random.new 0
+ assert_separately([Zlib::CHILD_ENV, '-rzlib'], <<~'end;')
+ chunks = []
+ r = Random.new 0
- z = Zlib::Deflate.new
+ z = Zlib::Deflate.new
- input = r.bytes(20000)
- z.deflate(input) do |chunk|
- chunks << chunk
- break
- end
+ input = r.bytes(20000)
+ z.deflate(input) do |chunk|
+ chunks << chunk
+ break
+ end
- assert_equal [16384], chunks.map { |chunk| chunk.length }
+ assert_equal [16384], chunks.map { |chunk| chunk.length }
- final = z.finish
+ final = z.finish
- assert_equal 3632, final.length
+ assert_equal 3632, final.length
- all = chunks.join
- all << final
+ all = chunks.join
+ all << final
- original = Zlib.inflate all
+ original = Zlib.inflate all
- assert_equal input, original
+ assert_equal input, original
+ end;
end
def test_addstr
@@ -952,30 +960,32 @@ if defined? Zlib
end
def test_unused2
- zio = StringIO.new
+ assert_separately([Zlib::CHILD_ENV, '-rzlib', '-rstringio'], <<~'end;')
+ zio = StringIO.new
- io = Zlib::GzipWriter.new zio
- io.write 'aaaa'
- io.finish
+ io = Zlib::GzipWriter.new zio
+ io.write 'aaaa'
+ io.finish
- io = Zlib::GzipWriter.new zio
- io.write 'bbbb'
- io.finish
+ io = Zlib::GzipWriter.new zio
+ io.write 'bbbb'
+ io.finish
- zio.rewind
+ zio.rewind
- io = Zlib::GzipReader.new zio
- assert_equal('aaaa', io.read)
- unused = io.unused
- assert_equal(24, unused.bytesize)
- io.finish
+ io = Zlib::GzipReader.new zio
+ assert_equal('aaaa', io.read)
+ unused = io.unused
+ assert_equal(24, unused.bytesize)
+ io.finish
- zio.pos -= unused.length
+ zio.pos -= unused.length
- io = Zlib::GzipReader.new zio
- assert_equal('bbbb', io.read)
- assert_equal(nil, io.unused)
- io.finish
+ io = Zlib::GzipReader.new zio
+ assert_equal('bbbb', io.read)
+ assert_equal(nil, io.unused)
+ io.finish
+ end;
end
def test_read
@@ -1402,36 +1412,46 @@ if defined? Zlib
end
def test_deflate_stream
- r = Random.new 0
+ assert_separately([Zlib::CHILD_ENV, '-rzlib'], <<~'end;')
+ r = Random.new 0
- deflated = ''.dup
+ deflated = ''.dup
- Zlib.deflate(r.bytes(20000)) do |chunk|
- deflated << chunk
- end
+ Zlib.deflate(r.bytes(20000)) do |chunk|
+ deflated << chunk
+ end
- assert_equal 20016, deflated.length
+ assert_equal 20016, deflated.length
+ end;
end
def test_gzip
- actual = Zlib.gzip("foo".freeze)
- actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
- actual[9] = "\xff" # replace OS
- expected = %w[1f8b08000000000000ff4bcbcf07002165738c03000000].pack("H*")
- assert_equal expected, actual
+ assert_separately([Zlib::CHILD_ENV, '-rzlib'], <<~'end;')
+ actual = Zlib.gzip("foo".freeze)
+ actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
+ actual[9] = "\xff" # replace OS
+ expected = %w[1f8b08000000000000ff4bcbcf07002165738c03000000].pack("H*")
+ assert_equal expected, actual
+ end;
+ end
+ def test_gzip_level_0
actual = Zlib.gzip("foo".freeze, level: 0)
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
actual[9] = "\xff" # replace OS
expected = %w[1f8b08000000000000ff010300fcff666f6f2165738c03000000].pack("H*")
assert_equal expected, actual
+ end
+ def test_gzip_level_9
actual = Zlib.gzip("foo".freeze, level: 9)
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
actual[9] = "\xff" # replace OS
expected = %w[1f8b08000000000002ff4bcbcf07002165738c03000000].pack("H*")
assert_equal expected, actual
+ end
+ def test_gzip_level_9_filtered
actual = Zlib.gzip("foo".freeze, level: 9, strategy: Zlib::FILTERED)
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
actual[9] = "\xff" # replace OS