You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-dev@jakarta.apache.org by as...@apache.org on 2008/04/11 20:43:31 UTC
svn commit: r647264 [3/6] - in /jakarta/jcs/trunk: ./
src/java/org/apache/jcs/access/ src/java/org/apache/jcs/access/behavior/
src/java/org/apache/jcs/auxiliary/ src/java/org/apache/jcs/auxiliary/disk/
src/java/org/apache/jcs/auxiliary/lateral/ src/jav...
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java?rev=647264&r1=647263&r2=647264&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java Fri Apr 11 11:43:26 2008
@@ -1,543 +1,561 @@
-package org.apache.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 java.io.IOException;
-
-import junit.framework.TestCase;
-
-import org.apache.jcs.engine.CacheElement;
-import org.apache.jcs.engine.ElementAttributes;
-import org.apache.jcs.engine.behavior.ICacheElement;
-import org.apache.jcs.engine.behavior.IElementAttributes;
-import org.apache.jcs.engine.control.group.GroupAttrName;
-import org.apache.jcs.engine.control.group.GroupId;
-
-/**
- * Tests for common functionality.
- * <p>
- * @author Aaron Smuts
- */
-public class IndexDiskCacheUnitTest
- extends TestCase
-{
- /**
- * Simply verify that we can put items in the disk cache and retrieve them.
- */
- public void testSimplePutAndGet()
- {
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testSimplePutAndGet" );
- cattr.setMaxKeySize( 1000 );
- cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- disk.doRemoveAll();
-
- int cnt = 999;
- for ( int i = 0; i < cnt; i++ )
- {
- IElementAttributes eAttr = new ElementAttributes();
- eAttr.setIsSpool( true );
- ICacheElement element = new CacheElement( "testSimplePutAndGet", "key:" + i, "data:" + i );
- element.setElementAttributes( eAttr );
- disk.doUpdate( element );
- }
-
- for ( int i = 0; i < cnt; i++ )
- {
- ICacheElement element = disk.doGet( "key:" + i );
- assertNotNull( "Should have recevied an element.", element );
- assertEquals( "Element is wrong.", "data:" + i, element.getVal() );
- }
-
- System.out.println( disk.getStats() );
- }
-
- /**
- * Add some items to the disk cache and then remove them one by one.
- */
- public void testRemoveItems()
- {
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testRemoveItems" );
- cattr.setMaxKeySize( 100 );
- cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- disk.doRemoveAll();
-
- int cnt = 25;
- for ( int i = 0; i < cnt; i++ )
- {
- IElementAttributes eAttr = new ElementAttributes();
- eAttr.setIsSpool( true );
- ICacheElement element = new CacheElement( "testRemoveItems", "key:" + i, "data:" + i );
- element.setElementAttributes( eAttr );
- disk.doUpdate( element );
- }
-
- // remove each
- for ( int i = 0; i < cnt; i++ )
- {
- disk.remove( "key:" + i );
- ICacheElement element = disk.doGet( "key:" + i );
- assertNull( "Should not have recevied an element.", element );
- }
- }
-
- /**
- * Verify that we don't override the largest item.
- */
- public void testRecycleBin()
- {
- 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 disk = new IndexedDiskCache( 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 element = new CacheElement( "testRecycleBin", "key:" + test[i], test[i] );
- System.out.println( "About to add " + "key:" + test[i] + " i = " + i );
- disk.doUpdate( 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 element = new CacheElement( "testRecycleBin", "key:" + test[i], test[i] );
- System.out.println( "About to add " + "key:" + test[i] + " i = " + i );
- disk.doUpdate( element );
- }
-
- try
- {
- for ( int i = 0; i < 9; i++ )
- {
- ICacheElement 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.
- */
- public void testCheckForDedOverlaps_noOverlap()
- {
- // SETUP
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testCheckForDedOverlaps_noOverlap" );
- cattr.setDiskPath( "target/test-sandbox/UnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- int numDescriptors = 5;
- int pos = 0;
- IndexedDiskElementDescriptor[] sortedDescriptors = new IndexedDiskElementDescriptor[numDescriptors];
- for ( int i = 0; i < numDescriptors; i++ )
- {
- IndexedDiskElementDescriptor descriptor = new IndexedDiskElementDescriptor( pos, i * 2 );
- pos = pos + ( i * 2 ) + IndexedDisk.RECORD_HEADER;
- sortedDescriptors[i] = descriptor;
- }
-
- // DO WORK
- boolean result = disk.checkForDedOverlaps( sortedDescriptors );
-
- // VERIFY
- assertTrue( "There should be no overlap. it should be ok", result );
- }
-
- /**
- * Verify that the overlap check returns false when there are overlaps.
- */
- public void testCheckForDedOverlaps_overlaps()
- {
- // SETUP
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testCheckForDedOverlaps_overlaps" );
- cattr.setDiskPath( "target/test-sandbox/UnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- int numDescriptors = 5;
- int pos = 0;
- IndexedDiskElementDescriptor[] sortedDescriptors = new IndexedDiskElementDescriptor[numDescriptors];
- for ( int i = 0; i < numDescriptors; i++ )
- {
- IndexedDiskElementDescriptor descriptor = new IndexedDiskElementDescriptor( pos, i * 2 );
- // don't add the header + IndexedDisk.RECORD_HEADER;
- pos = pos + ( i * 2 );
- sortedDescriptors[i] = descriptor;
- }
-
- // DO WORK
- boolean result = disk.checkForDedOverlaps( sortedDescriptors );
-
- // VERIFY
- assertFalse( "There should be overlaps. it should be not ok", result );
- }
-
- /**
- * Verify that the file size is as expected.
- * @throws IOException
- * @throws InterruptedException
- */
- public void testFileSize()
- throws IOException, InterruptedException
- {
- // SETUP
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testFileSize" );
- cattr.setDiskPath( "target/test-sandbox/UnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- int numberToInsert = 20;
- int bytes = 24;
- ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
- .getCacheName() );
-
- for ( int i = 0; i < elements.length; i++ )
- {
- disk.doUpdate( elements[i] );
- }
-
- Thread.yield();
- Thread.sleep( 100 );
- Thread.yield();
-
- long expectedSize = DiskTestObjectUtil.totalSize( elements, numberToInsert );
- long resultSize = disk.getDataFileSize();
-
- System.out.println( "testFileSize stats " + disk.getStats() );
-
- assertEquals( "Wrong file size", expectedSize, resultSize );
- }
-
- /**
- * Verify that items are added to the recyle bin on removal.
- * <p>
- * @throws IOException
- * @throws InterruptedException
- */
- public void testRecyleBinSize()
- throws IOException, InterruptedException
- {
- // SETUP
- int numberToInsert = 20;
-
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testRecyleBinSize" );
- cattr.setDiskPath( "target/test-sandbox/UnitTest" );
- cattr.setMaxRecycleBinSize( numberToInsert );
- cattr.setOptimizeAtRemoveCount( numberToInsert );
- cattr.setMaxKeySize( numberToInsert * 2 );
- cattr.setMaxPurgatorySize( numberToInsert );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- int bytes = 24;
- ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
- .getCacheName() );
-
- for ( int i = 0; i < elements.length; i++ )
- {
- disk.doUpdate( elements[i] );
- }
-
- Thread.yield();
- Thread.sleep( 100 );
- Thread.yield();
-
- // remove half
- int numberToRemove = elements.length / 2;
- for ( int i = 0; i < numberToRemove; i++ )
- {
- disk.doRemove( elements[i].getKey() );
- }
-
- // verify that the recyle bin has the correct amount.
- assertEquals( "The recycle bin should have the number removed.", numberToRemove, disk.getRecyleBinSize() );
- }
-
- /**
- * Verify that items of the same size use recyle bin spots. Setup the receyle bin by removing
- * some items. Add some of the same size. Verify that the recyle count is the number added.
- * <p>
- * @throws IOException
- * @throws InterruptedException
- */
- public void testRecyleBinUsage()
- throws IOException, InterruptedException
- {
- // SETUP
- int numberToInsert = 20;
-
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testRecyleBinUsage" );
- cattr.setDiskPath( "target/test-sandbox/UnitTest" );
- cattr.setMaxRecycleBinSize( numberToInsert );
- cattr.setOptimizeAtRemoveCount( numberToInsert );
- cattr.setMaxKeySize( numberToInsert * 2 );
- cattr.setMaxPurgatorySize( numberToInsert );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- // we will reuse these
- int bytes = 24;
- ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
- .getCacheName() );
-
- // Add some to the disk
- for ( int i = 0; i < elements.length; i++ )
- {
- disk.doUpdate( elements[i] );
- }
-
- Thread.yield();
- Thread.sleep( 100 );
- Thread.yield();
-
- // remove half of those added
- int numberToRemove = elements.length / 2;
- for ( int i = 0; i < numberToRemove; i++ )
- {
- disk.doRemove( elements[i].getKey() );
- }
-
- // verify that the recyle bin has the correct amount.
- assertEquals( "The recycle bin should have the number removed.", numberToRemove, disk.getRecyleBinSize() );
-
- // add half as many as we removed. These should all use spots in the recycle bin.
- int numberToAdd = numberToRemove / 2;
- for ( int i = 0; i < numberToAdd; i++ )
- {
- disk.doUpdate( elements[i] );
- }
-
- // verify that we used the correct number of spots
- assertEquals( "The recycle bin should have the number removed." + disk.getStats(), numberToAdd, disk
- .getRecyleCount() );
- }
-
- /**
- * Verify that the data size is as expected after a remove and after a put that should use the
- * spots.
- * <p>
- * @throws IOException
- * @throws InterruptedException
- */
- public void testBytesFreeSize()
- throws IOException, InterruptedException
- {
- // SETUP
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testBytesFreeSize" );
- cattr.setDiskPath( "target/test-sandbox/UnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- int numberToInsert = 20;
- int bytes = 24;
- ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
- .getCacheName() );
-
- for ( int i = 0; i < elements.length; i++ )
- {
- disk.doUpdate( elements[i] );
- }
-
- Thread.yield();
- Thread.sleep( 100 );
- Thread.yield();
-
- // remove half of those added
- int numberToRemove = elements.length / 2;
- for ( int i = 0; i < numberToRemove; i++ )
- {
- disk.doRemove( elements[i].getKey() );
- }
-
- long expectedSize = DiskTestObjectUtil.totalSize( elements, numberToRemove );
- long resultSize = disk.getBytesFree();
-
- System.out.println( "testBytesFreeSize stats " + disk.getStats() );
-
- assertEquals( "Wrong bytes free size" + disk.getStats(), expectedSize, resultSize );
-
- // add half as many as we removed. These should all use spots in the recycle bin.
- int numberToAdd = numberToRemove / 2;
- for ( int i = 0; i < numberToAdd; i++ )
- {
- disk.doUpdate( elements[i] );
- }
-
- long expectedSize2 = DiskTestObjectUtil.totalSize( elements, numberToAdd );
- long resultSize2 = disk.getBytesFree();
- assertEquals( "Wrong bytes free size" + disk.getStats(), expectedSize2, resultSize2 );
- }
-
- /**
- * Add some items to the disk cache and then remove them one by one.
- */
- public void testRemove_PartialKey()
- {
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testRemove_PartialKey" );
- cattr.setMaxKeySize( 100 );
- cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- disk.doRemoveAll();
-
- int cnt = 25;
- for ( int i = 0; i < cnt; i++ )
- {
- IElementAttributes eAttr = new ElementAttributes();
- eAttr.setIsSpool( true );
- ICacheElement element = new CacheElement( "testRemove_PartialKey", i + ":key", "data:" + i );
- element.setElementAttributes( eAttr );
- disk.doUpdate( element );
- }
-
- // verif each
- for ( int i = 0; i < cnt; i++ )
- {
- ICacheElement element = disk.doGet( i + ":key" );
- assertNotNull( "Shoulds have recevied an element.", element );
- }
-
- // remove each
- for ( int i = 0; i < cnt; i++ )
- {
- disk.remove( i + ":" );
- ICacheElement element = disk.doGet( i + ":key" );
- assertNull( "Should not have recevied an element.", element );
- }
- }
-
- /**
- * Verify that group members are removed if we call remove with a group.
- */
- public void testRemove_Group()
- {
- // SETUP
- IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
- cattr.setCacheName( "testRemove_Group" );
- cattr.setMaxKeySize( 100 );
- cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
- IndexedDiskCache disk = new IndexedDiskCache( cattr );
-
- disk.doRemoveAll();
-
- String cacheName = "testRemove_Group_Region";
- String groupName = "testRemove_Group";
-
- int cnt = 25;
- for ( int i = 0; i < cnt; i++ )
- {
- GroupAttrName groupAttrName = getGroupAttrName( cacheName, groupName, i + ":key" );
-
- CacheElement element = new CacheElement( cacheName, groupAttrName, "data:" + i );
-
- IElementAttributes eAttr = new ElementAttributes();
- eAttr.setIsSpool( true );
- element.setElementAttributes( eAttr );
-
- disk.doUpdate( element );
- }
-
- // verify each
- for ( int i = 0; i < cnt; i++ )
- {
- GroupAttrName groupAttrName = getGroupAttrName( cacheName, groupName, i + ":key" );
- ICacheElement element = disk.doGet( groupAttrName );
- assertNotNull( "Should have recevied an element.", element );
- }
-
- // DO WORK
- // remove the group
- GroupId gid = new GroupId( cacheName, groupName );
- disk.remove( gid );
-
- for ( int i = 0; i < cnt; i++ )
- {
- GroupAttrName groupAttrName = getGroupAttrName( cacheName, groupName, i + ":key" );
- ICacheElement element = disk.doGet( groupAttrName );
-
- // VERIFY
- assertNull( "Should not have recevied an element.", element );
- }
-
- }
-
- /**
- * Internal method used for group functionality.
- * <p>
- * @param cacheName
- * @param group
- * @param name
- * @return GroupAttrName
- */
- private GroupAttrName getGroupAttrName( String cacheName, String group, Object name )
- {
- GroupId gid = new GroupId( cacheName, group );
- return new GroupAttrName( gid, name );
- }
-}
+package org.apache.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 java.io.IOException;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.apache.jcs.engine.CacheElement;
+import org.apache.jcs.engine.ElementAttributes;
+import org.apache.jcs.engine.behavior.ICacheElement;
+import org.apache.jcs.engine.behavior.IElementAttributes;
+import org.apache.jcs.engine.control.group.GroupAttrName;
+import org.apache.jcs.engine.control.group.GroupId;
+
+/**
+ * Tests for common functionality.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class IndexDiskCacheUnitTest
+ extends TestCase
+{
+ /**
+ * Simply verify that we can put items in the disk cache and retrieve them.
+ */
+ public void testSimplePutAndGet()
+ {
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testSimplePutAndGet" );
+ cattr.setMaxKeySize( 1000 );
+ cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ disk.doRemoveAll();
+
+ int cnt = 999;
+ for ( int i = 0; i < cnt; i++ )
+ {
+ IElementAttributes eAttr = new ElementAttributes();
+ eAttr.setIsSpool( true );
+ ICacheElement element = new CacheElement( "testSimplePutAndGet", "key:" + i, "data:" + i );
+ element.setElementAttributes( eAttr );
+ disk.doUpdate( element );
+ }
+
+ for ( int i = 0; i < cnt; i++ )
+ {
+ ICacheElement element = disk.doGet( "key:" + i );
+ assertNotNull( "Should have recevied an element.", element );
+ assertEquals( "Element is wrong.", "data:" + i, element.getVal() );
+ }
+
+ // Test that getMultiple returns all the expected values
+ Set keys = new HashSet();
+ for ( int i = 0; i < cnt; i++ )
+ {
+ keys.add( "key:" + i );
+ }
+
+ Map elements = disk.getMultiple( keys );
+ for ( int i = 0; i < cnt; i++ )
+ {
+ ICacheElement element = (ICacheElement) elements.get( "key:" + i );
+ assertNotNull( "element " + i + ":key is missing", element );
+ assertEquals( "value key:" + i, "data:" + i, element.getVal() );
+ }
+
+ System.out.println( disk.getStats() );
+ }
+
+ /**
+ * Add some items to the disk cache and then remove them one by one.
+ */
+ public void testRemoveItems()
+ {
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testRemoveItems" );
+ cattr.setMaxKeySize( 100 );
+ cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ disk.doRemoveAll();
+
+ int cnt = 25;
+ for ( int i = 0; i < cnt; i++ )
+ {
+ IElementAttributes eAttr = new ElementAttributes();
+ eAttr.setIsSpool( true );
+ ICacheElement element = new CacheElement( "testRemoveItems", "key:" + i, "data:" + i );
+ element.setElementAttributes( eAttr );
+ disk.doUpdate( element );
+ }
+
+ // remove each
+ for ( int i = 0; i < cnt; i++ )
+ {
+ disk.remove( "key:" + i );
+ ICacheElement element = disk.doGet( "key:" + i );
+ assertNull( "Should not have recevied an element.", element );
+ }
+ }
+
+ /**
+ * Verify that we don't override the largest item.
+ */
+ public void testRecycleBin()
+ {
+ 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 disk = new IndexedDiskCache( 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 element = new CacheElement( "testRecycleBin", "key:" + test[i], test[i] );
+ System.out.println( "About to add " + "key:" + test[i] + " i = " + i );
+ disk.doUpdate( 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 element = new CacheElement( "testRecycleBin", "key:" + test[i], test[i] );
+ System.out.println( "About to add " + "key:" + test[i] + " i = " + i );
+ disk.doUpdate( element );
+ }
+
+ try
+ {
+ for ( int i = 0; i < 9; i++ )
+ {
+ ICacheElement 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.
+ */
+ public void testCheckForDedOverlaps_noOverlap()
+ {
+ // SETUP
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testCheckForDedOverlaps_noOverlap" );
+ cattr.setDiskPath( "target/test-sandbox/UnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ int numDescriptors = 5;
+ int pos = 0;
+ IndexedDiskElementDescriptor[] sortedDescriptors = new IndexedDiskElementDescriptor[numDescriptors];
+ for ( int i = 0; i < numDescriptors; i++ )
+ {
+ IndexedDiskElementDescriptor descriptor = new IndexedDiskElementDescriptor( pos, i * 2 );
+ pos = pos + ( i * 2 ) + IndexedDisk.RECORD_HEADER;
+ sortedDescriptors[i] = descriptor;
+ }
+
+ // DO WORK
+ boolean result = disk.checkForDedOverlaps( sortedDescriptors );
+
+ // VERIFY
+ assertTrue( "There should be no overlap. it should be ok", result );
+ }
+
+ /**
+ * Verify that the overlap check returns false when there are overlaps.
+ */
+ public void testCheckForDedOverlaps_overlaps()
+ {
+ // SETUP
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testCheckForDedOverlaps_overlaps" );
+ cattr.setDiskPath( "target/test-sandbox/UnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ int numDescriptors = 5;
+ int pos = 0;
+ IndexedDiskElementDescriptor[] sortedDescriptors = new IndexedDiskElementDescriptor[numDescriptors];
+ for ( int i = 0; i < numDescriptors; i++ )
+ {
+ IndexedDiskElementDescriptor descriptor = new IndexedDiskElementDescriptor( pos, i * 2 );
+ // don't add the header + IndexedDisk.RECORD_HEADER;
+ pos = pos + ( i * 2 );
+ sortedDescriptors[i] = descriptor;
+ }
+
+ // DO WORK
+ boolean result = disk.checkForDedOverlaps( sortedDescriptors );
+
+ // VERIFY
+ assertFalse( "There should be overlaps. it should be not ok", result );
+ }
+
+ /**
+ * Verify that the file size is as expected.
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public void testFileSize()
+ throws IOException, InterruptedException
+ {
+ // SETUP
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testFileSize" );
+ cattr.setDiskPath( "target/test-sandbox/UnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ int numberToInsert = 20;
+ int bytes = 24;
+ ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
+ .getCacheName() );
+
+ for ( int i = 0; i < elements.length; i++ )
+ {
+ disk.doUpdate( elements[i] );
+ }
+
+ Thread.yield();
+ Thread.sleep( 100 );
+ Thread.yield();
+
+ long expectedSize = DiskTestObjectUtil.totalSize( elements, numberToInsert );
+ long resultSize = disk.getDataFileSize();
+
+ System.out.println( "testFileSize stats " + disk.getStats() );
+
+ assertEquals( "Wrong file size", expectedSize, resultSize );
+ }
+
+ /**
+ * Verify that items are added to the recyle bin on removal.
+ * <p>
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public void testRecyleBinSize()
+ throws IOException, InterruptedException
+ {
+ // SETUP
+ int numberToInsert = 20;
+
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testRecyleBinSize" );
+ cattr.setDiskPath( "target/test-sandbox/UnitTest" );
+ cattr.setMaxRecycleBinSize( numberToInsert );
+ cattr.setOptimizeAtRemoveCount( numberToInsert );
+ cattr.setMaxKeySize( numberToInsert * 2 );
+ cattr.setMaxPurgatorySize( numberToInsert );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ int bytes = 24;
+ ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
+ .getCacheName() );
+
+ for ( int i = 0; i < elements.length; i++ )
+ {
+ disk.doUpdate( elements[i] );
+ }
+
+ Thread.yield();
+ Thread.sleep( 100 );
+ Thread.yield();
+
+ // remove half
+ int numberToRemove = elements.length / 2;
+ for ( int i = 0; i < numberToRemove; i++ )
+ {
+ disk.doRemove( elements[i].getKey() );
+ }
+
+ // verify that the recyle bin has the correct amount.
+ assertEquals( "The recycle bin should have the number removed.", numberToRemove, disk.getRecyleBinSize() );
+ }
+
+ /**
+ * Verify that items of the same size use recyle bin spots. Setup the receyle bin by removing
+ * some items. Add some of the same size. Verify that the recyle count is the number added.
+ * <p>
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public void testRecyleBinUsage()
+ throws IOException, InterruptedException
+ {
+ // SETUP
+ int numberToInsert = 20;
+
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testRecyleBinUsage" );
+ cattr.setDiskPath( "target/test-sandbox/UnitTest" );
+ cattr.setMaxRecycleBinSize( numberToInsert );
+ cattr.setOptimizeAtRemoveCount( numberToInsert );
+ cattr.setMaxKeySize( numberToInsert * 2 );
+ cattr.setMaxPurgatorySize( numberToInsert );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ // we will reuse these
+ int bytes = 24;
+ ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
+ .getCacheName() );
+
+ // Add some to the disk
+ for ( int i = 0; i < elements.length; i++ )
+ {
+ disk.doUpdate( elements[i] );
+ }
+
+ Thread.yield();
+ Thread.sleep( 100 );
+ Thread.yield();
+
+ // remove half of those added
+ int numberToRemove = elements.length / 2;
+ for ( int i = 0; i < numberToRemove; i++ )
+ {
+ disk.doRemove( elements[i].getKey() );
+ }
+
+ // verify that the recyle bin has the correct amount.
+ assertEquals( "The recycle bin should have the number removed.", numberToRemove, disk.getRecyleBinSize() );
+
+ // add half as many as we removed. These should all use spots in the recycle bin.
+ int numberToAdd = numberToRemove / 2;
+ for ( int i = 0; i < numberToAdd; i++ )
+ {
+ disk.doUpdate( elements[i] );
+ }
+
+ // verify that we used the correct number of spots
+ assertEquals( "The recycle bin should have the number removed." + disk.getStats(), numberToAdd, disk
+ .getRecyleCount() );
+ }
+
+ /**
+ * Verify that the data size is as expected after a remove and after a put that should use the
+ * spots.
+ * <p>
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public void testBytesFreeSize()
+ throws IOException, InterruptedException
+ {
+ // SETUP
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testBytesFreeSize" );
+ cattr.setDiskPath( "target/test-sandbox/UnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ int numberToInsert = 20;
+ int bytes = 24;
+ ICacheElement[] elements = DiskTestObjectUtil.createCacheElementsWithTestObjects( numberToInsert, bytes, cattr
+ .getCacheName() );
+
+ for ( int i = 0; i < elements.length; i++ )
+ {
+ disk.doUpdate( elements[i] );
+ }
+
+ Thread.yield();
+ Thread.sleep( 100 );
+ Thread.yield();
+
+ // remove half of those added
+ int numberToRemove = elements.length / 2;
+ for ( int i = 0; i < numberToRemove; i++ )
+ {
+ disk.doRemove( elements[i].getKey() );
+ }
+
+ long expectedSize = DiskTestObjectUtil.totalSize( elements, numberToRemove );
+ long resultSize = disk.getBytesFree();
+
+ System.out.println( "testBytesFreeSize stats " + disk.getStats() );
+
+ assertEquals( "Wrong bytes free size" + disk.getStats(), expectedSize, resultSize );
+
+ // add half as many as we removed. These should all use spots in the recycle bin.
+ int numberToAdd = numberToRemove / 2;
+ for ( int i = 0; i < numberToAdd; i++ )
+ {
+ disk.doUpdate( elements[i] );
+ }
+
+ long expectedSize2 = DiskTestObjectUtil.totalSize( elements, numberToAdd );
+ long resultSize2 = disk.getBytesFree();
+ assertEquals( "Wrong bytes free size" + disk.getStats(), expectedSize2, resultSize2 );
+ }
+
+ /**
+ * Add some items to the disk cache and then remove them one by one.
+ */
+ public void testRemove_PartialKey()
+ {
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testRemove_PartialKey" );
+ cattr.setMaxKeySize( 100 );
+ cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ disk.doRemoveAll();
+
+ int cnt = 25;
+ for ( int i = 0; i < cnt; i++ )
+ {
+ IElementAttributes eAttr = new ElementAttributes();
+ eAttr.setIsSpool( true );
+ ICacheElement element = new CacheElement( "testRemove_PartialKey", i + ":key", "data:" + i );
+ element.setElementAttributes( eAttr );
+ disk.doUpdate( element );
+ }
+
+ // verif each
+ for ( int i = 0; i < cnt; i++ )
+ {
+ ICacheElement element = disk.doGet( i + ":key" );
+ assertNotNull( "Shoulds have recevied an element.", element );
+ }
+
+ // remove each
+ for ( int i = 0; i < cnt; i++ )
+ {
+ disk.remove( i + ":" );
+ ICacheElement element = disk.doGet( i + ":key" );
+ assertNull( "Should not have recevied an element.", element );
+ }
+ }
+
+ /**
+ * Verify that group members are removed if we call remove with a group.
+ */
+ public void testRemove_Group()
+ {
+ // SETUP
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testRemove_Group" );
+ cattr.setMaxKeySize( 100 );
+ cattr.setDiskPath( "target/test-sandbox/IndexDiskCacheUnitTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ disk.doRemoveAll();
+
+ String cacheName = "testRemove_Group_Region";
+ String groupName = "testRemove_Group";
+
+ int cnt = 25;
+ for ( int i = 0; i < cnt; i++ )
+ {
+ GroupAttrName groupAttrName = getGroupAttrName( cacheName, groupName, i + ":key" );
+
+ CacheElement element = new CacheElement( cacheName, groupAttrName, "data:" + i );
+
+ IElementAttributes eAttr = new ElementAttributes();
+ eAttr.setIsSpool( true );
+ element.setElementAttributes( eAttr );
+
+ disk.doUpdate( element );
+ }
+
+ // verify each
+ for ( int i = 0; i < cnt; i++ )
+ {
+ GroupAttrName groupAttrName = getGroupAttrName( cacheName, groupName, i + ":key" );
+ ICacheElement element = disk.doGet( groupAttrName );
+ assertNotNull( "Should have recevied an element.", element );
+ }
+
+ // DO WORK
+ // remove the group
+ GroupId gid = new GroupId( cacheName, groupName );
+ disk.remove( gid );
+
+ for ( int i = 0; i < cnt; i++ )
+ {
+ GroupAttrName groupAttrName = getGroupAttrName( cacheName, groupName, i + ":key" );
+ ICacheElement element = disk.doGet( groupAttrName );
+
+ // VERIFY
+ assertNull( "Should not have recevied an element.", element );
+ }
+
+ }
+
+ /**
+ * Internal method used for group functionality.
+ * <p>
+ * @param cacheName
+ * @param group
+ * @param name
+ * @return GroupAttrName
+ */
+ private GroupAttrName getGroupAttrName( String cacheName, String group, Object name )
+ {
+ GroupId gid = new GroupId( cacheName, group );
+ return new GroupAttrName( gid, name );
+ }
+}
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentNoDeadLockUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentNoDeadLockUnitTest.java?rev=647264&r1=647263&r2=647264&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentNoDeadLockUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentNoDeadLockUnitTest.java Fri Apr 11 11:43:26 2008
@@ -1,141 +1,142 @@
-package org.apache.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.extensions.ActiveTestSuite;
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.apache.jcs.JCS;
-import org.apache.jcs.engine.control.CompositeCacheManager;
-
-/**
- * Test which exercises the indexed disk cache. Runs three threads against the
- * same region.
- *
- * @version $Id: TestDiskCacheConcurrentForDeadLock.java,v 1.2 2005/02/01
- * 00:01:59 asmuts Exp $
- */
-public class IndexedDiskCacheConcurrentNoDeadLockUnitTest
- extends TestCase
-{
- /**
- * Constructor for the TestDiskCache object.
- *
- * @param testName
- */
- public IndexedDiskCacheConcurrentNoDeadLockUnitTest( String testName )
- {
- super( testName );
- }
-
- /**
- * Main method passes this test to the text test runner.
- *
- * @param args
- */
- public static void main( String args[] )
- {
- String[] testCaseName = { IndexedDiskCacheConcurrentNoDeadLockUnitTest.class.getName() };
- junit.textui.TestRunner.main( testCaseName );
- }
-
- /**
- * A unit test suite for JUnit
- *
- * @return The test suite
- */
- public static Test suite()
- {
- ActiveTestSuite suite = new ActiveTestSuite();
-
- suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache1" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 0, 200, 1 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache2" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 10000, 50000, 2 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache3" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 10000, 50000, 3 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache4" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 10000, 50000, 4 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache5" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 10000, 50000, 5 );
- }
- } );
-
- return suite;
- }
-
- /**
- * Test setup
- */
- public void setUp()
- {
- JCS.setConfigFilename( "/TestDiskCacheCon.ccf" );
- }
-
- /**
- * Test tearDown. Dispose of the cache.
- */
- public void tearDown()
- {
- try
- {
- CompositeCacheManager cacheMgr = CompositeCacheManager.getInstance();
- cacheMgr.shutDown();
- }
- catch ( Exception e )
- {
- // log.error(e);
- }
- }
-
-}
+package org.apache.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.extensions.ActiveTestSuite;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.apache.jcs.JCS;
+import org.apache.jcs.engine.control.CompositeCacheManager;
+
+/**
+ * Test which exercises the indexed disk cache. Runs three threads against the
+ * same region.
+ *
+ * @version $Id: TestDiskCacheConcurrentForDeadLock.java,v 1.2 2005/02/01
+ * 00:01:59 asmuts Exp $
+ */
+public class IndexedDiskCacheConcurrentNoDeadLockUnitTest
+ extends TestCase
+{
+ /**
+ * Constructor for the TestDiskCache object.
+ *
+ * @param testName
+ */
+ public IndexedDiskCacheConcurrentNoDeadLockUnitTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * Main method passes this test to the text test runner.
+ *
+ * @param args
+ */
+ public static void main( String args[] )
+ {
+ String[] testCaseName = { IndexedDiskCacheConcurrentNoDeadLockUnitTest.class.getName() };
+ TestRunner.main( testCaseName );
+ }
+
+ /**
+ * A unit test suite for JUnit
+ *
+ * @return The test suite
+ */
+ public static Test suite()
+ {
+ ActiveTestSuite suite = new ActiveTestSuite();
+
+ suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache1" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 0, 200, 1 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache2" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 10000, 50000, 2 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache3" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 10000, 50000, 3 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache4" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 10000, 50000, 4 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheRandomConcurrentTestUtil( "testIndexedDiskCache5" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 10000, 50000, 5 );
+ }
+ } );
+
+ return suite;
+ }
+
+ /**
+ * Test setup
+ */
+ public void setUp()
+ {
+ JCS.setConfigFilename( "/TestDiskCacheCon.ccf" );
+ }
+
+ /**
+ * Test tearDown. Dispose of the cache.
+ */
+ public void tearDown()
+ {
+ try
+ {
+ CompositeCacheManager cacheMgr = CompositeCacheManager.getInstance();
+ cacheMgr.shutDown();
+ }
+ catch ( Exception e )
+ {
+ // log.error(e);
+ }
+ }
+
+}
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java?rev=647264&r1=647263&r2=647264&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java Fri Apr 11 11:43:26 2008
@@ -1,211 +1,246 @@
-package org.apache.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.extensions.ActiveTestSuite;
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.apache.jcs.JCS;
-
-/**
- * Test which exercises the indexed disk cache. This one uses three different
- * regions for thre threads.
- *
- * @version $Id: TestDiskCache.java 224346 2005-06-04 02:01:59Z asmuts $
- */
-public class IndexedDiskCacheConcurrentUnitTest
- extends TestCase
-{
- /**
- * Number of items to cache, twice the configured maxObjects for the memory
- * cache regions.
- */
- private static int items = 200;
-
- /**
- * Constructor for the TestDiskCache object.
- *
- * @param testName
- */
- public IndexedDiskCacheConcurrentUnitTest( String testName )
- {
- super( testName );
- }
-
- /**
- * Main method passes this test to the text test runner.
- *
- * @param args
- */
- public static void main( String args[] )
- {
- String[] testCaseName = { IndexedDiskCacheConcurrentUnitTest.class.getName() };
- junit.textui.TestRunner.main( testCaseName );
- }
-
- /**
- * A unit test suite for JUnit
- *
- * @return The test suite
- */
- public static Test suite()
- {
- ActiveTestSuite suite = new ActiveTestSuite();
-
- suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache1" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion1" );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache2" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion2" );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache3" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion3" );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache4" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegionInRange( "indexedRegion3", 300, 600 );
- }
- } );
-
- return suite;
- }
-
- /**
- * Test setup
- */
- public void setUp()
- {
- JCS.setConfigFilename( "/TestDiskCache.ccf" );
- }
-
- /**
- * Adds items to cache, gets them, and removes them. The item count is more
- * than the size of the memory cache, so items should spool to disk.
- *
- * @param region
- * Name of the region to access
- *
- * @exception Exception
- * If an error occurs
- */
- public void runTestForRegion( String region )
- throws Exception
- {
- JCS jcs = JCS.getInstance( region );
-
- // Add items to cache
- for ( int i = 0; i <= items; i++ )
- {
- jcs.put( i + ":key", region + " data " + i );
- }
-
- // Test that all items are in cache
- for ( int i = 0; i <= items; i++ )
- {
- String value = (String) jcs.get( i + ":key" );
-
- assertEquals( region + " data " + i, value );
- }
-
- // Remove all the items
- for ( int i = 0; i <= items; i++ )
- {
- jcs.remove( i + ":key" );
- }
-
- // Verify removal
- // another thread may have inserted since
- for ( int i = 0; i <= items; i++ )
- {
- assertNull( "Removed key should be null: " + i + ":key" + "\n stats " + jcs.getStats(), jcs
- .get( i + ":key" ) );
- }
- }
-
- /**
- * Adds items to cache, gets them, and removes them. The item count is more
- * than the size of the memory cache, so items should spool to disk.
- *
- * @param region
- * Name of the region to access
- * @param start
- * @param end
- *
- * @exception Exception
- * If an error occurs
- */
- public void runTestForRegionInRange( String region, int start, int end )
- throws Exception
- {
- JCS jcs = JCS.getInstance( region );
-
- // Add items to cache
- for ( int i = start; i <= end; i++ )
- {
- jcs.put( i + ":key", region + " data " + i );
- }
-
- // Test that all items are in cache
- for ( int i = start; i <= end; i++ )
- {
- String value = (String) jcs.get( i + ":key" );
-
- assertEquals( region + " data " + i, value );
- }
-
- // Remove all the items
- for ( int i = start; i <= end; i++ )
- {
- jcs.remove( i + ":key" );
- }
-
- System.out.println( jcs.getStats() );
-
- // Verify removal
- // another thread may have inserted since
- for ( int i = start; i <= end; i++ )
- {
- assertNull( "Removed key should be null: " + i + ":key " + "\n stats " + jcs.getStats(), jcs.get( i
- + ":key" ) );
- }
- }
-}
+package org.apache.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 java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import junit.extensions.ActiveTestSuite;
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.apache.jcs.JCS;
+import org.apache.jcs.engine.behavior.ICacheElement;
+
+/**
+ * Test which exercises the indexed disk cache. This one uses three different
+ * regions for thre threads.
+ *
+ * @version $Id: TestDiskCache.java 224346 2005-06-04 02:01:59Z asmuts $
+ */
+public class IndexedDiskCacheConcurrentUnitTest
+ extends TestCase
+{
+ /**
+ * Number of items to cache, twice the configured maxObjects for the memory
+ * cache regions.
+ */
+ private static int items = 200;
+
+ /**
+ * Constructor for the TestDiskCache object.
+ *
+ * @param testName
+ */
+ public IndexedDiskCacheConcurrentUnitTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * Main method passes this test to the text test runner.
+ *
+ * @param args
+ */
+ public static void main( String args[] )
+ {
+ String[] testCaseName = { IndexedDiskCacheConcurrentUnitTest.class.getName() };
+ junit.textui.TestRunner.main( testCaseName );
+ }
+
+ /**
+ * A unit test suite for JUnit
+ *
+ * @return The test suite
+ */
+ public static Test suite()
+ {
+ ActiveTestSuite suite = new ActiveTestSuite();
+
+ suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache1" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion1" );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache2" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion2" );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache3" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion3" );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheConcurrentUnitTest( "testIndexedDiskCache4" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegionInRange( "indexedRegion3", 300, 600 );
+ }
+ } );
+
+ return suite;
+ }
+
+ /**
+ * Test setup
+ */
+ public void setUp()
+ {
+ JCS.setConfigFilename( "/TestDiskCache.ccf" );
+ }
+
+ /**
+ * Adds items to cache, gets them, and removes them. The item count is more
+ * than the size of the memory cache, so items should spool to disk.
+ *
+ * @param region
+ * Name of the region to access
+ *
+ * @exception Exception
+ * If an error occurs
+ */
+ public void runTestForRegion( String region )
+ throws Exception
+ {
+ JCS jcs = JCS.getInstance( region );
+
+ // Add items to cache
+ for ( int i = 0; i <= items; i++ )
+ {
+ jcs.put( i + ":key", region + " data " + i );
+ }
+
+ // Test that all items are in cache
+ for ( int i = 0; i <= items; i++ )
+ {
+ String value = (String) jcs.get( i + ":key" );
+
+ assertEquals( region + " data " + i, value );
+ }
+
+ // Test that getElements returns all the expected values
+ Set keys = new HashSet();
+ for ( int i = 0; i <= items; i++ )
+ {
+ keys.add( i + ":key" );
+ }
+
+ Map elements = jcs.getCacheElements( keys );
+ for ( int i = 0; i <= items; i++ )
+ {
+ ICacheElement element = (ICacheElement) elements.get( i + ":key" );
+ assertNotNull( "element " + i + ":key is missing", element );
+ assertEquals( "value " + i + ":key", region + " data " + i, element.getVal() );
+ }
+
+ // Remove all the items
+ for ( int i = 0; i <= items; i++ )
+ {
+ jcs.remove( i + ":key" );
+ }
+
+ // Verify removal
+ // another thread may have inserted since
+ for ( int i = 0; i <= items; i++ )
+ {
+ assertNull( "Removed key should be null: " + i + ":key" + "\n stats " + jcs.getStats(), jcs
+ .get( i + ":key" ) );
+ }
+ }
+
+ /**
+ * Adds items to cache, gets them, and removes them. The item count is more
+ * than the size of the memory cache, so items should spool to disk.
+ *
+ * @param region
+ * Name of the region to access
+ * @param start
+ * @param end
+ *
+ * @exception Exception
+ * If an error occurs
+ */
+ public void runTestForRegionInRange( String region, int start, int end )
+ throws Exception
+ {
+ JCS jcs = JCS.getInstance( region );
+
+ // Add items to cache
+ for ( int i = start; i <= end; i++ )
+ {
+ jcs.put( i + ":key", region + " data " + i );
+ }
+
+ // Test that all items are in cache
+ for ( int i = start; i <= end; i++ )
+ {
+ String value = (String) jcs.get( i + ":key" );
+
+ assertEquals( region + " data " + i, value );
+ }
+
+ // Test that getElements returns all the expected values
+ Set keys = new HashSet();
+ for ( int i = start; i <= end; i++ )
+ {
+ keys.add( i + ":key" );
+ }
+
+ Map elements = jcs.getCacheElements( keys );
+ for ( int i = start; i <= end; i++ )
+ {
+ ICacheElement element = (ICacheElement) elements.get( i + ":key" );
+ assertNotNull( "element " + i + ":key is missing", element );
+ assertEquals( "value " + i + ":key", region + " data " + i, element.getVal() );
+ }
+
+ // Remove all the items
+ for ( int i = start; i <= end; i++ )
+ {
+ jcs.remove( i + ":key" );
+ }
+
+ System.out.println( jcs.getStats() );
+
+ // Verify removal
+ // another thread may have inserted since
+ for ( int i = start; i <= end; i++ )
+ {
+ assertNull( "Removed key should be null: " + i + ":key " + "\n stats " + jcs.getStats(), jcs.get( i
+ + ":key" ) );
+ }
+ }
+}
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java?rev=647264&r1=647263&r2=647264&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java Fri Apr 11 11:43:26 2008
@@ -1,158 +1,178 @@
-package org.apache.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.extensions.ActiveTestSuite;
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.apache.jcs.JCS;
-
-/**
- * Test which exercises the indexed disk cache. This one uses three different
- * regions for thre threads. It uses a config file that specifies 0 items in
- * memory.
- *
- * @version $Id: TestDiskCacheNoMemory.java 224346 2005-06-04 02:01:59Z asmuts $
- */
-public class IndexedDiskCacheNoMemoryUnitTest
- extends TestCase
-{
- /**
- * Number of items to cache; the configured maxObjects for the memory cache
- * regions is 0.
- */
- private static int items = 2000;
-
- /**
- * Constructor for the TestDiskCache object.
- *
- * @param testName
- */
- public IndexedDiskCacheNoMemoryUnitTest( String testName )
- {
- super( testName );
- }
-
- /**
- * Main method passes this test to the text test runner.
- *
- * @param args
- */
- public static void main( String args[] )
- {
- String[] testCaseName = { IndexedDiskCacheNoMemoryUnitTest.class.getName() };
- junit.textui.TestRunner.main( testCaseName );
- }
-
- /**
- * A unit test suite for JUnit
- *
- * @return The test suite
- */
- public static Test suite()
- {
- ActiveTestSuite suite = new ActiveTestSuite();
-
- suite.addTest( new IndexedDiskCacheNoMemoryUnitTest( "testIndexedDiskCache1" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion1" );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheNoMemoryUnitTest( "testIndexedDiskCache2" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion2" );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheNoMemoryUnitTest( "testIndexedDiskCache3" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion3" );
- }
- } );
-
- return suite;
- }
-
- /**
- * Test setup
- */
- public void setUp()
- {
- JCS.setConfigFilename( "/TestDiskCacheNoMemory.ccf" );
- }
-
- /**
- * Adds items to cache, gets them, and removes them. The item count is more
- * than the size of the memory cache, so items should spool to disk.
- *
- * @param region
- * Name of the region to access
- *
- * @exception Exception
- * If an error occurs
- */
- public void runTestForRegion( String region )
- throws Exception
- {
- JCS jcs = JCS.getInstance( region );
-
- // Add items to cache
-
- for ( int i = 0; i <= items; i++ )
- {
- jcs.put( i + ":key", region + " data " + i );
- }
-
- // Test that all items are in cache
-
- for ( int i = 0; i <= items; i++ )
- {
- String value = (String) jcs.get( i + ":key" );
-
- assertEquals( region + " data " + i, value );
- }
-
- // Remove all the items
- for ( int i = 0; i <= items; i++ )
- {
- jcs.remove( i + ":key" );
- }
-
- // Verify removal
- for ( int i = 0; i <= items; i++ )
- {
- assertNull( "Removed key should be null: " + i + ":key" + "\n stats " + jcs.getStats(), jcs.get( i + ":key" ) );
- }
-
- // dump the stats to the report
- System.out.println( jcs.getStats() );
- }
-}
+package org.apache.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 java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import junit.extensions.ActiveTestSuite;
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.apache.jcs.JCS;
+import org.apache.jcs.engine.behavior.ICacheElement;
+
+/**
+ * Test which exercises the indexed disk cache. This one uses three different
+ * regions for thre threads. It uses a config file that specifies 0 items in
+ * memory.
+ *
+ * @version $Id: TestDiskCacheNoMemory.java 224346 2005-06-04 02:01:59Z asmuts $
+ */
+public class IndexedDiskCacheNoMemoryUnitTest
+ extends TestCase
+{
+ /**
+ * Number of items to cache; the configured maxObjects for the memory cache
+ * regions is 0.
+ */
+ private static int items = 2000;
+
+ /**
+ * Constructor for the TestDiskCache object.
+ *
+ * @param testName
+ */
+ public IndexedDiskCacheNoMemoryUnitTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * Main method passes this test to the text test runner.
+ *
+ * @param args
+ */
+ public static void main( String args[] )
+ {
+ String[] testCaseName = { IndexedDiskCacheNoMemoryUnitTest.class.getName() };
+ junit.textui.TestRunner.main( testCaseName );
+ }
+
+ /**
+ * A unit test suite for JUnit
+ *
+ * @return The test suite
+ */
+ public static Test suite()
+ {
+ ActiveTestSuite suite = new ActiveTestSuite();
+
+ suite.addTest( new IndexedDiskCacheNoMemoryUnitTest( "testIndexedDiskCache1" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion1" );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheNoMemoryUnitTest( "testIndexedDiskCache2" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion2" );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheNoMemoryUnitTest( "testIndexedDiskCache3" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion3" );
+ }
+ } );
+
+ return suite;
+ }
+
+ /**
+ * Test setup
+ */
+ public void setUp()
+ {
+ JCS.setConfigFilename( "/TestDiskCacheNoMemory.ccf" );
+ }
+
+ /**
+ * Adds items to cache, gets them, and removes them. The item count is more
+ * than the size of the memory cache, so items should spool to disk.
+ *
+ * @param region
+ * Name of the region to access
+ *
+ * @exception Exception
+ * If an error occurs
+ */
+ public void runTestForRegion( String region )
+ throws Exception
+ {
+ JCS jcs = JCS.getInstance( region );
+
+ // Add items to cache
+
+ for ( int i = 0; i <= items; i++ )
+ {
+ jcs.put( i + ":key", region + " data " + i );
+ }
+
+ // Test that all items are in cache
+
+ for ( int i = 0; i <= items; i++ )
+ {
+ String value = (String) jcs.get( i + ":key" );
+
+ assertEquals( region + " data " + i, value );
+ }
+
+ // Test that getElements returns all the expected values
+ Set keys = new HashSet();
+ for ( int i = 0; i <= items; i++ )
+ {
+ keys.add( i + ":key" );
+ }
+
+ Map elements = jcs.getCacheElements( keys );
+ for ( int i = 0; i <= items; i++ )
+ {
+ ICacheElement element = (ICacheElement) elements.get( i + ":key" );
+ assertNotNull( "element " + i + ":key is missing", element );
+ assertEquals( "value " + i + ":key", region + " data " + i, element.getVal() );
+ }
+
+ // Remove all the items
+ for ( int i = 0; i <= items; i++ )
+ {
+ jcs.remove( i + ":key" );
+ }
+
+ // Verify removal
+ for ( int i = 0; i <= items; i++ )
+ {
+ assertNull( "Removed key should be null: " + i + ":key" + "\n stats " + jcs.getStats(), jcs.get( i + ":key" ) );
+ }
+
+ // dump the stats to the report
+ System.out.println( jcs.getStats() );
+ }
+}
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java?rev=647264&r1=647263&r2=647264&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheSameRegionConcurrentUnitTest.java Fri Apr 11 11:43:26 2008
@@ -1,187 +1,204 @@
-package org.apache.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.extensions.ActiveTestSuite;
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.apache.jcs.JCS;
-
-/**
- * Test which exercises the indexed disk cache. Runs three threads against the
- * same region.
- *
- * @version $Id: TestDiskCacheConcurrent.java,v 1.8 2005/02/01 00:01:59 asmuts
- * Exp $
- */
-public class IndexedDiskCacheSameRegionConcurrentUnitTest
- extends TestCase
-{
- /**
- * Constructor for the TestDiskCache object.
- *
- * @param testName
- */
- public IndexedDiskCacheSameRegionConcurrentUnitTest( String testName )
- {
- super( testName );
- }
-
- /**
- * Main method passes this test to the text test runner.
- *
- * @param args
- */
- public static void main( String args[] )
- {
- String[] testCaseName = { IndexedDiskCacheSameRegionConcurrentUnitTest.class.getName() };
- junit.textui.TestRunner.main( testCaseName );
- }
-
- /**
- * A unit test suite for JUnit
- *
- * @return The test suite
- */
- public static Test suite()
- {
- ActiveTestSuite suite = new ActiveTestSuite();
-
- suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache1" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 0, 200 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache2" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 1000, 1200 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache3" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 2000, 2200 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache4" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 2200, 5200 );
- }
- } );
-
- suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache5" )
- {
- public void runTest()
- throws Exception
- {
- this.runTestForRegion( "indexedRegion4", 0, 5200 );
- }
- } );
-
- return suite;
- }
-
- /**
- * Test setup
- */
- public void setUp()
- {
- JCS.setConfigFilename( "/TestDiskCacheCon.ccf" );
- }
-
- // /**
- // * Tests the region which uses the indexed disk cache
- // */
- // public void testIndexedDiskCache()
- // throws Exception
- // {
- // runTestForRegion( "indexedRegion" );
- // }
- //
- // /**
- // * Tests the region which uses the indexed disk cache
- // */
- // public void testIndexedDiskCache2()
- // throws Exception
- // {
- // runTestForRegion( "indexedRegion2" );
- // }
-
- /**
- * Adds items to cache, gets them, and removes them. The item count is more
- * than the size of the memory cache, so items should spool to disk.
- *
- * @param region
- * Name of the region to access
- * @param start
- * @param end
- *
- * @exception Exception
- * If an error occurs
- */
- public void runTestForRegion( String region, int start, int end )
- throws Exception
- {
- JCS jcs = JCS.getInstance( region );
-
- // Add items to cache
-
- for ( int i = start; i <= end; i++ )
- {
- jcs.put( i + ":key", region + " data " + i );
- }
-
- // Test that all items are in cache
-
- for ( int i = start; i <= end; i++ )
- {
- String value = (String) jcs.get( i + ":key" );
-
- assertEquals( region + " data " + i, value );
- }
-
- /*
- * // you can't remove in one thread and expect them to be in another //
- * Remove all the items
- *
- * for ( int i = start; i <= end; i++ ) { jcs.remove( i + ":key" ); } //
- * Verify removal
- *
- * for ( int i = start; i <= end; i++ ) { assertNull( "Removed key
- * should be null: " + i + ":key", jcs.get( i + ":key" ) ); }
- */
-
- }
-}
+package org.apache.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 java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import junit.extensions.ActiveTestSuite;
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.apache.jcs.JCS;
+import org.apache.jcs.engine.behavior.ICacheElement;
+
+/**
+ * Test which exercises the indexed disk cache. Runs three threads against the
+ * same region.
+ *
+ * @version $Id: TestDiskCacheConcurrent.java,v 1.8 2005/02/01 00:01:59 asmuts
+ * Exp $
+ */
+public class IndexedDiskCacheSameRegionConcurrentUnitTest
+ extends TestCase
+{
+ /**
+ * Constructor for the TestDiskCache object.
+ *
+ * @param testName
+ */
+ public IndexedDiskCacheSameRegionConcurrentUnitTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * Main method passes this test to the text test runner.
+ *
+ * @param args
+ */
+ public static void main( String args[] )
+ {
+ String[] testCaseName = { IndexedDiskCacheSameRegionConcurrentUnitTest.class.getName() };
+ junit.textui.TestRunner.main( testCaseName );
+ }
+
+ /**
+ * A unit test suite for JUnit
+ *
+ * @return The test suite
+ */
+ public static Test suite()
+ {
+ ActiveTestSuite suite = new ActiveTestSuite();
+
+ suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache1" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 0, 200 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache2" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 1000, 1200 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache3" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 2000, 2200 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache4" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 2200, 5200 );
+ }
+ } );
+
+ suite.addTest( new IndexedDiskCacheSameRegionConcurrentUnitTest( "testIndexedDiskCache5" )
+ {
+ public void runTest()
+ throws Exception
+ {
+ this.runTestForRegion( "indexedRegion4", 0, 5200 );
+ }
+ } );
+
+ return suite;
+ }
+
+ /**
+ * Test setup
+ */
+ public void setUp()
+ {
+ JCS.setConfigFilename( "/TestDiskCacheCon.ccf" );
+ }
+
+ // /**
+ // * Tests the region which uses the indexed disk cache
+ // */
+ // public void testIndexedDiskCache()
+ // throws Exception
+ // {
+ // runTestForRegion( "indexedRegion" );
+ // }
+ //
+ // /**
+ // * Tests the region which uses the indexed disk cache
+ // */
+ // public void testIndexedDiskCache2()
+ // throws Exception
+ // {
+ // runTestForRegion( "indexedRegion2" );
+ // }
+
+ /**
+ * Adds items to cache, gets them, and removes them. The item count is more
+ * than the size of the memory cache, so items should spool to disk.
+ *
+ * @param region
+ * Name of the region to access
+ * @param start
+ * @param end
+ *
+ * @exception Exception
+ * If an error occurs
+ */
+ public void runTestForRegion( String region, int start, int end )
+ throws Exception
+ {
+ JCS jcs = JCS.getInstance( region );
+
+ // Add items to cache
+
+ for ( int i = start; i <= end; i++ )
+ {
+ jcs.put( i + ":key", region + " data " + i );
+ }
+
+ // Test that all items are in cache
+
+ for ( int i = start; i <= end; i++ )
+ {
+ String value = (String) jcs.get( i + ":key" );
+
+ assertEquals( region + " data " + i, value );
+ }
+
+ // Test that getElements returns all the expected values
+ Set keys = new HashSet();
+ for ( int i = start; i <= end; i++ )
+ {
+ keys.add( i + ":key" );
+ }
+
+ Map elements = jcs.getCacheElements( keys );
+ for ( int i = start; i <= end; i++ )
+ {
+ ICacheElement element = (ICacheElement) elements.get( i + ":key" );
+ assertNotNull( "element " + i + ":key is missing", element );
+ assertEquals( "value " + i + ":key", region + " data " + i, element.getVal() );
+ }
+
+ // you can't remove in one thread and expect them to be in another //
+ // Remove all the items
+ //
+ // for ( int i = start; i <= end; i++ ) { jcs.remove( i + ":key" ); } //
+ // Verify removal
+ //
+ // for ( int i = start; i <= end; i++ ) { assertNull( "Removed key
+ // should be null: " + i + ":key", jcs.get( i + ":key" ) ); }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org