- Revision
- 1333
- Author
- mauro
- Date
- 2009-10-14 06:56:37 -0500 (Wed, 14 Oct 2009)
Log Message
JBEHAVE-189: Fixed regression. Added verification of unzipped files content
Modified Paths
- trunk/web/web-io/src/main/java/org/jbehave/web/io/ResourceFinder.java
- trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java
- trunk/web/web-io/src/test/java/org/jbehave/web/io/ArchivingFileManagerTest.java
- trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java
Added Paths
Removed Paths
Diff
Modified: trunk/web/web-io/src/main/java/org/jbehave/web/io/ResourceFinder.java (1332 => 1333)
--- trunk/web/web-io/src/main/java/org/jbehave/web/io/ResourceFinder.java 2009-10-14 08:33:11 UTC (rev 1332) +++ trunk/web/web-io/src/main/java/org/jbehave/web/io/ResourceFinder.java 2009-10-14 11:56:37 UTC (rev 1333) @@ -6,6 +6,7 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; /** * A utility class to retrieve resource, either from classpath or from @@ -86,6 +87,9 @@ } private String resourcePath(String rootDirectory, String relativePath) { + if ( StringUtils.isBlank(rootDirectory) ){ + return relativePath; + } return rootDirectory + "/" + relativePath; }
Modified: trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java (1332 => 1333)
--- trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java 2009-10-14 08:33:11 UTC (rev 1332) +++ trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java 2009-10-14 11:56:37 UTC (rev 1333) @@ -11,14 +11,12 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; -import java.util.Enumeration; import java.util.List; import org.apache.commons.compress.archivers.ArchiveInputStream; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; -import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.io.IOUtils; /** @@ -40,9 +38,10 @@ new FileOutputStream(archive)); List<File> files = listContent(directory); for (File file : files) { - if ( !file.isDirectory() ){ - ZipArchiveEntry entry = new ZipArchiveEntry(relativeTo(file, directory).getPath()); - zipEntry(entry, out, file); + if (!file.isDirectory()) { + ZipArchiveEntry entry = new ZipArchiveEntry(relativeTo( + file, directory).getPath()); + zipEntry(entry, out, file); } } out.close(); @@ -52,11 +51,11 @@ } public File relativeTo(File file, File directory) { - return new File(removeStart(file.getPath(), directory.getPath()+"/")); + return new File(removeStart(file.getPath(), directory.getPath() + "/")); } - private void zipEntry(ZipArchiveEntry entry, ArchiveOutputStream out, File file) - throws IOException, FileNotFoundException { + private void zipEntry(ZipArchiveEntry entry, ArchiveOutputStream out, + File file) throws IOException, FileNotFoundException { out.putArchiveEntry(entry); IOUtils.copy(new FileInputStream(file), out); out.closeArchiveEntry(); @@ -67,31 +66,51 @@ } public void unarchive(File archive, File directory) { + InputStream is = null; + ArchiveInputStream in = null; try { - ArchiveInputStream in = factory.createArchiveInputStream(ZIP, - new FileInputStream(archive)); - ZipFile zipfile = new ZipFile(archive); - for (Enumeration<?> e = zipfile.getEntries(); e.hasMoreElements();) { - ZipArchiveEntry entry = (ZipArchiveEntry) e.nextElement(); + is = new FileInputStream(archive); + in = factory.createArchiveInputStream(ZIP, is); + ZipArchiveEntry entry = null; + while ((entry = (ZipArchiveEntry) in.getNextEntry()) != null) { unzipEntry(entry, in, directory); } - in.close(); } catch (Exception e) { throw new FileUnarchiveFailedException(archive, directory, e); + } finally { + close(is); + close(in); } } - public List<File> listContent(File directory) { - List<File> content = new ArrayList<File>(); + private void close(InputStream is) { try { - content.add(directory); - if (directory.isDirectory()) { - for (File file : directory.listFiles()) { - content.addAll(listContent(file)); - } + if (is != null) { + is.close(); } } catch (Exception e) { + e.printStackTrace(); } + } + + private void close(ArchiveInputStream in) { + try { + if (in != null) { + in.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public List<File> listContent(File directory) { + List<File> content = new ArrayList<File>(); + content.add(directory); + if (directory.isDirectory()) { + for (File file : directory.listFiles()) { + content.addAll(listContent(file)); + } + } return content; } @@ -104,12 +123,9 @@ } File outputFile = new File(directory, entry.getName()); - if (!outputFile.getParentFile().exists()) { - createDir(outputFile.getParentFile()); - } + createDir(outputFile.getParentFile()); + copy(entry, in, outputFile); - copy(entry, in, directory); - } private void createDir(File dir) throws IOException { @@ -121,33 +137,36 @@ } } - private void copy(ZipArchiveEntry entry, InputStream in, File directory) + private void copy(ZipArchiveEntry entry, InputStream in, File outputFile) throws FileNotFoundException, IOException { - File entryFile = new File(directory, entry.getName()); - OutputStream out = new FileOutputStream(entryFile); - IOUtils.copy(in, out); - out.close(); + OutputStream out = new FileOutputStream(outputFile); + try { + IOUtils.copy(in, out); + } finally { + out.close(); + } } - + @SuppressWarnings("serial") public static final class FileArchiveFailedException extends RuntimeException { public FileArchiveFailedException(File archive, File directory, Exception cause) { - super("Failed to archive dir " + directory + " to " + archive, cause); + super("Failed to archive dir " + directory + " to " + archive, + cause); } } - @SuppressWarnings("serial") public static final class FileUnarchiveFailedException extends RuntimeException { public FileUnarchiveFailedException(File archive, File directory, Exception cause) { - super("Failed to unarchive " + archive + " to dir " + directory, cause); + super("Failed to unarchive " + archive + " to dir " + directory, + cause); } }
Modified: trunk/web/web-io/src/test/java/org/jbehave/web/io/ArchivingFileManagerTest.java (1332 => 1333)
--- trunk/web/web-io/src/test/java/org/jbehave/web/io/ArchivingFileManagerTest.java 2009-10-14 08:33:11 UTC (rev 1332) +++ trunk/web/web-io/src/test/java/org/jbehave/web/io/ArchivingFileManagerTest.java 2009-10-14 11:56:37 UTC (rev 1333) @@ -169,7 +169,7 @@ } private File createUploadDir() throws IOException { - File dir = new File(System.getProperty("java.io.tmpdir"), "upload"); + File dir = new File("target", "upload"); dir.mkdirs(); return dir; }
Modified: trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java (1332 => 1333)
--- trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java 2009-10-14 08:33:11 UTC (rev 1332) +++ trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java 2009-10-14 11:56:37 UTC (rev 1333) @@ -18,13 +18,13 @@ @Before public void setup() throws IOException { - dir = new File("/tmp", "dir"); + dir = new File("target", "dir"); dir.createNewFile(); } @Test public void canArchiveZip() throws IOException { - File zip = createFile("dir1.zip"); + File zip = createFile("archive.zip"); archiver.archive(zip, dir); } @@ -38,12 +38,12 @@ @Test public void canUnarchiveZip() throws IOException { - File zip = resourceFile("dir1.zip"); + File zip = resourceFile("archive.zip"); assertTrue(archiver.isArchive(zip)); clearDir(dir); archiver.unarchive(zip, dir); - assertFilesUnarchived(asList("dir1", "dir1/file1.txt", "dir1/subdir1", - "dir1/subdir1/subfile1.txt")); + assertFilesUnarchived(asList("archive", "archive/file1.txt", "archive/subdir1", + "archive/subdir1/subfile1.txt")); } private void clearDir(File dir) { @@ -53,12 +53,12 @@ @Test public void canListFileContentOfUnarchiveZip() throws IOException { - File zip = resourceFile("dir1.zip"); + File zip = resourceFile("archive.zip"); assertTrue(archiver.isArchive(zip)); archiver.unarchive(zip, dir); - List<File> content = archiver.listContent(new File(dir, "dir1")); - assertFilesEquals(content, asList("dir1", "dir1/file1.txt", - "dir1/subdir1", "dir1/subdir1/subfile1.txt")); + List<File> content = archiver.listContent(new File(dir, "archive")); + assertFilesEquals(content, asList("archive", "archive/file1.txt", + "archive/subdir1", "archive/subdir1/subfile1.txt")); } private void assertFilesEquals(List<File> content, @@ -70,15 +70,16 @@ } private void assertFilesUnarchived(List<String> paths) { + ResourceFinder finder = new ResourceFinder(""); for (String path : paths) { - assertFileExists(path); + File file = new File(dir, path); + assertTrue(file.exists()); + if ( !file.isDirectory() ){ + assertTrue(finder.resourceAsString(file.getPath()).length() > 0); + } } } - private void assertFileExists(String path) { - assertTrue(new File(dir, path).exists()); - } - private File resourceFile(String path) { return new File(getClass().getClassLoader().getResource(path).getFile()); }
Added: trunk/web/web-io/src/test/resources/archive.zip
(Binary files differ)
Deleted: trunk/web/web-io/src/test/resources/dir1.zip
(Binary files differ)
To unsubscribe from this list please visit:
