1 package org.apache.commons.jcs.engine.memory.lru;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import junit.extensions.ActiveTestSuite;
23 import junit.framework.Test;
24 import junit.framework.TestCase;
25 import org.apache.commons.jcs.engine.CacheElement;
26 import org.apache.commons.jcs.engine.behavior.ICacheElement;
27 import org.apache.commons.jcs.engine.control.CompositeCache;
28 import org.apache.commons.jcs.engine.control.CompositeCacheManager;
29
30 import java.util.HashSet;
31 import java.util.Map;
32 import java.util.Set;
33
34
35
36
37
38 public class LHMLRUMemoryCacheConcurrentUnitTest
39 extends TestCase
40 {
41
42
43
44
45 private static int items = 200;
46
47
48
49
50
51
52 public LHMLRUMemoryCacheConcurrentUnitTest( String testName )
53 {
54 super( testName );
55 }
56
57
58
59
60
61
62 public static void main( String args[] )
63 {
64 String[] testCaseName = { LHMLRUMemoryCacheConcurrentUnitTest.class.getName() };
65 junit.textui.TestRunner.main( testCaseName );
66 }
67
68
69
70
71
72
73 public static Test suite()
74 {
75 ActiveTestSuite suite = new ActiveTestSuite();
76
77 suite.addTest( new LHMLRUMemoryCacheConcurrentUnitTest( "testLHMLRUMemoryCache" )
78 {
79 @Override
80 public void runTest()
81 throws Exception
82 {
83 this.runTestForRegion( "indexedRegion1" );
84 }
85 } );
86
87 return suite;
88 }
89
90
91
92
93 @Override
94 public void setUp()
95 {
96
97 }
98
99
100
101
102
103
104
105
106
107
108
109 public void runTestForRegion( String region )
110 throws Exception
111 {
112 CompositeCacheManager cacheMgr = CompositeCacheManager.getUnconfiguredInstance();
113 cacheMgr.configure( "/TestLHMLRUCache.ccf" );
114 CompositeCache<String, String> cache = cacheMgr.getCache( region );
115
116 LRUMemoryCache<String, String> lru = new LRUMemoryCache<String, String>();
117 lru.initialize( cache );
118
119
120
121 for ( int i = 0; i < items; i++ )
122 {
123 ICacheElement<String, String> ice = new CacheElement<String, String>( cache.getCacheName(), i + ":key", region + " data " + i );
124 ice.setElementAttributes( cache.getElementAttributes() );
125 lru.update( ice );
126 }
127
128
129 for ( int i = 0; i < 100; i++ )
130 {
131 assertNull( "Should not have " + i + ":key", lru.get( i + ":key" ) );
132 }
133
134
135 for ( int i = 100; i < items; i++ )
136 {
137 String value = lru.get( i + ":key" ).getVal();
138 assertEquals( region + " data " + i, value );
139 }
140
141
142 Set<String> keys = new HashSet<String>();
143 for ( int i = 0; i < items; i++ )
144 {
145 keys.add( i + ":key" );
146 }
147
148 Map<String, ICacheElement<String, String>> elements = lru.getMultiple( keys );
149 for ( int i = 0; i < 100; i++ )
150 {
151 assertNull( "Should not have " + i + ":key", elements.get( i + ":key" ) );
152 }
153 for ( int i = 100; i < items; i++ )
154 {
155 ICacheElement<String, String> element = elements.get( i + ":key" );
156 assertNotNull( "element " + i + ":key is missing", element );
157 assertEquals( "value " + i + ":key", region + " data " + i, element.getVal() );
158 }
159
160
161
162 for ( int i = 0; i < items; i++ )
163 {
164 lru.remove( i + ":key" );
165 }
166
167
168
169 for ( int i = 0; i < items; i++ )
170 {
171 assertNull( "Removed key should be null: " + i + ":key", lru.get( i + ":key" ) );
172 }
173 }
174
175 }