diff --git a/proposal/myrmidon/src/test/org/apache/aut/bzip2/BzipTest.java b/proposal/myrmidon/src/test/org/apache/aut/bzip2/BzipTest.java new file mode 100644 index 000000000..3820e79fa --- /dev/null +++ b/proposal/myrmidon/src/test/org/apache/aut/bzip2/BzipTest.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE.txt file. + */ +package org.apache.aut.bzip2; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import junit.framework.TestCase; +import org.apache.avalon.excalibur.io.FileUtil; +import org.apache.avalon.excalibur.io.IOUtil; + +/** + * A test the stress tested the BZip implementation to verify + * that it behaves correctly. + * + * @author Peter Donald + * @version $Revision$ $Date$ + */ +public class BzipTest + extends TestCase +{ + private final static byte[] HEADER = new byte[]{(byte)'B', (byte)'Z'}; + + public BzipTest( final String name ) + { + super( name ); + } + + public void testBzipOutputStream() + throws Exception + { + final InputStream input = getInputStream( "asf-logo-huge.tar" ); + final File outputFile = getOutputFile( ".tar.bz2" ); + final OutputStream output = new FileOutputStream( outputFile ); + final CBZip2OutputStream packedOutput = getPackedOutput( output ); + IOUtil.copy( input, packedOutput ); + IOUtil.shutdownStream( input ); + IOUtil.shutdownStream( packedOutput ); + IOUtil.shutdownStream( output ); + compareContents( "asf-logo-huge.tar.bz2", outputFile ); + FileUtil.forceDelete( outputFile ); + } + + public void testBzipInputStream() + throws Exception + { + final InputStream input = getInputStream( "asf-logo-huge.tar.bz2" ); + final File outputFile = getOutputFile( ".tar" ); + final OutputStream output = new FileOutputStream( outputFile ); + final CBZip2InputStream packedInput = getPackedInput( input ); + IOUtil.copy( packedInput, output ); + IOUtil.shutdownStream( input ); + IOUtil.shutdownStream( packedInput ); + IOUtil.shutdownStream( output ); + compareContents( "asf-logo-huge.tar", outputFile ); + FileUtil.forceDelete( outputFile ); + } + + private void compareContents( final String initial, final File generated ) + throws Exception + { + final InputStream input1 = getInputStream( initial ); + final InputStream input2 = new FileInputStream( generated ); + final boolean test = IOUtil.contentEquals( input1, input2 ); + IOUtil.shutdownStream( input1 ); + IOUtil.shutdownStream( input2 ); + assertTrue( "Contents of " + initial + " matches generated version " + generated, test ); + } + + private CBZip2InputStream getPackedInput( final InputStream input ) + throws IOException + { + final int b1 = input.read(); + final int b2 = input.read(); + assertEquals( "Equal header byte1", b1, 'B' ); + assertEquals( "Equal header byte2", b2, 'Z' ); + return new CBZip2InputStream( input ); + } + + private CBZip2OutputStream getPackedOutput( final OutputStream output ) + throws IOException + { + output.write( HEADER ); + return new CBZip2OutputStream( output ); + } + + private File getOutputFile( final String postfix ) + throws IOException + { + final File cwd = new File( "." ); + return File.createTempFile( "ant-test", postfix, cwd ); + } + + private InputStream getInputStream( final String resource ) + throws Exception + { + final String filename = "src" + File.separator + "testcases" + File.separator + + getClass().getName().replace( '.', File.separatorChar ); + final String path = FileUtil.getPath( filename ); + final File input = new File( path, resource ); + return new FileInputStream( input ); + //final ClassLoader loader = getClass().getClassLoader(); + //return loader.getResourceAsStream( resource ); + } +} diff --git a/proposal/myrmidon/src/testcases/org/apache/aut/bzip2/BzipTest.java b/proposal/myrmidon/src/testcases/org/apache/aut/bzip2/BzipTest.java new file mode 100644 index 000000000..3820e79fa --- /dev/null +++ b/proposal/myrmidon/src/testcases/org/apache/aut/bzip2/BzipTest.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE.txt file. + */ +package org.apache.aut.bzip2; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import junit.framework.TestCase; +import org.apache.avalon.excalibur.io.FileUtil; +import org.apache.avalon.excalibur.io.IOUtil; + +/** + * A test the stress tested the BZip implementation to verify + * that it behaves correctly. + * + * @author Peter Donald + * @version $Revision$ $Date$ + */ +public class BzipTest + extends TestCase +{ + private final static byte[] HEADER = new byte[]{(byte)'B', (byte)'Z'}; + + public BzipTest( final String name ) + { + super( name ); + } + + public void testBzipOutputStream() + throws Exception + { + final InputStream input = getInputStream( "asf-logo-huge.tar" ); + final File outputFile = getOutputFile( ".tar.bz2" ); + final OutputStream output = new FileOutputStream( outputFile ); + final CBZip2OutputStream packedOutput = getPackedOutput( output ); + IOUtil.copy( input, packedOutput ); + IOUtil.shutdownStream( input ); + IOUtil.shutdownStream( packedOutput ); + IOUtil.shutdownStream( output ); + compareContents( "asf-logo-huge.tar.bz2", outputFile ); + FileUtil.forceDelete( outputFile ); + } + + public void testBzipInputStream() + throws Exception + { + final InputStream input = getInputStream( "asf-logo-huge.tar.bz2" ); + final File outputFile = getOutputFile( ".tar" ); + final OutputStream output = new FileOutputStream( outputFile ); + final CBZip2InputStream packedInput = getPackedInput( input ); + IOUtil.copy( packedInput, output ); + IOUtil.shutdownStream( input ); + IOUtil.shutdownStream( packedInput ); + IOUtil.shutdownStream( output ); + compareContents( "asf-logo-huge.tar", outputFile ); + FileUtil.forceDelete( outputFile ); + } + + private void compareContents( final String initial, final File generated ) + throws Exception + { + final InputStream input1 = getInputStream( initial ); + final InputStream input2 = new FileInputStream( generated ); + final boolean test = IOUtil.contentEquals( input1, input2 ); + IOUtil.shutdownStream( input1 ); + IOUtil.shutdownStream( input2 ); + assertTrue( "Contents of " + initial + " matches generated version " + generated, test ); + } + + private CBZip2InputStream getPackedInput( final InputStream input ) + throws IOException + { + final int b1 = input.read(); + final int b2 = input.read(); + assertEquals( "Equal header byte1", b1, 'B' ); + assertEquals( "Equal header byte2", b2, 'Z' ); + return new CBZip2InputStream( input ); + } + + private CBZip2OutputStream getPackedOutput( final OutputStream output ) + throws IOException + { + output.write( HEADER ); + return new CBZip2OutputStream( output ); + } + + private File getOutputFile( final String postfix ) + throws IOException + { + final File cwd = new File( "." ); + return File.createTempFile( "ant-test", postfix, cwd ); + } + + private InputStream getInputStream( final String resource ) + throws Exception + { + final String filename = "src" + File.separator + "testcases" + File.separator + + getClass().getName().replace( '.', File.separatorChar ); + final String path = FileUtil.getPath( filename ); + final File input = new File( path, resource ); + return new FileInputStream( input ); + //final ClassLoader loader = getClass().getClassLoader(); + //return loader.getResourceAsStream( resource ); + } +}