On Friday 24 October 2008 15:20, [EMAIL PROTECTED] wrote: > Added: trunk/freenet/test/freenet/support/io/BucketTestBase.java > =================================================================== > --- trunk/freenet/test/freenet/support/io/BucketTestBase.java > (rev 0) > +++ trunk/freenet/test/freenet/support/io/BucketTestBase.java 2008-10-24 14:20:40 UTC (rev 23079) > @@ -0,0 +1,198 @@ > +/* This code is part of Freenet. It is distributed under the GNU General > + * Public License, version 2 (or at your option any later version). See > + * http://www.gnu.org/ for further details of the GPL. */ > +package freenet.support.io; > + > +import java.io.IOException; > +import java.io.InputStream; > +import java.io.OutputStream; > + > +import junit.framework.TestCase; > +import freenet.support.ByteArrayWrapper; > +import freenet.support.api.Bucket; > + > +public abstract class BucketTestBase extends TestCase { > + protected byte[] DATA1 = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, > 0x05, 0x06, 0x07, 0x08 }; > + protected byte[] DATA2 = new byte[] { 0x70, (byte) 0x81, (byte) 0x92, (byte) 0xa3, (byte) 0xb4, (byte) 0xc5, > + (byte) 0xd6, (byte) 0xe7, (byte) 0xf8 }; > + > + protected abstract Bucket makeBucket(long size) throws IOException; > + > + protected abstract void freeBucket(Bucket bucket) throws IOException; > + > + public void testReadEmpty() throws IOException { > + Bucket bucket = makeBucket(3); > + try { > + assertEquals("Size-0", 0, bucket.size()); > + // Read byte[] > + InputStream is = bucket.getInputStream(); > + byte[] data = new byte[10]; > + int read = is.read(data, 0, 10); > + is.close(); > + > + assertEquals("Read-Empty", -1, read); > + } finally { > + freeBucket(bucket); > + } > + } > + > + public void testReadExcess() throws IOException { > + Bucket bucket = makeBucket(Math.max(DATA1.length, > DATA2.length)); > + try { > + assertEquals("Size-0", 0, bucket.size()); > + > + // Write > + OutputStream os = bucket.getOutputStream(); > + os.write(new byte[] { 5 }); > + os.close(); > + > + assertEquals("Read-Excess-Size", 1, bucket.size()); > + > + // Read byte[] > + InputStream is = bucket.getInputStream(); > + byte[] data = new byte[10]; > + int read = is.read(data, 0, 10); > + assertEquals("Read-Excess", 1, read); > + assertEquals("Read-Excess-5", 5, data[0]); > + > + read = is.read(data, 0, 10); > + assertEquals("Read-Excess-EOF", -1, read); > + > + is.close(); > + } finally { > + freeBucket(bucket); > + } > + } > + > + public void testReadWrite() throws IOException { > + Bucket bucket = makeBucket(Math.max(DATA1.length, > DATA2.length)); > + try { > + assertEquals("Size-0", 0, bucket.size()); > + > + // Write > + OutputStream os = bucket.getOutputStream(); > + os.write(DATA1); > + os.close(); > + > + assertEquals("Size-1", DATA1.length, bucket.size()); > + > + // Read byte[] > + InputStream is = bucket.getInputStream(); > + byte[] data = new byte[DATA1.length]; > + int read = is.read(data, 0, DATA1.length); > + is.close(); > + > + assertEquals("SimpleRead-1-SIZE", DATA1.length, read); > + assertEquals("SimpleRead-1", new > ByteArrayWrapper(DATA1), new ByteArrayWrapper(data)); > + > + // Read byte > + is = bucket.getInputStream(); > + for (byte b : DATA1) > + assertEquals("SimpleRead-2", b, (byte) > is.read()); > + > + // EOF > + assertEquals("SimpleRead-EOF0", -1, is.read(new > byte[4])); > + assertEquals("SimpleRead-EOF1", -1, is.read()); > + assertEquals("SimpleRead-EOF2", -1, is.read()); > + > + is.close(); > + } finally { > + freeBucket(bucket); > + } > + } > + > + // Write twice -- should overwrite, not append > + public void testReuse() throws IOException { > + Bucket bucket = makeBucket(Math.max(DATA1.length, > DATA2.length)); > + try { > + // Write > + OutputStream os = bucket.getOutputStream(); > + os.write(DATA1); > + os.close(); > + > + // Read byte[] > + InputStream is = bucket.getInputStream(); > + byte[] data = new byte[DATA1.length]; > + int read = is.read(data, 0, DATA1.length); > + is.close(); > + > + assertEquals("Read-1-SIZE", DATA1.length, read); > + assertEquals("Read-1", new ByteArrayWrapper(DATA1), new ByteArrayWrapper(data)); > + > + // Write again > + os = bucket.getOutputStream(); > + os.write(DATA2); > + os.close(); > + > + // Read byte[] > + is = bucket.getInputStream(); > + data = new byte[DATA2.length]; > + read = is.read(data, 0, DATA2.length); > + is.close(); > + > + assertEquals("Read-2-SIZE", DATA2.length, read); > + assertEquals("Read-2", new ByteArrayWrapper(DATA2), new ByteArrayWrapper(data)); > + } finally { > + freeBucket(bucket); > + } > + } > + > + public void testNegative() throws IOException { > + Bucket bucket = makeBucket(Math.max(DATA1.length, > DATA2.length)); > + try { > + // Write > + OutputStream os = bucket.getOutputStream(); > + os.write(0); > + os.write(-1); > + os.write(-2); > + os.write(123); > + os.close(); > + > + // Read byte[] > + InputStream is = bucket.getInputStream(); > + assertEquals("Write-0", 0xff & (byte) 0, is.read()); > + assertEquals("Write-1", 0xff & (byte) -1, is.read()); > + assertEquals("Write-2", 0xff & (byte) -2, is.read()); > + assertEquals("Write-123", 0xff & (byte) 123, is.read()); > + assertEquals("EOF", -1, is.read()); > + is.close(); > + } finally { > + freeBucket(bucket); > + } > + } > + > + protected static byte[] DATA_LONG; > + static { > + DATA_LONG = new byte[32768 + 1]; // 32K + 1 > + for (int i = 0; i < DATA_LONG.length; i++) > + DATA_LONG[i] = (byte) i; > + } > + > + public void testLargeData() throws IOException { > + > + Bucket bucket = makeBucket(DATA_LONG.length * 16); > + try { > + // Write > + OutputStream os = bucket.getOutputStream(); > + for (int i = 0; i < 16; i++) > + os.write(DATA_LONG); > + os.close(); > + > + // Read byte[] > + InputStream is = bucket.getInputStream(); > + for (int i = 0; i < 16; i++) { > + byte[] buf = new byte[DATA_LONG.length]; > + int read = is.read(buf); > + assertEquals("Read-Long-Size", > DATA_LONG.length, read);
This will fail for most implementations of Bucket: read(byte[]) is not
guaranteed to read the full buffer at once.
> + assertEquals("Read-Long", new
> ByteArrayWrapper(DATA_LONG), new
ByteArrayWrapper(buf));
> + }
> +
> + int read = is.read(new byte[1]);
> + assertEquals("Read-Long-Size", -1, read);
> +
> + is.close();
> + } finally {
> + freeBucket(bucket);
> + }
> + }
> +}
pgpJgPm2Z1wYh.pgp
Description: PGP signature
_______________________________________________ Devl mailing list [email protected] http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
