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);
> +             }
> +     }
> +}

Attachment: pgpJgPm2Z1wYh.pgp
Description: PGP signature

_______________________________________________
Devl mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to