Author: j16sdiz
Date: 2008-10-24 14:20:40 +0000 (Fri, 24 Oct 2008)
New Revision: 23079

Added:
   trunk/freenet/test/freenet/support/io/ArrayBucketTest.java
   trunk/freenet/test/freenet/support/io/BucketTestBase.java
   
trunk/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java
   trunk/freenet/test/freenet/support/io/TempFileBucketTest.java
Log:
simple junit for buckets

Added: trunk/freenet/test/freenet/support/io/ArrayBucketTest.java
===================================================================
--- trunk/freenet/test/freenet/support/io/ArrayBucketTest.java                  
        (rev 0)
+++ trunk/freenet/test/freenet/support/io/ArrayBucketTest.java  2008-10-24 
14:20:40 UTC (rev 23079)
@@ -0,0 +1,22 @@
+/* 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 freenet.support.api.Bucket;
+
+public class ArrayBucketTest extends BucketTestBase {
+       public ArrayBucketFactory abf = new ArrayBucketFactory();
+
+       @Override
+       protected Bucket makeBucket(long size) throws IOException {
+               return abf.makeBucket(size);
+       }
+
+       @Override
+       protected void freeBucket(Bucket bucket) throws IOException {
+               bucket.free();
+       }
+}

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

Added: 
trunk/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java
===================================================================
--- 
trunk/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java 
                            (rev 0)
+++ 
trunk/freenet/test/freenet/support/io/PaddedEphemerallyEncryptedBucketTest.java 
    2008-10-24 14:20:40 UTC (rev 23079)
@@ -0,0 +1,30 @@
+/* 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.util.Random;
+
+import org.spaceroots.mantissa.random.MersenneTwister;
+
+import freenet.crypt.RandomSource;
+import freenet.crypt.Yarrow;
+import freenet.support.api.Bucket;
+
+public class PaddedEphemerallyEncryptedBucketTest extends BucketTestBase {
+       private RandomSource strongPRNG = new Yarrow();
+       private Random weakPRNG = new MersenneTwister();
+
+       @Override
+       protected Bucket makeBucket(long size) throws IOException {
+               FilenameGenerator filenameGenerator = new 
FilenameGenerator(weakPRNG, false, null, "junit");
+               TempFileBucket fileBucket = new 
TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator);
+               return new PaddedEphemerallyEncryptedBucket(fileBucket, 1024, 
strongPRNG, weakPRNG);
+       }
+
+       @Override
+       protected void freeBucket(Bucket bucket) throws IOException {
+               bucket.free();
+       }
+}
\ No newline at end of file

Added: trunk/freenet/test/freenet/support/io/TempFileBucketTest.java
===================================================================
--- trunk/freenet/test/freenet/support/io/TempFileBucketTest.java               
                (rev 0)
+++ trunk/freenet/test/freenet/support/io/TempFileBucketTest.java       
2008-10-24 14:20:40 UTC (rev 23079)
@@ -0,0 +1,37 @@
+/* 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.File;
+import java.io.IOException;
+import java.util.Random;
+
+import org.spaceroots.mantissa.random.MersenneTwister;
+
+import freenet.support.api.Bucket;
+
+public class TempFileBucketTest extends BucketTestBase {
+       private Random weakPRNG = new MersenneTwister();
+
+       @Override
+       protected Bucket makeBucket(long size) throws IOException {
+               FilenameGenerator filenameGenerator = new 
FilenameGenerator(weakPRNG, false, null, "junit");
+               BaseFileBucket bfb = new 
TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator);
+
+               assertTrue("deleteOnExit", bfb.deleteOnExit());
+               assertTrue("deleteOnFree", bfb.deleteOnFree());
+               assertTrue("deleteOnFinalize", bfb.deleteOnFinalize());
+
+               return bfb;
+       }
+
+       @Override
+       protected void freeBucket(Bucket bucket) throws IOException {
+               File file = ((BaseFileBucket) bucket).getFile();
+               if (bucket.size() != 0)
+                       assertTrue("TempFile not exist", file.exists());
+               bucket.free();
+               assertFalse("TempFile not deleted", file.exists());
+       }
+}


Reply via email to