Author: j16sdiz
Date: 2008-11-07 13:53:18 +0000 (Fri, 07 Nov 2008)
New Revision: 23373

Added:
   trunk/freenet/test/freenet/support/io/TempBucketTest.java
Modified:
   trunk/freenet/src/freenet/support/io/TempBucketFactory.java
   trunk/freenet/test/freenet/support/io/BucketTestBase.java
Log:
junit for TempBucketFactory

Modified: trunk/freenet/src/freenet/support/io/TempBucketFactory.java
===================================================================
--- trunk/freenet/src/freenet/support/io/TempBucketFactory.java 2008-11-07 
03:43:25 UTC (rev 23372)
+++ trunk/freenet/src/freenet/support/io/TempBucketFactory.java 2008-11-07 
13:53:18 UTC (rev 23373)
@@ -58,7 +58,7 @@
        /** How old is a long-lived RAMBucket? */
        private final int RAMBUCKET_MAX_AGE = 5*60*1000; // 5mins
        /** How many times the maxRAMBucketSize can a RAMBucket be before it 
gets migrated? */
-       private final int RAMBUCKET_CONVERSION_FACTOR = 4;
+       final static int RAMBUCKET_CONVERSION_FACTOR = 4;

        public class TempBucket implements Bucket {
                /** The underlying bucket itself */

Modified: trunk/freenet/test/freenet/support/io/BucketTestBase.java
===================================================================
--- trunk/freenet/test/freenet/support/io/BucketTestBase.java   2008-11-07 
03:43:25 UTC (rev 23372)
+++ trunk/freenet/test/freenet/support/io/BucketTestBase.java   2008-11-07 
13:53:18 UTC (rev 23373)
@@ -24,6 +24,9 @@
                Bucket bucket = makeBucket(3);
                try {
                        assertEquals("Size-0", 0, bucket.size());
+                       OutputStream os = bucket.getOutputStream();
+                       os.close();
+                       
                        // Read byte[]
                        InputStream is = bucket.getInputStream();
                        byte[] data = new byte[10];
@@ -100,9 +103,14 @@
                        freeBucket(bucket);
                }
        }
