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