diff options
Diffstat (limited to 'src/test/java/org/apache/commons/compress/IOMethodsTest.java')
-rw-r--r-- | src/test/java/org/apache/commons/compress/IOMethodsTest.java | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/compress/IOMethodsTest.java b/src/test/java/org/apache/commons/compress/IOMethodsTest.java new file mode 100644 index 000000000..481a9d51a --- /dev/null +++ b/src/test/java/org/apache/commons/compress/IOMethodsTest.java @@ -0,0 +1,194 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.commons.compress; + +import static org.junit.Assert.*; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveInputStream; +import org.apache.commons.compress.archivers.ArchiveOutputStream; +import org.apache.commons.compress.archivers.ar.ArArchiveEntry; +import org.apache.commons.compress.archivers.cpio.CpioArchiveEntry; +import org.apache.commons.compress.archivers.jar.JarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.junit.Test; + +/** + * Check that the different write methods create the same output. + * TODO perform the same checks for reads. + */ +public class IOMethodsTest extends AbstractTestCase { + + private static final int bytesToTest = 50; + private static final byte[] byteTest = new byte[bytesToTest]; + static { + for(int i=0; i < byteTest.length ;) { + byteTest[i]=(byte) i; + byteTest[i+1]=(byte) -i; + i += 2; + } + } + + @Test + public void testWriteAr() throws Exception { + final ArchiveEntry entry = new ArArchiveEntry("dummy", bytesToTest); + compareWrites("ar", entry); + } + + @Test + public void testWriteCpio() throws Exception { + final ArchiveEntry entry = new CpioArchiveEntry("dummy", bytesToTest); + compareWrites("cpio", entry); + } + + @Test + public void testWriteJar() throws Exception { + final ArchiveEntry entry = new JarArchiveEntry("dummy"); + compareWrites("jar", entry); + } + + @Test + public void testWriteTar() throws Exception { + final TarArchiveEntry entry = new TarArchiveEntry("dummy"); + entry.setSize(bytesToTest); + compareWrites("tar", entry); + } + + @Test + public void testWriteZip() throws Exception { + final ArchiveEntry entry = new ZipArchiveEntry("dummy"); + compareWrites("zip", entry); + } + + @Test + public void testReadAr() throws Exception { + compareReads("ar"); + } + + @Test + public void testReadCpio() throws Exception { + compareReads("cpio"); + } + + @Test + public void testReadJar() throws Exception { + compareReads("jar"); + } + + @Test + public void testReadTar() throws Exception { + compareReads("tar"); + } + + @Test + public void testReadZip() throws Exception { + compareReads("zip"); + } + + private void compareWrites(final String archiverName, final ArchiveEntry entry) throws Exception { + final OutputStream out1 = new ByteArrayOutputStream(); + final OutputStream out2 = new ByteArrayOutputStream(); + final OutputStream out3 = new ByteArrayOutputStream(); + final ArchiveOutputStream aos1 = factory.createArchiveOutputStream(archiverName, out1); + aos1.putArchiveEntry(entry); + final ArchiveOutputStream aos2 = factory.createArchiveOutputStream(archiverName, out2); + aos2.putArchiveEntry(entry); + final ArchiveOutputStream aos3 = factory.createArchiveOutputStream(archiverName, out3); + aos3.putArchiveEntry(entry); + for (final byte element : byteTest) { + aos1.write(element); + } + aos1.closeArchiveEntry(); + aos1.close(); + + aos2.write(byteTest); + aos2.closeArchiveEntry(); + aos2.close(); + + aos3.write(byteTest, 0, byteTest.length); + aos3.closeArchiveEntry(); + aos3.close(); + assertEquals("aos1Bytes!=aos2Bytes",aos1.getBytesWritten(),aos2.getBytesWritten()); + assertEquals("aos1Bytes!=aos3Bytes",aos1.getBytesWritten(),aos3.getBytesWritten()); + assertEquals("out1Len!=out2Len",out1.toString().length(),out2.toString().length()); + assertEquals("out1Len!=out2Len",out1.toString().length(),out3.toString().length()); + assertEquals("out1!=out2",out1.toString(),out2.toString()); + assertEquals("out1!=out3",out1.toString(),out3.toString()); + } + + private void compareReads(final String archiverName) throws Exception { + final OutputStream out1 = new ByteArrayOutputStream(); + final OutputStream out2 = new ByteArrayOutputStream(); + final OutputStream out3 = new ByteArrayOutputStream(); + final File file = createSingleEntryArchive(archiverName); + file.deleteOnExit(); + + final InputStream is1 = new FileInputStream(file); + final ArchiveInputStream ais1 = factory.createArchiveInputStream(archiverName, is1); + final ArchiveEntry nextEntry = ais1.getNextEntry(); + assertNotNull(nextEntry); + + final byte [] buff = new byte[10]; // small so multiple reads are needed; + final long size = nextEntry.getSize(); + if (size != ArchiveEntry.SIZE_UNKNOWN) { + assertTrue("Size should be > 0, found: "+size, size > 0); + } + + final InputStream is2 = new FileInputStream(file); + final ArchiveInputStream ais2 = factory.createArchiveInputStream(archiverName, is2); + final ArchiveEntry nextEntry2 = ais2.getNextEntry(); + assertNotNull(nextEntry2); + assertEquals("Expected same entry size", size, nextEntry2.getSize()); + + final InputStream is3 = new FileInputStream(file); + final ArchiveInputStream ais3 = factory.createArchiveInputStream(archiverName, is3); + final ArchiveEntry nextEntry3 = ais3.getNextEntry(); + assertNotNull(nextEntry3); + assertEquals("Expected same entry size", size, nextEntry3.getSize()); + + int b; + while((b=ais1.read()) != -1){ + out1.write(b); + } + ais1.close(); + + int bytes; + while((bytes = ais2.read(buff)) > 0){ + out2.write(buff, 0, bytes); + } + ais2.close(); + + while((bytes=ais3.read(buff, 0 , buff.length)) > 0){ + out3.write(buff, 0, bytes); + } + ais3.close(); + + assertEquals("out1Len!=out2Len",out1.toString().length(),out2.toString().length()); + assertEquals("out1Len!=out3Len",out1.toString().length(),out3.toString().length()); + assertEquals("out1!=out2",out1.toString(),out2.toString()); + assertEquals("out1!=out3",out1.toString(),out3.toString()); + } +} |