1 package org.apache.commons.jcs.auxiliary.remote.server;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.HashSet;
23 import java.util.LinkedList;
24 import java.util.List;
25 import java.util.Properties;
26
27 import org.apache.commons.jcs.auxiliary.MockCacheEventLogger;
28 import org.apache.commons.jcs.auxiliary.remote.MockRemoteCacheListener;
29 import org.apache.commons.jcs.auxiliary.remote.RemoteUtils;
30 import org.apache.commons.jcs.auxiliary.remote.server.behavior.IRemoteCacheServerAttributes;
31 import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
32 import org.apache.commons.jcs.engine.CacheElement;
33 import org.apache.commons.jcs.engine.behavior.ICacheElement;
34 import org.apache.commons.jcs.utils.timing.SleepUtil;
35
36 import junit.framework.TestCase;
37
38
39
40
41
42
43
44 public class RemoteCacheServerUnitTest
45 extends TestCase
46 {
47 private static final String expectedIp1 = "adfasdf";
48 private static final String expectedIp2 = "adsfadsafaf";
49
50 private RemoteCacheServer<String, String> server;
51
52 @Override
53 protected void setUp() throws Exception
54 {
55 super.setUp();
56
57 IRemoteCacheServerAttributes rcsa = new RemoteCacheServerAttributes();
58 rcsa.setConfigFileName( "/TestRemoteCacheServer.ccf" );
59 Properties config = RemoteUtils.loadProps(rcsa.getConfigFileName());
60 this.server = new RemoteCacheServer<String, String>( rcsa, config );
61 }
62
63 @Override
64 protected void tearDown() throws Exception
65 {
66 this.server.shutdown();
67
68 super.tearDown();
69 }
70
71
72
73
74
75
76
77 public void testAddListenerToCache_LOCALtype()
78 throws Exception
79 {
80 MockRemoteCacheListener<String, String> mockListener1 = new MockRemoteCacheListener<String, String>();
81 mockListener1.remoteType = RemoteType.LOCAL;
82 mockListener1.localAddress = expectedIp1;
83 MockRemoteCacheListener<String, String> mockListener2 = new MockRemoteCacheListener<String, String>();
84 mockListener1.remoteType = RemoteType.LOCAL;
85 mockListener2.localAddress = expectedIp2;
86
87 String cacheName = "testAddListener";
88
89
90 server.addCacheListener( cacheName, mockListener1 );
91 server.addCacheListener( cacheName, mockListener2 );
92
93
94 assertEquals( "Wrong listener id.", 1, mockListener1.getListenerId() );
95 assertEquals( "Wrong listener id.", 2, mockListener2.getListenerId() );
96 assertEquals( "Wrong ip.", expectedIp1, server.getExtraInfoForRequesterId( 1 ) );
97 assertEquals( "Wrong ip.", expectedIp2, server.getExtraInfoForRequesterId( 2 ) );
98 }
99
100
101
102
103
104
105
106 public void testAddListenerToCache_CLUSTERtype()
107 throws Exception
108 {
109 MockRemoteCacheListener<String, String> mockListener1 = new MockRemoteCacheListener<String, String>();
110 mockListener1.remoteType = RemoteType.CLUSTER;
111 mockListener1.localAddress = expectedIp1;
112 MockRemoteCacheListener<String, String> mockListener2 = new MockRemoteCacheListener<String, String>();
113 mockListener1.remoteType = RemoteType.CLUSTER;
114 mockListener2.localAddress = expectedIp2;
115
116 String cacheName = "testAddListener";
117
118
119 server.addCacheListener( cacheName, mockListener1 );
120 server.addCacheListener( cacheName, mockListener2 );
121
122
123 assertEquals( "Wrong listener id.", 1, mockListener1.getListenerId() );
124 assertEquals( "Wrong listener id.", 2, mockListener2.getListenerId() );
125 assertEquals( "Wrong ip.", expectedIp1, server.getExtraInfoForRequesterId( 1 ) );
126 assertEquals( "Wrong ip.", expectedIp2, server.getExtraInfoForRequesterId( 2 ) );
127 }
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163 public void testAddListener_ToAllThenRemove()
164 throws Exception
165 {
166 MockRemoteCacheListener<String, String> mockListener1 = new MockRemoteCacheListener<String, String>();
167 MockRemoteCacheListener<String, String> mockListener2 = new MockRemoteCacheListener<String, String>();
168
169 String cacheName = "testAddListenerToAllThenRemove";
170
171
172 server.addCacheListener( cacheName, mockListener1 );
173 server.addCacheListener( cacheName, mockListener2 );
174
175
176 assertEquals( "Wrong number of listeners.", 2, server.getCacheListeners( cacheName ).eventQMap.size() );
177 assertEquals( "Wrong listener id.", 1, mockListener1.getListenerId() );
178 assertEquals( "Wrong listener id.", 2, mockListener2.getListenerId() );
179
180
181 server.removeCacheListener( cacheName, mockListener1.getListenerId() );
182 assertEquals( "Wrong number of listeners.", 1, server.getCacheListeners( cacheName ).eventQMap.size() );
183 }
184
185
186
187
188
189
190
191
192 public void testAddListener_ToAllThenRemove_clusterType()
193 throws Exception
194 {
195 MockRemoteCacheListener<String, String> mockListener1 = new MockRemoteCacheListener<String, String>();
196 mockListener1.remoteType = RemoteType.CLUSTER;
197 MockRemoteCacheListener<String, String> mockListener2 = new MockRemoteCacheListener<String, String>();
198 mockListener2.remoteType = RemoteType.CLUSTER;
199
200 String cacheName = "testAddListenerToAllThenRemove";
201
202
203 server.addCacheListener( cacheName, mockListener1 );
204 server.addCacheListener( cacheName, mockListener2 );
205
206
207 assertEquals( "Wrong number of listeners.", 0, server.getCacheListeners( cacheName ).eventQMap.size() );
208 assertEquals( "Wrong number of listeners.", 2, server.getClusterListeners( cacheName ).eventQMap.size() );
209 assertEquals( "Wrong listener id.", 1, mockListener1.getListenerId() );
210 assertEquals( "Wrong listener id.", 2, mockListener2.getListenerId() );
211
212
213 server.removeCacheListener( cacheName, mockListener1.getListenerId() );
214 assertEquals( "Wrong number of listeners.", 1, server.getClusterListeners( cacheName ).eventQMap.size() );
215 assertNull( "Should be no entry in the ip map.", server.getExtraInfoForRequesterId( 1 ) );
216 }
217
218
219
220
221
222
223 public void testSimpleRegisterListenerAndPut()
224 throws Exception
225 {
226 IRemoteCacheServerAttributes rcsa = new RemoteCacheServerAttributes();
227 rcsa.setConfigFileName( "/TestRemoteCacheServer.ccf" );
228
229 Properties config = RemoteUtils.loadProps(rcsa.getConfigFileName());
230 MockRemoteCacheListener<String, Long> mockListener = new MockRemoteCacheListener<String, Long>();
231 RemoteCacheServer<String, Long> server = new RemoteCacheServer<String, Long>( rcsa, config );
232
233 String cacheName = "testSimpleRegisterListenerAndPut";
234 server.addCacheListener( cacheName, mockListener );
235
236
237 List<ICacheElement<String, Long>> inputItems = new LinkedList<ICacheElement<String, Long>>();
238 int numToPut = 10;
239
240 for ( int i = 0; i < numToPut; i++ )
241 {
242 ICacheElement<String, Long> element = new CacheElement<String, Long>( cacheName, String.valueOf( i ), Long.valueOf( i ) );
243 inputItems.add( element );
244 server.update( element, 9999 );
245 }
246
247 Thread.sleep( 100 );
248 Thread.yield();
249 Thread.sleep( 100 );
250
251
252 assertEquals( "Wrong number of items put to listener.", numToPut, mockListener.putItems.size() );
253 for ( int i = 0; i < numToPut; i++ )
254 {
255 assertEquals( "Wrong item.", inputItems.get( i ), mockListener.putItems.get( i ) );
256 }
257
258 server.shutdown();
259 }
260
261
262
263
264
265
266
267
268 public void testSimpleRegisterListenerAndPut_FromClusterWithLCC()
269 throws Exception
270 {
271
272 IRemoteCacheServerAttributes rcsa = new RemoteCacheServerAttributes();
273 rcsa.setLocalClusterConsistency( true );
274 rcsa.setConfigFileName( "/TestRemoteCacheServer.ccf" );
275 Properties config = RemoteUtils.loadProps(rcsa.getConfigFileName());
276 RemoteCacheServer<String, Long> server = new RemoteCacheServer<String, Long>( rcsa, config );
277
278
279 MockRemoteCacheListener<String, Long> clusterListener = new MockRemoteCacheListener<String, Long>();
280 clusterListener.remoteType = RemoteType.CLUSTER;
281
282
283 MockRemoteCacheListener<String, Long> localListener = new MockRemoteCacheListener<String, Long>();
284 localListener.remoteType = RemoteType.LOCAL;
285
286 String cacheName = "testSimpleRegisterListenerAndPut_FromClusterWithLCC";
287 server.addCacheListener( cacheName, clusterListener );
288 server.addCacheListener( cacheName, localListener );
289
290
291 List<ICacheElement<String, Long>> inputItems = new LinkedList<ICacheElement<String,Long>>();
292 int numToPut = 10;
293
294 for ( int i = 0; i < numToPut; i++ )
295 {
296 ICacheElement<String, Long> element = new CacheElement<String, Long>( cacheName, String.valueOf( i ), Long.valueOf( i ) );
297 inputItems.add( element );
298
299 server.update( element, clusterListener.getListenerId() );
300 }
301
302 SleepUtil.sleepAtLeast( 200 );
303 Thread.yield();
304 SleepUtil.sleepAtLeast( 200 );
305
306
307 assertEquals( "Wrong number of items put to listener.", numToPut, localListener.putItems.size() );
308 for ( int i = 0; i < numToPut; i++ )
309 {
310 assertEquals( "Wrong item.", inputItems.get( i ), localListener.putItems.get( i ) );
311 }
312
313 server.shutdown();
314 }
315
316
317
318
319
320
321 public void testSimpleRegisterListenerAndRemove()
322 throws Exception
323 {
324 MockRemoteCacheListener<String, String> mockListener = new MockRemoteCacheListener<String, String>();
325
326 String cacheName = "testSimpleRegisterListenerAndPut";
327 server.addCacheListener( cacheName, mockListener );
328
329
330 int numToPut = 10;
331
332 for ( int i = 0; i < numToPut; i++ )
333 {
334
335 server.remove( cacheName, String.valueOf( i ), 9999 );
336 }
337
338 Thread.sleep( 100 );
339 Thread.yield();
340 Thread.sleep( 100 );
341
342
343 assertEquals( "Wrong number of items removed from listener.", numToPut, mockListener.removedKeys.size() );
344 for ( int i = 0; i < numToPut; i++ )
345 {
346 assertEquals( "Wrong key.", String.valueOf( i ), mockListener.removedKeys.get( i ) );
347 }
348 }
349
350
351
352
353
354
355 public void testUpdate_simple()
356 throws Exception
357 {
358 MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
359 server.setCacheEventLogger( cacheEventLogger );
360
361 ICacheElement<String, String> item = new CacheElement<String, String>( "region", "key", "value" );
362
363
364 server.update( item );
365
366
367 assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );
368 assertEquals( "End should have been called.", 1, cacheEventLogger.endICacheEventCalls );
369 }
370
371
372
373
374
375
376 public void testGet_simple()
377 throws Exception
378 {
379 MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
380 server.setCacheEventLogger( cacheEventLogger );
381
382
383 server.get( "region", "key" );
384
385
386 assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );
387 assertEquals( "End should have been called.", 1, cacheEventLogger.endICacheEventCalls );
388 }
389
390
391
392
393
394
395 public void testGetMatching_simple()
396 throws Exception
397 {
398 MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
399 server.setCacheEventLogger( cacheEventLogger );
400
401
402 server.getMatching( "region", "pattern", 0 );
403
404
405 assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );
406 assertEquals( "End should have been called.", 1, cacheEventLogger.endICacheEventCalls );
407 }
408
409
410
411
412
413
414 public void testGetMultiple_simple()
415 throws Exception
416 {
417 MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
418 server.setCacheEventLogger( cacheEventLogger );
419
420
421 server.getMultiple( "region", new HashSet<String>() );
422
423
424 assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );
425 assertEquals( "End should have been called.", 1, cacheEventLogger.endICacheEventCalls );
426 }
427
428
429
430
431
432
433 public void testRemove_simple()
434 throws Exception
435 {
436 MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
437 server.setCacheEventLogger( cacheEventLogger );
438
439
440 server.remove( "region", "key" );
441
442
443 assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );
444 assertEquals( "End should have been called.", 1, cacheEventLogger.endICacheEventCalls );
445 }
446
447
448
449
450
451
452 public void testRemoveAll_simple()
453 throws Exception
454 {
455 MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
456 server.setCacheEventLogger( cacheEventLogger );
457
458
459 server.removeAll( "region" );
460
461
462 assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );
463 assertEquals( "End should have been called.", 1, cacheEventLogger.endICacheEventCalls );
464 }
465 }