1 package org.apache.commons.jcs.auxiliary.disk.indexed;
2
3 import org.apache.commons.jcs.auxiliary.disk.DiskTestObject;
4 import org.apache.commons.jcs.engine.behavior.ICacheElement;
5 import org.apache.commons.jcs.utils.timing.SleepUtil;
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import junit.framework.TestCase;
27
28
29
30
31
32
33 public class IndexedDiskCacheOptimizationUnitTest
34 extends TestCase
35 {
36
37
38
39
40
41 public void testBasicOptimization()
42 throws Exception
43 {
44
45 int removeCount = 50;
46
47 IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
48 cattr.setCacheName( "testOptimization" );
49 cattr.setMaxKeySize( removeCount * 2 );
50 cattr.setOptimizeAtRemoveCount( removeCount );
51 cattr.setDiskPath( "target/test-sandbox/testOptimization" );
52 IndexedDiskCache<Integer, DiskTestObject> disk = new IndexedDiskCache<Integer, DiskTestObject>( cattr );
53
54 disk.removeAll();
55
56 int numberToInsert = removeCount * 3;
57 ICacheElement<Integer, DiskTestObject>[] elements = DiskTestObjectUtil
58 .createCacheElementsWithTestObjectsOfVariableSizes( numberToInsert, cattr.getCacheName() );
59
60 for ( int i = 0; i < elements.length; i++ )
61 {
62 disk.processUpdate( elements[i] );
63 }
64
65
66 Thread.sleep( 1000 );
67 long sizeBeforeRemove = disk.getDataFileSize();
68
69
70
71
72 for ( int i = 0; i < removeCount; i++ )
73 {
74 disk.processRemove( Integer.valueOf( i ) );
75 }
76
77 SleepUtil.sleepAtLeast( 1000 );
78
79 disk.optimizeFile();
80
81 long sizeAfterRemove = disk.getDataFileSize();
82 long expectedSizeAfterRemove = DiskTestObjectUtil.totalSize( elements, removeCount, elements.length );
83
84
85 if ( expectedSizeAfterRemove != sizeAfterRemove )
86 {
87 SleepUtil.sleepAtLeast( 2000 );
88 }
89
90 assertTrue( "The post optimization size should be smaller."
91 +"sizeAfterRemove=" + sizeAfterRemove + " sizeBeforeRemove= " +sizeBeforeRemove
92 , sizeAfterRemove < sizeBeforeRemove );
93 assertEquals( "The file size is not as expected size.", expectedSizeAfterRemove, sizeAfterRemove );
94 }
95 }