+       
+       protected boolean canOverwrite = true; 

        // Write twice -- should overwrite, not append
        public void testReuse() throws IOException {
+               if (!canOverwrite)
+                       return;
+               
                Bucket bucket = makeBucket(Math.max(DATA1.length, 
DATA2.length));
                try {
                        // Write

Added: trunk/freenet/test/freenet/support/io/TempBucketTest.java
===================================================================
--- trunk/freenet/test/freenet/support/io/TempBucketTest.java                   
        (rev 0)
+++ trunk/freenet/test/freenet/support/io/TempBucketTest.java   2008-11-07 
13:53:18 UTC (rev 23373)
@@ -0,0 +1,176 @@
+/* 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.OutputStream;
+import java.util.Random;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.spaceroots.mantissa.random.MersenneTwister;
+
+import freenet.crypt.RandomSource;
+import freenet.crypt.Yarrow;
+import freenet.support.Executor;
+import freenet.support.SerialExecutor;
+import freenet.support.api.Bucket;
+import freenet.support.io.TempBucketFactory.TempBucket;
+
+public class TempBucketTest extends TestSuite {
+
+       public static class TempBucketMigrationTest extends TestCase {
+               private RandomSource strongPRNG = new Yarrow();
+               private Random weakPRNG = new MersenneTwister();
+               private Executor exec = new 
SerialExecutor(NativeThread.NORM_PRIORITY);
+               private FilenameGenerator fg;
+
+               public TempBucketMigrationTest() throws IOException {
+                       fg = new FilenameGenerator(weakPRNG, false, null, 
"junit");
+               }
+
+               public void testRamLimitCreate() throws IOException {
+                       TempBucketFactory tbf = new TempBucketFactory(exec, fg, 
16, 128, strongPRNG, weakPRNG, false);
+
+                       int maxRamBucket = 128 / 16;
+
+                       // create excess maxTotalRamSize, last one should be on 
disk
+                       TempBucket[] b = new TempBucket[maxRamBucket + 1];
+                       for (int i = 0; i < maxRamBucket + 1; i++) {
+                               b[i] = (TempBucket) tbf.makeBucket(16);
+
+                               OutputStream os = b[i].getOutputStream();
+                               os.write(new byte[16]);
+                               os.close();
+                       }
+
+                       try {
+                               assertTrue(b[0].isRAMBucket());
+                               assertFalse(b[maxRamBucket].isRAMBucket());
+
+                               // Free some, reused the space
+                               b[0].free();
+                               b[maxRamBucket].free();
+
+                               b[0] = (TempBucket) tbf.makeBucket(8);
+                               b[maxRamBucket] = (TempBucket) 
tbf.makeBucket(8);
+                               assertTrue(b[0].isRAMBucket());
+                               assertTrue(b[maxRamBucket].isRAMBucket());
+                       } finally {
+                               for (Bucket bb : b)
+                                       bb.free();
+                       }
+               }
+
+               public void testWriteExcessConversionFactor() throws 
IOException {
+                       TempBucketFactory tbf = new TempBucketFactory(exec, fg, 
16, 128, strongPRNG, weakPRNG, false);
+
+                       TempBucket b = (TempBucket) tbf.makeBucket(16);
+                       try {
+                               assertTrue(b.isRAMBucket());
+
+                               OutputStream os = b.getOutputStream();
+
+                               os.write(new byte[16]);
+                               assertTrue(b.isRAMBucket());
+
+                               for (int i = 0; i < 
TempBucketFactory.RAMBUCKET_CONVERSION_FACTOR - 1; i++) {
+                                       os.write(new byte[16]);
+                               }
+                               assertFalse(b.isRAMBucket());
+                       } finally {
+                               b.free();
+                       }
+               }
+
+               public void testWriteExcessLimit() throws IOException {
+                       TempBucketFactory tbf = new TempBucketFactory(exec, fg, 
16, 17, strongPRNG, weakPRNG, false);
+
+                       TempBucket b = (TempBucket) tbf.makeBucket(16);
+                       try {
+                               assertTrue(b.isRAMBucket());
+
+                               OutputStream os = b.getOutputStream();
+
+                               os.write(new byte[16]);
+                               assertTrue(b.isRAMBucket());
+
+                               os.write(new byte[2]);
+                               assertFalse(b.isRAMBucket());
+                       } finally {
+                               b.free();
+                       }
+               }
+       }
+
+       public static class RealTempBucketTest extends BucketTestBase {
+               private RandomSource strongPRNG = new Yarrow();
+               private Random weakPRNG = new MersenneTwister();
+               private Executor exec = new 
SerialExecutor(NativeThread.NORM_PRIORITY);
+               private FilenameGenerator fg;
+
+               private TempBucketFactory tbf;
+
+               public RealTempBucketTest(int maxRamSize, int maxTotalRamSize, 
boolean encrypted) throws IOException {
+                       fg = new FilenameGenerator(weakPRNG, false, null, 
"junit");
+                       tbf = new TempBucketFactory(exec, fg, maxRamSize, 
maxTotalRamSize, strongPRNG, weakPRNG, encrypted);
+
+                       canOverwrite = false;
+               }
+
+               @Override
+               protected void freeBucket(Bucket bucket) throws IOException {
+                       bucket.free();
+               }
+
+               @Override
+               protected Bucket makeBucket(long size) throws IOException {
+                       return tbf.makeBucket(1); // TempBucket allow resize 
+               }
+       }
+
+       public static class RealTempBucketTest_8_16_F extends 
RealTempBucketTest {
+               public RealTempBucketTest_8_16_F() throws IOException {
+                       super(8, 16, false);
+               }
+       }
+
+       public static class RealTempBucketTest_64_128_F extends 
RealTempBucketTest {
+               public RealTempBucketTest_64_128_F() throws IOException {
+                       super(64, 128, false);
+               }
+       }
+
+       public static class RealTempBucketTest_64k_128k_F extends 
RealTempBucketTest {
+               public RealTempBucketTest_64k_128k_F() throws IOException {
+                       super(64 * 1024, 128 * 1024, false);
+               }
+       }
+
+       public static class RealTempBucketTest_8_16_T extends 
RealTempBucketTest {
+               public RealTempBucketTest_8_16_T() throws IOException {
+                       super(8, 16, true);
+               }
+       }
+
+       public static class RealTempBucketTest_64k_128k_T extends 
RealTempBucketTest {
+               public RealTempBucketTest_64k_128k_T() throws IOException {
+                       super(64 * 1024, 128 * 1024, true);
+               }
+       }
+
+       public static Test suite() {
+               TestSuite suite = new TestSuite("TempBucketTest");
+               suite.addTest(new TestSuite(RealTempBucketTest_8_16_F.class));
+               suite.addTest(new TestSuite(RealTempBucketTest_64_128_F.class));
+               suite.addTest(new 
TestSuite(RealTempBucketTest_64k_128k_F.class));
+               suite.addTest(new TestSuite(RealTempBucketTest_8_16_T.class));
+               suite.addTest(new 
TestSuite(RealTempBucketTest_64k_128k_T.class));
+               suite.addTest(new TestSuite(TempBucketMigrationTest.class));
+               return suite;
+       }
+
+}
\ No newline at end of file


Reply via email to