Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
 Mon Apr  6 15:28:10 2015
@@ -40,9 +40,10 @@ import java.util.Set;
  * <p>
  * @author Aaron Smuts
  */
-public class IndexDiskCacheUnitTest
+public abstract class IndexDiskCacheUnitTest
     extends TestCase
 {
+       public abstract IndexedDiskCacheAttributes getCacheAttributes();
     /**
      * Simply verify that we can put items in the disk cache and retrieve them.
      * @throws IOException
@@ -50,7 +51,7 @@ public class IndexDiskCacheUnitTest
     public void testSimplePutAndGet()
         throws IOException
     {
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testSimplePutAndGet" );
         cattr.setMaxKeySize( 1000 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -99,7 +100,7 @@ public class IndexDiskCacheUnitTest
     public void testRemoveItems()
         throws IOException
     {
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRemoveItems" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -131,80 +132,7 @@ public class IndexDiskCacheUnitTest
      * <p>
      * @throws IOException
      */
-    public void testRecycleBin()
-        throws IOException
-    {
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
-        cattr.setCacheName( "testRemoveItems" );
-        cattr.setMaxRecycleBinSize( 2 );
-        cattr.setOptimizeAtRemoveCount( 7 );
-        cattr.setMaxKeySize( 5 );
-        cattr.setMaxPurgatorySize( 0 );
-        cattr.setDiskPath( "target/test-sandbox/BreakIndexTest" );
-        IndexedDiskCache<String, String> disk = new IndexedDiskCache<String, 
String>( cattr );
-
-        String[] test = { "a", "bb", "ccc", "dddd", "eeeee", "ffffff", 
"ggggggg", "hhhhhhhhh", "iiiiiiiiii" };
-        String[] expect = { null, "bb", "ccc", null, null, "ffffff", null, 
"hhhhhhhhh", "iiiiiiiiii" };
-
-        //System.out.println( "------------------------- testRecycleBin " );
-
-        for ( int i = 0; i < 6; i++ )
-        {
-            ICacheElement<String, String> element = new CacheElement<String, 
String>( "testRecycleBin", "key:" + test[i], test[i] );
-            //System.out.println( "About to add " + "key:" + test[i] + " i = " 
+ i );
-            disk.processUpdate( element );
-        }
-
-        for ( int i = 3; i < 5; i++ )
-        {
-            //System.out.println( "About to remove " + "key:" + test[i] + " i 
= " + i );
-            disk.remove( "key:" + test[i] );
-        }
-
-        // there was a bug where 7 would try to be put in the empty slot left 
by 4's removal, but it
-        // will not fit.
-        for ( int i = 7; i < 9; i++ )
-        {
-            ICacheElement<String, String> element = new CacheElement<String, 
String>( "testRecycleBin", "key:" + test[i], test[i] );
-            //System.out.println( "About to add " + "key:" + test[i] + " i = " 
+ i );
-            disk.processUpdate( element );
-        }
-
-        try
-        {
-            for ( int i = 0; i < 9; i++ )
-            {
-                ICacheElement<String, String> element = disk.get( "key:" + 
test[i] );
-                if ( element != null )
-                {
-                    //System.out.println( "element = " + element.getVal() );
-                }
-                else
-                {
-                    //System.out.println( "null --" + "key:" + test[i] );
-                }
-
-                String expectedValue = expect[i];
-                if ( expectedValue == null )
-                {
-                    assertNull( "Expected a null element", element );
-                }
-                else
-                {
-                    assertNotNull( "The element for key [" + "key:" + test[i] 
+ "] should not be null. i = " + i,
-                                   element );
-                    assertEquals( "Elements contents do not match expected", 
element.getVal(), expectedValue );
-                }
-            }
-        }
-        catch ( Exception e )
-        {
-            e.printStackTrace();
-            fail( "Should not get an exception: " + e.toString() );
-        }
-
-        disk.removeAll();
-    }
+  
 
     /**
      * Verify that the overlap check returns true when there are no overlaps.
@@ -212,7 +140,7 @@ public class IndexDiskCacheUnitTest
     public void testCheckForDedOverlaps_noOverlap()
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testCheckForDedOverlaps_noOverlap" );
         cattr.setDiskPath( "target/test-sandbox/UnitTest" );
         IndexedDiskCache<String, String> disk = new IndexedDiskCache<String, 
String>( cattr );
@@ -240,7 +168,7 @@ public class IndexDiskCacheUnitTest
     public void testCheckForDedOverlaps_overlaps()
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testCheckForDedOverlaps_overlaps" );
         cattr.setDiskPath( "target/test-sandbox/UnitTest" );
         IndexedDiskCache<String, String> disk = new IndexedDiskCache<String, 
String>( cattr );
@@ -273,7 +201,7 @@ public class IndexDiskCacheUnitTest
         throws IOException, InterruptedException
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testFileSize" );
         cattr.setDiskPath( "target/test-sandbox/UnitTest" );
         IndexedDiskCache<Integer, DiskTestObject> disk = new 
IndexedDiskCache<Integer, DiskTestObject>( cattr );
@@ -312,7 +240,7 @@ public class IndexDiskCacheUnitTest
         // SETUP
         int numberToInsert = 20;
 
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRecyleBinSize" );
         cattr.setDiskPath( "target/test-sandbox/UnitTest" );
         cattr.setMaxRecycleBinSize( numberToInsert );
@@ -321,7 +249,7 @@ public class IndexDiskCacheUnitTest
         cattr.setMaxPurgatorySize( numberToInsert );
         IndexedDiskCache<Integer, DiskTestObject> disk = new 
IndexedDiskCache<Integer, DiskTestObject>( cattr );
 
-        int bytes = 24;
+        int bytes = 1;
         ICacheElement<Integer, DiskTestObject>[] elements = 
DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, 
cattr
             .getCacheName() );
 
@@ -358,7 +286,7 @@ public class IndexDiskCacheUnitTest
         // SETUP
         int numberToInsert = 20;
 
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRecyleBinUsage" );
         cattr.setDiskPath( "target/test-sandbox/UnitTest" );
         cattr.setMaxRecycleBinSize( numberToInsert );
@@ -368,7 +296,7 @@ public class IndexDiskCacheUnitTest
         IndexedDiskCache<Integer, DiskTestObject> disk = new 
IndexedDiskCache<Integer, DiskTestObject>( cattr );
 
         // we will reuse these
-        int bytes = 24;
+        int bytes = 1;
         ICacheElement<Integer, DiskTestObject>[] elements = 
DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, 
cattr
             .getCacheName() );
 
@@ -415,7 +343,7 @@ public class IndexDiskCacheUnitTest
         throws IOException, InterruptedException
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testBytesFreeSize" );
         cattr.setDiskPath( "target/test-sandbox/UnitTest" );
         IndexedDiskCache<Integer, DiskTestObject> disk = new 
IndexedDiskCache<Integer, DiskTestObject>( cattr );
@@ -468,7 +396,7 @@ public class IndexDiskCacheUnitTest
     public void testRemove_PartialKey()
         throws IOException
     {
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRemove_PartialKey" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -513,7 +441,7 @@ public class IndexDiskCacheUnitTest
         throws IOException
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRemove_Group" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -583,7 +511,7 @@ public class IndexDiskCacheUnitTest
         throws Exception
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testUpdate_EventLogging_simple" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTestCEL" );
@@ -614,7 +542,7 @@ public class IndexDiskCacheUnitTest
         throws Exception
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testGet_EventLogging_simple" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTestCEL" );
@@ -641,7 +569,7 @@ public class IndexDiskCacheUnitTest
         throws Exception
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testGetMultiple_EventLogging_simple" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTestCEL" );
@@ -672,7 +600,7 @@ public class IndexDiskCacheUnitTest
         throws Exception
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRemoveAll_EventLogging_simple" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTestCEL" );
@@ -699,7 +627,7 @@ public class IndexDiskCacheUnitTest
         throws Exception
     {
         // SETUP
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( "testRemoveAll_EventLogging_simple" );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTestCEL" );
@@ -729,7 +657,7 @@ public class IndexDiskCacheUnitTest
         int items = 200;
 
         String cacheName = "testPutGetMatching_SmallWait";
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -762,7 +690,7 @@ public class IndexDiskCacheUnitTest
         int items = 200;
 
         String cacheName = "testPutGetMatching_NoWait";
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -803,7 +731,7 @@ public class IndexDiskCacheUnitTest
 
         String cacheName = "testUTF8String";
 
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -846,7 +774,7 @@ public class IndexDiskCacheUnitTest
 
         String cacheName = "testUTF8ByteArray";
 
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -877,7 +805,7 @@ public class IndexDiskCacheUnitTest
     {
         // SETUP
         String cacheName = "testProcessUpdate_Simple";
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -907,7 +835,7 @@ public class IndexDiskCacheUnitTest
     {
         // SETUP
         String cacheName = "testProcessUpdate_SameKeySameSize";
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -944,7 +872,7 @@ public class IndexDiskCacheUnitTest
     {
         // SETUP
         String cacheName = "testProcessUpdate_SameKeySmallerSize";
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
@@ -982,7 +910,7 @@ public class IndexDiskCacheUnitTest
     {
         // SETUP
         String cacheName = "testProcessUpdate_SameKeyBiggerSize";
-        IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+        IndexedDiskCacheAttributes cattr = getCacheAttributes();
         cattr.setCacheName( cacheName );
         cattr.setMaxKeySize( 100 );
         cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );

Added: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestCount.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestCount.java?rev=1671552&view=auto
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestCount.java
 (added)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestCount.java
 Mon Apr  6 15:28:10 2015
@@ -0,0 +1,91 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+import java.io.IOException;
+
+import 
org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes.DiskLimitType;
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+
+public class IndexDiskCacheUnitTestCount extends IndexDiskCacheUnitTest {
+
+       @Override
+       public IndexedDiskCacheAttributes getCacheAttributes() {
+               IndexedDiskCacheAttributes ret = new 
IndexedDiskCacheAttributes();
+               ret.setDiskLimitType(DiskLimitType.COUNT);
+               return ret;
+       }
+         public void testRecycleBin()
+                       throws IOException
+                   {
+                       IndexedDiskCacheAttributes cattr = getCacheAttributes();
+                       cattr.setCacheName( "testRemoveItems" );
+                       cattr.setMaxRecycleBinSize( 2 );
+                       cattr.setOptimizeAtRemoveCount( 7 );
+                       cattr.setMaxKeySize( 5 );
+                       cattr.setMaxPurgatorySize( 0 );
+                       cattr.setDiskPath( "target/test-sandbox/BreakIndexTest" 
);
+                       IndexedDiskCache<String, String> disk = new 
IndexedDiskCache<String, String>( cattr );
+
+                       String[] test = { "a", "bb", "ccc", "dddd", "eeeee", 
"ffffff", "ggggggg", "hhhhhhhhh", "iiiiiiiiii" };
+                       String[] expect = { null, "bb", "ccc", null, null, 
"ffffff", null, "hhhhhhhhh", "iiiiiiiiii" };
+
+                       //System.out.println( "------------------------- 
testRecycleBin " );
+
+                       for ( int i = 0; i < 6; i++ )
+                       {
+                           ICacheElement<String, String> element = new 
CacheElement<String, String>( "testRecycleBin", "key:" + test[i], test[i] );
+                           //System.out.println( "About to add " + "key:" + 
test[i] + " i = " + i );
+                           disk.processUpdate( element );
+                       }
+
+                       for ( int i = 3; i < 5; i++ )
+                       {
+                           //System.out.println( "About to remove " + "key:" + 
test[i] + " i = " + i );
+                           disk.remove( "key:" + test[i] );
+                       }
+
+                       // there was a bug where 7 would try to be put in the 
empty slot left by 4's removal, but it
+                       // will not fit.
+                       for ( int i = 7; i < 9; i++ )
+                       {
+                           ICacheElement<String, String> element = new 
CacheElement<String, String>( "testRecycleBin", "key:" + test[i], test[i] );
+                           //System.out.println( "About to add " + "key:" + 
test[i] + " i = " + i );
+                           disk.processUpdate( element );
+                       }
+
+                       try
+                       {
+                           for ( int i = 0; i < 9; i++ )
+                           {
+                               ICacheElement<String, String> element = 
disk.get( "key:" + test[i] );
+                               if ( element != null )
+                               {
+                                   //System.out.println( "element = " + 
element.getVal() );
+                               }
+                               else
+                               {
+                                   //System.out.println( "null --" + "key:" + 
test[i] );
+                               }
+
+                               String expectedValue = expect[i];
+                               if ( expectedValue == null )
+                               {
+                                   assertNull( "Expected a null element", 
element );
+                               }
+                               else
+                               {
+                                   assertNotNull( "The element for key [" + 
"key:" + test[i] + "] should not be null. i = " + i,
+                                                  element );
+                                   assertEquals( "Elements contents do not 
match expected", element.getVal(), expectedValue );
+                               }
+                           }
+                       }
+                       catch ( Exception e )
+                       {
+                           e.printStackTrace();
+                           fail( "Should not get an exception: " + 
e.toString() );
+                       }
+
+                       disk.removeAll();
+                   }
+}

Propchange: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestCount.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestSize.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestSize.java?rev=1671552&view=auto
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestSize.java
 (added)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestSize.java
 Mon Apr  6 15:28:10 2015
@@ -0,0 +1,92 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+import java.io.IOException;
+
+import org.apache.commons.jcs.auxiliary.disk.DiskTestObject;
+import 
org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes.DiskLimitType;
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+
+public class IndexDiskCacheUnitTestSize extends IndexDiskCacheUnitTest {
+
+       @Override
+       public IndexedDiskCacheAttributes getCacheAttributes() {
+               IndexedDiskCacheAttributes ret = new 
IndexedDiskCacheAttributes();
+               ret.setDiskLimitType(DiskLimitType.SIZE);
+               return ret;
+       }
+         public void testRecycleBin()
+                       throws IOException
+                   {
+                       IndexedDiskCacheAttributes cattr = getCacheAttributes();
+                       cattr.setCacheName( "testRemoveItems" );
+                       cattr.setMaxRecycleBinSize( 2 );
+                       cattr.setOptimizeAtRemoveCount( 7 );
+                       cattr.setMaxKeySize( 8); // 1kb DiskTestObject takes 
1420 bytes, so 5*1420 = 7100, so to keep 5 ojbects, we need max key size of 8
+                       cattr.setMaxPurgatorySize( 0 );
+                       cattr.setDiskPath( "target/test-sandbox/BreakIndexTest" 
);
+                       IndexedDiskCache<String, DiskTestObject> disk = new 
IndexedDiskCache<String, DiskTestObject>( cattr );
+
+                       String[] test = { "a", "bb", "ccc", "dddd", "eeeee", 
"ffffff", "ggggggg", "hhhhhhhhh", "iiiiiiiiii" };
+                       String[] expect = { null, "bb", "ccc", null, null, 
"ffffff", null, "hhhhhhhhh", "iiiiiiiiii" };
+                       DiskTestObject value = 
DiskTestObjectUtil.createCacheElementsWithTestObjects( 1, 1, cattr 
.getCacheName())[0].getVal();
+                       //System.out.println( "------------------------- 
testRecycleBin " );
+
+                       for ( int i = 0; i < 6; i++ )
+                       {
+                           ICacheElement<String, DiskTestObject> element = new 
CacheElement<String, DiskTestObject>( "testRecycleBin", "key:" + test[i], 
value);
+                           //System.out.println( "About to add " + "key:" + 
test[i] + " i = " + i );
+                           disk.processUpdate( element );
+                       }
+
+                       for ( int i = 3; i < 5; i++ )
+                       {
+                           //System.out.println( "About to remove " + "key:" + 
test[i] + " i = " + i );
+                           disk.remove( "key:" + test[i] );
+                       }
+
+                       // there was a bug where 7 would try to be put in the 
empty slot left by 4's removal, but it
+                       // will not fit.
+                       for ( int i = 7; i < 9; i++ )
+                       {
+                           ICacheElement<String, DiskTestObject> element = new 
CacheElement<String, DiskTestObject>( "testRecycleBin", "key:" + test[i], 
value);
+                           //System.out.println( "About to add " + "key:" + 
test[i] + " i = " + i );
+                           disk.processUpdate( element );
+                       }
+
+                       try
+                       {
+                           for ( int i = 0; i < 9; i++ )
+                           {
+                               ICacheElement<String, DiskTestObject> element = 
disk.get( "key:" + test[i] );
+                               if ( element != null )
+                               {
+                                   //System.out.println( "element = " + 
element.getVal() );
+                               }
+                               else
+                               {
+                                   //System.out.println( "null --" + "key:" + 
test[i] );
+                               }
+
+                               String expectedValue = expect[i];
+                               if ( expectedValue == null )
+                               {
+                                   assertNull( "Expected a null element", 
element );
+                               }
+                               else
+                               {
+                                   assertNotNull( "The element for key [" + 
"key:" + test[i] + "] should not be null. i = " + i,
+                                                  element );
+                                   assertEquals( "Elements contents do not 
match expected", element.getVal(), value );
+                               }
+                           }
+                       }
+                       catch ( Exception e )
+                       {
+                           e.printStackTrace();
+                           fail( "Should not get an exception: " + 
e.toString() );
+                       }
+
+                       disk.removeAll();
+                   }
+}

Propchange: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTestSize.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java
 Mon Apr  6 15:28:10 2015
@@ -113,7 +113,7 @@ public class IndexedDiskCacheSameRegionC
             public void runTest()
                 throws Exception
             {
-                this.runTestForRegion( "indexedRegion4", 0, 5200 );
+                this.runTestForRegion( "indexedRegion4", 0, 5100 );
             }
         } );
 

Added: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/LRUMapSizeVsCount.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/LRUMapSizeVsCount.java?rev=1671552&view=auto
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/LRUMapSizeVsCount.java
 (added)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/LRUMapSizeVsCount.java
 Mon Apr  6 15:28:10 2015
@@ -0,0 +1,246 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.commons.jcs.JCSvsHashtablePerformanceTest;
+import org.apache.commons.jcs.TestLogConfigurationUtil;
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache;
+import org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache;
+import 
org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes;
+import 
org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskElementDescriptor;
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+
+import java.util.Map;
+
+/**
+ * This ensures that the jcs version of the LRU map is as fast as the commons
+ * version. It has been testing at .6 to .7 times the commons LRU.
+ * <p>
+ * @author aaronsm
+ *
+ */
+public class LRUMapSizeVsCount
+    extends TestCase
+{
+    /** The put put ration after the test */
+    double ratioPut = 0;
+
+    /** The ratio after the test */
+    double ratioGet = 0;
+
+    /** put size / count  ratio */
+    float targetPut = 1.2f;
+
+    /** get size / count ratio */
+    float targetGet = 1.2f;
+
+    /** Time to loop */
+    int loops = 20;
+
+    /** items to put and get per loop */
+    int tries = 100000;
+
+    /**
+     * @param testName
+     */
+    public LRUMapSizeVsCount( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * A unit test suite for JUnit
+     * <p>
+     * @return The test suite
+     */
+    public static Test suite()
+    {
+        return new TestSuite( LRUMapSizeVsCount.class );
+    }
+
+    /**
+     * A unit test for JUnit
+     *
+     * @throws Exception
+     *                Description of the Exception
+     */
+    public void testSimpleLoad()
+        throws Exception
+    {
+        doWork();
+        assertTrue( this.ratioPut < targetPut );
+        assertTrue( this.ratioGet < targetGet );
+    }
+
+    /**
+     *
+     */
+    public void doWork()
+    {
+        long start = 0;
+        long end = 0;
+        long time = 0;
+        float tPer = 0;
+
+        long putTotalCount = 0;
+        long getTotalCount = 0;
+        long putTotalSize = 0;
+        long getTotalSize = 0;
+        
+        long minTimeSizePut = Long.MAX_VALUE;
+        long minTimeSizeGet = Long.MAX_VALUE;
+        long minTimeCountPut = Long.MAX_VALUE;
+        long minTimeCountGet = Long.MAX_VALUE;
+
+        String cacheName = "LRUMap";
+        String cache2Name = "";
+
+        try
+        {
+               IndexedDiskCacheAttributes cattr = new 
IndexedDiskCacheAttributes();
+               cattr.setName("junit");
+               cattr.setCacheName("junit");
+               cattr.setDiskPath(".");
+               IndexedDiskCache<String, String> idc = new 
IndexedDiskCache<String, String>(cattr);
+
+                       Map<String, IndexedDiskElementDescriptor> cacheCount = 
idc.new LRUMapCountLimited( tries );
+                       Map<String, IndexedDiskElementDescriptor> cacheSize = 
idc.new LRUMapSizeLimited( tries/1024/2 );
+
+            for ( int j = 0; j < loops; j++ )
+            {
+                cacheName = "LRU Count           ";
+                start = System.currentTimeMillis();
+                for ( int i = 0; i < tries; i++ )
+                {
+                    cacheCount.put( "key:" + i,  new 
IndexedDiskElementDescriptor(i, i) );
+                }
+                end = System.currentTimeMillis();
+                time = end - start;
+                putTotalCount += time;
+                minTimeCountPut = Math.min(time, minTimeCountPut);
+                tPer = Float.intBitsToFloat( (int) time ) / 
Float.intBitsToFloat( tries );
+                System.out.println( cacheName + " put time for " + tries + " = 
" + time + "; millis per = " + tPer );
+
+                start = System.currentTimeMillis();
+                for ( int i = 0; i < tries; i++ )
+                {
+                    cacheCount.get( "key:" + i );
+                }
+                end = System.currentTimeMillis();
+                time = end - start;
+                getTotalCount += time;
+                minTimeCountGet = Math.min(minTimeCountGet, time);
+                tPer = Float.intBitsToFloat( (int) time ) / 
Float.intBitsToFloat( tries );
+                System.out.println( cacheName + " get time for " + tries + " = 
" + time + "; millis per = " + tPer );
+
+                ///////////////////////////////////////////////////////////////
+                cache2Name = "LRU Size            ";
+                //or LRUMapJCS
+                //cache2Name = "Hashtable";
+                //Hashtable cache2 = new Hashtable();
+                start = System.currentTimeMillis();
+                for ( int i = 0; i < tries; i++ )
+                {
+                    cacheSize.put( "key:" + i, new 
IndexedDiskElementDescriptor(i, i) );
+                }
+                end = System.currentTimeMillis();
+                time = end - start;
+                putTotalSize += time;
+                minTimeSizePut = Math.min(minTimeSizePut, time);
+                
+                tPer = Float.intBitsToFloat( (int) time ) / 
Float.intBitsToFloat( tries );
+                System.out.println( cache2Name + " put time for " + tries + " 
= " + time + "; millis per = " + tPer );
+
+                start = System.currentTimeMillis();
+                for ( int i = 0; i < tries; i++ )
+                {
+                    cacheSize.get( "key:" + i );
+                }
+                end = System.currentTimeMillis();
+                time = end - start;
+                getTotalSize += time;
+                minTimeSizeGet = Math.min(minTimeSizeGet, time);
+                
+                tPer = Float.intBitsToFloat( (int) time ) / 
Float.intBitsToFloat( tries );
+                System.out.println( cache2Name + " get time for " + tries + " 
= " + time + "; millis per = " + tPer );
+
+                System.out.println( "\n" );
+            }
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace( System.out );
+            System.out.println( e );
+        }
+
+        long putAvCount = putTotalCount / loops;
+        long getAvCount = getTotalCount / loops;
+        long putAvSize = putTotalSize / loops;
+        long getAvSize = getTotalSize / loops;
+
+        System.out.println( "Finished " + loops + " loops of " + tries + " 
gets and puts" );
+
+        System.out.println( "\n" );
+        System.out.println( "Put average for " + cacheName +  " = " + 
putAvCount );
+        System.out.println( "Put average for " + cache2Name + " = " + 
putAvSize );
+        ratioPut = (putAvSize *1.0) / putAvCount;
+        System.out.println( cache2Name.trim() + " puts took " + ratioPut + " 
times the " + cacheName.trim() + ", the goal is <" + targetPut
+            + "x" );
+        
+        System.out.println( "\n" );
+        System.out.println( "Put minimum for " + cacheName +  " = " + 
minTimeCountPut );
+        System.out.println( "Put minimum for " + cache2Name + " = " + 
minTimeSizePut );
+        ratioPut = (minTimeSizePut * 1.0) / minTimeCountPut;
+        System.out.println( cache2Name.trim() + " puts took " + ratioPut + " 
times the " + cacheName.trim() + ", the goal is <" + targetPut
+            + "x" );
+
+        System.out.println( "\n" );
+        System.out.println( "Get average for " + cacheName + " = " + 
getAvCount );
+        System.out.println( "Get average for " + cache2Name + " = " + 
getAvSize );
+        ratioGet = Float.intBitsToFloat( (int) getAvCount ) / 
Float.intBitsToFloat( (int) getAvSize );
+        ratioGet = (getAvSize * 1.0) / getAvCount;
+        System.out.println( cache2Name.trim() + " gets took " + ratioGet + " 
times the " + cacheName.trim() + ", the goal is <" + targetGet
+            + "x" );
+        
+        System.out.println( "\n" );
+        System.out.println( "Get minimum for " + cacheName +  " = " + 
minTimeCountGet );
+        System.out.println( "Get minimum for " + cache2Name + " = " + 
minTimeSizeGet );
+        ratioPut = (minTimeSizeGet * 1.0) / minTimeCountGet;
+        System.out.println( cache2Name.trim() + " puts took " + ratioPut + " 
times the " + cacheName.trim() + ", the goal is <" + targetGet
+            + "x" );
+
+    }
+
+    /**
+     * @param args
+     */
+    public static void main( String args[] )
+    {
+       LRUMapSizeVsCount test = new LRUMapSizeVsCount( "command" );
+        test.doWork();
+    }
+
+}

Propchange: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/indexed/LRUMapSizeVsCount.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/JCSvsCommonsLRUMapPerformanceTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/JCSvsCommonsLRUMapPerformanceTest.java?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/JCSvsCommonsLRUMapPerformanceTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/JCSvsCommonsLRUMapPerformanceTest.java
 Mon Apr  6 15:28:10 2015
@@ -50,7 +50,7 @@ public class JCSvsCommonsLRUMapPerforman
     int loops = 20;
 
     /** number to test with */
-    int tries = 50000;
+    int tries = 100000;
 
     /**
      * @param testName

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/LRUMapPerformanceTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/LRUMapPerformanceTest.java?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/LRUMapPerformanceTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/struct/LRUMapPerformanceTest.java
 Mon Apr  6 15:28:10 2015
@@ -52,7 +52,7 @@ public class LRUMapPerformanceTest
     int loops = 20;
 
     /** items to put and get per loop */
-    int tries = 50000;
+    int tries = 100000;
 
     /**
      * @param testName

Modified: commons/proper/jcs/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/changes/changes.xml?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/changes/changes.xml (original)
+++ commons/proper/jcs/trunk/src/changes/changes.xml Mon Apr  6 15:28:10 2015
@@ -20,6 +20,9 @@
        </properties>
        <body>
         <release version="2.0" date="unreleased" description="JDK 1.6 based 
major release">
+            <action issue="JCS-147" dev="tv" type="add" due-to="Wiktor 
Niesiobedzki">
+                Provide file size limitation for Block Disk Cache and Indexed 
Disk Cache
+            </action>
             <action issue="JCS-96" dev="tv" type="fix" due-to="Gregory 
Fernandez">
                 Incomplete shutdown of RemoteCacheServer
             </action>

Modified: commons/proper/jcs/trunk/xdocs/BlockDiskCache.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/xdocs/BlockDiskCache.xml?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- commons/proper/jcs/trunk/xdocs/BlockDiskCache.xml (original)
+++ commons/proper/jcs/trunk/xdocs/BlockDiskCache.xml Mon Apr  6 15:28:10 2015
@@ -42,6 +42,20 @@
                                be optimized. Once the maximum number of keys is
                                reached, blocks will be reused.
                        </p>
+                       
+                       <section name="Size limitation">
+                               <p>
+                                       There are two ways to limit the cache 
size: using element
+                                       count and element size. When using 
element count, in disk
+                                       store there will be at most MaxKeySize 
elements (not disk 
+                                       blocks). When using element size, there 
will be at most
+                                       KeySize kB of elements stored in the 
data file. As the Block 
+                                       Disk Cache doesn't need optimization, 
the data file 
+                                       will be not longer than specified. The 
limit does not
+                                       cover the key file size. The mode is 
chosen using DiskLimitType. 
+                                       Allowed values are: COUNT and SIZE.
+                               </p>
+                       </section>
 
                        <subsection name="Example cache.ccf">
                                <source>

Modified: commons/proper/jcs/trunk/xdocs/IndexedDiskAuxCache.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/xdocs/IndexedDiskAuxCache.xml?rev=1671552&r1=1671551&r2=1671552&view=diff
==============================================================================
--- commons/proper/jcs/trunk/xdocs/IndexedDiskAuxCache.xml (original)
+++ commons/proper/jcs/trunk/xdocs/IndexedDiskAuxCache.xml Mon Apr  6 15:28:10 
2015
@@ -73,7 +73,7 @@
                                        is retrieved from purgatory it will no 
longer be
                                        written to disk, since the cache hub 
will move it
                                        back to memory. Using purgatory insures 
that there
-                                       is no wait for disk writes, unecessary 
disk writes
+                                       is no wait for disk writes, unnecessary 
disk writes
                                        are avoided for borderline items, and 
the items are
                                        always available.
                                </p>
@@ -89,6 +89,20 @@
                                        mechanism.
                                </p>
                        </subsection>
+                       
+                       <subsection name="Size limitation">
+                               <p>
+                                       There are two ways to limit the cache 
size: using element
+                                       count and element size. When using 
element count, in disk
+                                       store there will be at most MaxKeySize 
elements. When using
+                                       element size, there will be at most 
KeySize kB of elements
+                                       stored in the data file. The file can 
be bigger due to 
+                                       fragmentation. The limit does not cover 
the size of key file
+                                       so the total space occupied by the 
cache might be a bit bigger.
+                                       The mode is chosen using DiskLimitType. 
Allowed values are: 
+                                       COUNT and SIZE.
+                               </p>
+                       </subsection>
 
                        <subsection name="Configuration">
                                <p>
@@ -227,6 +241,7 @@ jcs.auxiliary.DC.attributes.MaxKeySize=1
 jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
 jcs.auxiliary.DC.attributes.OptimizeOnShutdown=true
 jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500
+jcs.auxiliary.DC.attributes.DiskLimitType=COUNT
         ]]>
                                </source>
                        </subsection>


Reply via email to