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