Modified:
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheKeyStoreUnitTest.java
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheKeyStoreUnitTest.java?rev=432579&r1=432578&r2=432579&view=diff
==============================================================================
---
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheKeyStoreUnitTest.java
(original)
+++
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheKeyStoreUnitTest.java
Fri Aug 18 06:30:45 2006
@@ -40,7 +40,7 @@
{
IElementAttributes eAttr = new ElementAttributes();
eAttr.setIsSpool( true );
- ICacheElement element = new CacheElement( "testStoreKeys", "key:"
+ i, "data:" + i );
+ ICacheElement element = new CacheElement( cattr.getCacheName(),
"key:" + i, "data:" + i );
element.setElementAttributes( eAttr );
disk.doUpdate( element );
}
@@ -82,7 +82,7 @@
throws Exception
{
IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testOptiimize" );
+ cattr.setCacheName( "testOptimize" );
cattr.setMaxKeySize( 100 );
cattr.setDiskPath( "target/test-sandbox/KeyStoreUnitTest" );
IndexedDiskCache disk = new IndexedDiskCache( cattr );
@@ -94,7 +94,7 @@
{
IElementAttributes eAttr = new ElementAttributes();
eAttr.setIsSpool( true );
- ICacheElement element = new CacheElement( "testOptiimize", "key:"
+ i, "data:" + i );
+ ICacheElement element = new CacheElement( cattr.getCacheName(),
"key:" + i, "data:" + i );
element.setElementAttributes( eAttr );
disk.doUpdate( element );
}
@@ -103,7 +103,7 @@
IElementAttributes eAttr = new ElementAttributes();
eAttr.setIsSpool( true );
- ICacheElement elementSetup = new CacheElement( "testOptiimize", "key:"
+ "A", "data:" + "A" );
+ ICacheElement elementSetup = new CacheElement( cattr.getCacheName(),
"key:" + "A", "data:" + "A" );
elementSetup.setElementAttributes( eAttr );
disk.doUpdate( elementSetup );
@@ -115,7 +115,7 @@
long preSize = disk.getDataFileSize();
// synchronous versoin
- disk.optimizeRealTime();
+ disk.optimizeFile(); //deoptimizeRealTime();
long postSize = disk.getDataFileSize();
System.out.println( "preAddRemoveSize " + preAddRemoveSize );
@@ -130,11 +130,6 @@
ICacheElement element = disk.doGet( "key:" + i );
assertNotNull( "postsave, Should have recevied an element.",
element );
assertEquals( "postsave, element is wrong.", "data:" + i,
element.getVal() );
- }
-
-
-
- }
-
-
+ }
+ }
}
Added:
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheOptimizationUnitTest.java
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheOptimizationUnitTest.java?rev=432579&view=auto
==============================================================================
---
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheOptimizationUnitTest.java
(added)
+++
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheOptimizationUnitTest.java
Fri Aug 18 06:30:45 2006
@@ -0,0 +1,123 @@
+package org.apache.jcs.auxiliary.disk.indexed;
+
+import java.io.Serializable;
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import org.apache.jcs.engine.CacheElement;
+import org.apache.jcs.engine.behavior.ICacheElement;
+
+/**
+ * @author Aaron Smuts
+ */
+public class IndexedDiskCacheOptimizationUnitTest
+ extends TestCase
+{
+
+ /**
+ * Set the optimize at remove count to 10. Add 20. Check the file size.
Remove 10. Check the
+ * times optimized. Check the file size.
+ * @throws Exception
+ */
+ public void testBasicOptimization()
+ throws Exception
+ {
+ int removeCount = 50;
+
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testOptimization" );
+ cattr.setMaxKeySize( removeCount * 3 );
+ cattr.setOptimizeAtRemoveCount( removeCount );
+ cattr.setMaxRecycleBinSize( removeCount * 3 );
+ cattr.setDiskPath( "target/test-sandbox/testOptimization" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ int numberToInsert = removeCount * 2;
+
+ int[] sizes = new int[numberToInsert];
+ Random random = new Random( 89 );
+ for ( int i = 0; i < numberToInsert; i++ )
+ {
+ int bytes = random.nextInt( 20 );
+ // 4-24 KB
+ int size = ( bytes + 4 ) * 1024;
+ sizes[i] = size;
+ Tile tile = new Tile( new Integer( i ), new byte[size] );
+ // images
+
+ ICacheElement element = new CacheElement( cattr.getCacheName(),
tile.id, tile );
+ disk.doUpdate( element );
+ }
+
+ Thread.sleep( 1000 );
+ long sizeBeforeRemove = disk.getDataFileSize();
+ System.out.println( "file sizeBeforeRemove " + sizeBeforeRemove );
+ System.out.println( "totalSize inserted " + totalSize( sizes,
numberToInsert ) );
+
+ for ( int i = 0; i < removeCount; i++ )
+ {
+ disk.doRemove( new Integer( i ) );
+ }
+
+ Thread.sleep( 100 );
+ Thread.yield();
+ Thread.sleep( 100 );
+ long sizeAfterRemove = disk.getDataFileSize();
+ System.out.println( "file sizeAfterRemove " + sizeAfterRemove );
+ System.out.println( "totalSize expected after remove " + totalSize(
sizes, removeCount ) );
+
+ assertTrue( "The post optimization size should be smaller.",
sizeAfterRemove < sizeBeforeRemove );
+
+ long reality = Math.abs( totalSize( sizes, removeCount ) -
sizeAfterRemove );
+ assertTrue( "The file size should be within 15% of the expected size.
reality = " + reality,
+ reality < (sizeAfterRemove * 1.15 ) - sizeAfterRemove );
+ // TODO figure out the estimated size purportion.
+ }
+
+ /**
+ * Total from the start to the endPostion.
+ * <p>
+ * @param sizes
+ * @param endPosition
+ * @return size
+ */
+ private long totalSize( int[] sizes, int endPosition )
+ {
+ long total = 0;
+ for ( int i = 0; i < endPosition; i++ )
+ {
+ total += sizes[i];
+ }
+ return total;
+ }
+
+ /**
+ * Resembles a cached image.
+ */
+ private static class Tile
+ implements Serializable
+ {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Key
+ */
+ public Integer id;
+
+ /**
+ * Byte size
+ */
+ public byte[] imageBytes;
+
+ /**
+ * @param id
+ * @param imageBytes
+ */
+ public Tile( Integer id, byte[] imageBytes )
+ {
+ this.id = id;
+ this.imageBytes = imageBytes;
+ }
+ }
+}
|