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