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" ) ); }
+ }
+}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.