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