8026756: Test java/util/zip/GZIP/GZIPInZip.java failed
authorigerasim
Fri, 18 Oct 2013 16:06:20 +0400
changeset 21289 95fcae9543b4
parent 21288 f1e58b9ff6cb
child 21290 db5e0cad1102
8026756: Test java/util/zip/GZIP/GZIPInZip.java failed Reviewed-by: alanb
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;
+        }
     }
 }