On Friday 24 October 2008 15:20, j16sdiz at freenetproject.org 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);
> + }
> + }
> +}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20081025/a73e99cf/attachment.pgp>