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 LRUMemoryCacheConcurrentUnitTest
39 extends TestCase
40 {
41
42
43
44
45 private static int items = 200;
46
47
48
49
50
51
52 public LRUMemoryCacheConcurrentUnitTest( String testName )
53 {
54 super( testName );
55 }
56
57
58
59
60
61
62 public static void main( String args[] )
63 {
64 String[] testCaseName = { LRUMemoryCacheConcurrentUnitTest.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 LRUMemoryCacheConcurrentUnitTest( "testLRUMemoryCache" )
78 {
79 @Override
80 public void runTest()
81 throws Exception
82 {
83 this.runTestForRegion( "testRegion1" );
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 public void runTestForRegion( String region )
109 throws Exception
110 {
111 CompositeCacheManager cacheMgr = CompositeCacheManager.getUnconfiguredInstance();
112 cacheMgr.configure( "/TestDiskCache.ccf" );
113 CompositeCache<String, String> cache = cacheMgr.getCache( region );
114
115 LRUMemoryCache<String, String> lru = new LRUMemoryCache<String, String>();
116 lru.initialize( cache );
117
118
119
120 for ( int i = 0; i < items; i++ )
121 {
122 ICacheElement<String, String> ice = new CacheElement<String, String>( cache.getCacheName(), i + ":key", region + " data " + i );
123 ice.setElementAttributes( cache.getElementAttributes() );
124 lru.update( ice );
125 }
126
127
128 for ( int i = 0; i < 100; i++ )
129 {
130 assertNull( "Should not have " + i + ":key", lru.get( i + ":key" ) );
131 }
132
133
134 for ( int i = 100; i < items; i++ )
135 {
136 String value = lru.get( i + ":key" ).getVal();
137 assertEquals( region + " data " + i, value );
138 }
139
140
141 Set<String> keys = new HashSet<String>();
142 for ( int i = 0; i < items; i++ )
143 {
144 keys.add( i + ":key" );
145 }
146
147 Map<String, ICacheElement<String, String>> elements = lru.getMultiple( keys );
148 for ( int i = 0; i < 100; i++ )
149 {
150 assertNull( "Should not have " + i + ":key", elements.get( i + ":key" ) );
151 }
152 for ( int i = 100; i < items; i++ )
153 {
154 ICacheElement<String, String> element = elements.get( i + ":key" );
155 assertNotNull( "element " + i + ":key is missing", element );
156 assertEquals( "value " + i + ":key", region + " data " + i, element.getVal() );
157 }
158
159
160 for ( int i = 0; i < items; i++ )
161 {
162 lru.remove( i + ":key" );
163 }
164
165
166 for ( int i = 0; i < items; i++ )
167 {
168 assertNull( "Removed key should be null: " + i + ":key", lru.get( i + ":key" ) );
169 }
170 }
171 }