jdk/test/java/util/zip/ZipFile/ReadZip.java
changeset 3078 c491f0d2a8aa
parent 2 90ce3da70b43
child 4822 bcc6dbec57d8
--- a/jdk/test/java/util/zip/ZipFile/ReadZip.java	Mon Jun 29 15:08:52 2009 +0100
+++ b/jdk/test/java/util/zip/ZipFile/ReadZip.java	Mon Jun 29 19:57:58 2009 -0700
@@ -22,7 +22,7 @@
  */
 
 /* @test
-   @bug 4241361 4842702
+   @bug 4241361 4842702 4985614 6646605 5032358
    @summary Make sure we can read a zip file.
  */
 
@@ -30,7 +30,7 @@
 import java.util.zip.*;
 
 public class ReadZip {
-    private static void Unreached (Object o)
+    private static void unreached (Object o)
         throws Exception
     {
         // Should never get here
@@ -42,10 +42,10 @@
                                           "input.zip"));
 
         // Make sure we throw NPE on null objects
-        try { Unreached (zf.getEntry(null)); }
+        try { unreached (zf.getEntry(null)); }
         catch (NullPointerException e) {}
 
-        try { Unreached (zf.getInputStream(null)); }
+        try { unreached (zf.getInputStream(null)); }
         catch (NullPointerException e) {}
 
         ZipEntry ze = zf.getEntry("ReadZip.java");
@@ -53,5 +53,65 @@
             throw new Exception("cannot read from zip file");
         }
         zf.close();
+
+        // Make sure we can read the zip file that has some garbage
+        // bytes padded at the end.
+        FileInputStream fis = new FileInputStream(
+                                   new File(System.getProperty("test.src", "."),
+                                            "input.zip"));
+        File newZip = new File(System.getProperty("test.src", "."),
+                               "input2.zip");
+        FileOutputStream fos = new FileOutputStream(newZip);
+
+        byte[] buf = new byte[1024];
+        int n = 0;
+        while ((n = fis.read(buf)) != -1) {
+            fos.write(buf, 0, n);
+        }
+        fis.close();
+        // pad some bytes
+        fos.write(1); fos.write(3); fos.write(5); fos.write(7);
+        fos.close();
+        try {
+            zf = new ZipFile(newZip);
+            ze = zf.getEntry("ReadZip.java");
+            if (ze == null) {
+                throw new Exception("cannot read from zip file");
+            }
+        } finally {
+            zf.close();
+            newZip.delete();
+        }
+
+        // Read zip file comment
+        try {
+
+            ZipOutputStream zos = new ZipOutputStream(
+                                      new FileOutputStream(newZip));
+            ze = new ZipEntry("ZipEntry");
+            zos.putNextEntry(ze);
+            zos.write(1); zos.write(2); zos.write(3); zos.write(4);
+            zos.closeEntry();
+            zos.setComment("This is the comment for testing");
+            zos.close();
+
+            zf = new ZipFile(newZip);
+            ze = zf.getEntry("ZipEntry");
+            if (ze == null)
+                throw new Exception("cannot read entry from zip file");
+            if (!"This is the comment for testing".equals(zf.getComment()))
+                throw new Exception("cannot read comment from zip file");
+        } finally {
+            zf.close();
+            newZip.delete();
+        }
+
+        // Throw a FNF exception when read a non-existing zip file
+        try { unreached (new ZipFile(
+                             new File(System.getProperty("test.src", "."),
+                                     "input"
+                                      + String.valueOf(new java.util.Random().nextInt())
+                                      + ".zip")));
+        } catch (FileNotFoundException fnfe) {}
     }
 }