# HG changeset patch # User igerasim # Date 1382097980 -14400 # Node ID 95fcae9543b455d69e9664b7025d4af458a97a44 # Parent f1e58b9ff6cb0d66dc703bb9120712570e7ba3d9 8026756: Test java/util/zip/GZIP/GZIPInZip.java failed Reviewed-by: alanb diff -r f1e58b9ff6cb -r 95fcae9543b4 jdk/test/java/util/zip/GZIP/GZIPInZip.java --- a/jdk/test/java/util/zip/GZIP/GZIPInZip.java Fri Oct 18 13:45:54 2013 +0100 +++ b/jdk/test/java/util/zip/GZIP/GZIPInZip.java Fri Oct 18 16:06:20 2013 +0400 @@ -22,15 +22,14 @@ */ /* @test - * @bug 7021870 8023431 + * @bug 7021870 8023431 8026756 * @summary Reading last gzip chain member must not close the input stream. * Garbage following gzip entry must be ignored. */ +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import java.util.zip.ZipEntry; @@ -40,9 +39,9 @@ public class GZIPInZip { - private static volatile Throwable trouble; + public static void main(String[] args) + throws Throwable { - public static void main(String[] args) throws Throwable { doTest(false, false); doTest(false, true); doTest(true, false); @@ -53,63 +52,46 @@ final boolean limitGISBuff) throws Throwable { - final PipedOutputStream pos = new PipedOutputStream(); - final PipedInputStream pis = new PipedInputStream(pos); + byte[] buf; + + try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ZipOutputStream zos = new ZipOutputStream(baos)) { + + final byte[] xbuf = { 'x' }; - Thread compressor = new Thread() { - public void run() { - final byte[] xbuf = { 'x' }; - try (ZipOutputStream zos = new ZipOutputStream(pos)) { + zos.putNextEntry(new ZipEntry("a.gz")); + GZIPOutputStream gos1 = new GZIPOutputStream(zos); + gos1.write(xbuf); + gos1.finish(); + if (appendGarbage) + zos.write(xbuf); + zos.closeEntry(); - zos.putNextEntry(new ZipEntry("a.gz")); - try (GZIPOutputStream gos1 = new GZIPOutputStream(zos)) { - gos1.write(xbuf); - gos1.finish(); - } - if (appendGarbage) - zos.write(xbuf); + zos.putNextEntry(new ZipEntry("b.gz")); + GZIPOutputStream gos2 = new GZIPOutputStream(zos); + gos2.write(xbuf); + gos2.finish(); + zos.closeEntry(); - zos.closeEntry(); + zos.flush(); + buf = baos.toByteArray(); + } - zos.putNextEntry(new ZipEntry("b.gz")); - try (GZIPOutputStream gos2 = new GZIPOutputStream(zos)) { - gos2.write(xbuf); - gos2.finish(); - } - zos.closeEntry(); + try (ByteArrayInputStream bais = new ByteArrayInputStream(buf); + ZipInputStream zis = new ZipInputStream(bais)) { - } catch (Throwable t) { - trouble = t; - } + zis.getNextEntry(); + GZIPInputStream gis1 = limitGISBuff ? + new GZIPInputStream(zis, 4) : + new GZIPInputStream(zis); + // try to read more than the entry has + gis1.skip(2); + + try { + zis.getNextEntry(); + } catch (IOException e) { + throw new RuntimeException("ZIP stream was prematurely closed", e); } - }; - - Thread uncompressor = new Thread() { - public void run() { - try (ZipInputStream zis = new ZipInputStream(pis)) { - zis.getNextEntry(); - try (InputStream gis = limitGISBuff ? - new GZIPInputStream(zis, 4) : - new GZIPInputStream(zis)) { - // try to read more than the entry has - gis.skip(2); - } - - try { - zis.getNextEntry(); - } catch (IOException e) { - throw new AssertionError("ZIP stream was prematurely closed"); - } - } catch (Throwable t) { - trouble = t; - } - } - }; - - compressor.start(); uncompressor.start(); - compressor.join(); uncompressor.join(); - - if (trouble != null) - throw trouble; + } } }