You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2009/03/30 02:47:07 UTC

svn commit: r759811 - /commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java

Author: sebb
Date: Mon Mar 30 00:47:06 2009
New Revision: 759811

URL: http://svn.apache.org/viewvc?rev=759811&view=rev
Log:
Check that empty archives created by the code can be read back

Modified:
    commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java

Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java?rev=759811&r1=759810&r2=759811&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java (original)
+++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java Mon Mar 30 00:47:06 2009
@@ -21,7 +21,14 @@
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
 
+import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.ArchiveException;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 import org.apache.commons.compress.archivers.ArchiveStreamFactory;
 import org.apache.commons.compress.archivers.ar.ArArchiveInputStream;
@@ -30,44 +37,106 @@
 import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
 
 public final class DetectArchiverTestCase extends AbstractTestCase {
+    final ArchiveStreamFactory factory = new ArchiveStreamFactory();
+    final ClassLoader classLoader = getClass().getClassLoader();
+
     public void testDetection() throws Exception {
-        final ArchiveStreamFactory factory = new ArchiveStreamFactory();
 
-        final ArchiveInputStream ar = factory.createArchiveInputStream(
-                                                                       new BufferedInputStream(new FileInputStream(
-                                                                                                                   new File(getClass().getClassLoader().getResource("bla.ar").getFile())))); 
+        final ArchiveInputStream ar = getStreamFor("bla.ar"); 
         assertNotNull(ar);
         assertTrue(ar instanceof ArArchiveInputStream);
 
-        final ArchiveInputStream tar = factory.createArchiveInputStream(
-                                                                        new BufferedInputStream(new FileInputStream(
-                                                                                                                    new File(getClass().getClassLoader().getResource("bla.tar").getFile()))));
+        final ArchiveInputStream tar = getStreamFor("bla.tar");
         assertNotNull(tar);
         assertTrue(tar instanceof TarArchiveInputStream);
 
-        final ArchiveInputStream zip = factory.createArchiveInputStream(
-                                                                        new BufferedInputStream(new FileInputStream(
-                                                                                                                    new File(getClass().getClassLoader().getResource("bla.zip").getFile()))));
+        final ArchiveInputStream zip = getStreamFor("bla.zip");
         assertNotNull(zip);
         assertTrue(zip instanceof ZipArchiveInputStream);
 
-        final ArchiveInputStream jar = factory.createArchiveInputStream(
-                                                                        new BufferedInputStream(new FileInputStream(
-                                                                                                                    new File(getClass().getClassLoader().getResource("bla.jar").getFile()))));
+        final ArchiveInputStream jar = getStreamFor("bla.jar");
         assertNotNull(jar);
         assertTrue(jar instanceof ZipArchiveInputStream);
 
-        final ArchiveInputStream cpio = factory.createArchiveInputStream(
-                                                                         new BufferedInputStream(new FileInputStream(
-                                                                                                                     new File(getClass().getClassLoader().getResource("bla.cpio").getFile()))));
+        final ArchiveInputStream cpio = getStreamFor("bla.cpio");
         assertNotNull(cpio);
         assertTrue(cpio instanceof CpioArchiveInputStream);
 
-        //              final ArchiveInputStream tgz = factory.createArchiveInputStream(
-        //                              new BufferedInputStream(new FileInputStream(
-        //                                              new File(getClass().getClassLoader().getResource("bla.tgz").getFile()))));
-        //              assertTrue(tgz instanceof TarArchiveInputStream);
+// Not yet implemented        
+//        final ArchiveInputStream tgz = getStreamFor("bla.tgz");
+//        assertNotNull(tgz);
+//        assertTrue(tgz instanceof TarArchiveInputStream);
+
+    }
+
+    private ArchiveInputStream getStreamFor(String resource)
+            throws ArchiveException, FileNotFoundException {
+        final URL rsc = classLoader.getResource(resource);
+        assertNotNull("Could not find resource "+resource,rsc);
+        return factory.createArchiveInputStream(
+                   new BufferedInputStream(new FileInputStream(
+                       new File(rsc.getFile()))));
+    }
+    
+    // Scan list of archives in resources/archives directory
+    public void notyettestArchives() throws Exception{
+        File arcdir =new File(classLoader.getResource("archives").getFile());
+        assertTrue(arcdir.exists());
+        File[]files=arcdir.listFiles();
+        for (int i=0; i<files.length; i++){
+            final File file = files[i];
+            if (file.getName().endsWith(".txt")){
+                continue;
+            }
+           try {
+               // TODO - how to determine expected file contents
+               final ArrayList expected = new ArrayList();
+               checkArchiveContent(file, expected);
+            } catch (ArchiveException e) {
+                fail("Problem checking "+file);
+            }
+        }
+    }
+
+    // Check that the empty archives created by the code are readable
+    
+    // Not possible to detect empty "ar" archive as it is completely empty
+//    public void testEmptyArArchive() throws Exception {
+//        emptyArchive("ar");
+//    }
+
+    public void testEmptyCpioArchive() throws Exception {
+        checkEmptyArchive("cpio");
+    }
+
+    public void testEmptyJarArchive() throws Exception {
+        checkEmptyArchive("jar");
+    }
 
+    // empty tar archives just have 512 null bytes
+//    public void testEmptyTarArchive() throws Exception {
+//        checkEmptyArchive("tar");
+//    }
+    public void testEmptyZipArchive() throws Exception {
+        checkEmptyArchive("zip");
     }
 
+    private void checkEmptyArchive(String type) throws Exception{
+        File ar = createEmptyArchive(type); // will be deleted by tearDown()
+        ar.deleteOnExit(); // Just in case file cannot be deleted
+        ArchiveInputStream ais = null;
+        BufferedInputStream in = null;
+        try {
+            in = new BufferedInputStream(new FileInputStream(ar));
+            ais = factory.createArchiveInputStream(in);
+        } catch (ArchiveException ae) {
+            fail("Should have recognised empty archive for "+type);
+        } finally {
+            if (ais != null) {
+                ais.close(); // will close input as well
+            } else if (in != null){
+                in.close();
+            }
+        }
+    }
 }