1 /**
2 * Copyright 2003-2006 Greg Luck
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package net.sf.ehcache.distribution;
18
19 import junit.framework.TestCase;
20
21 import java.rmi.RemoteException;
22 import java.rmi.Remote;
23 import java.util.List;
24
25 import net.sf.ehcache.CacheManager;
26 import net.sf.ehcache.Cache;
27 import net.sf.ehcache.AbstractCacheTest;
28 import net.sf.ehcache.event.CountingCacheEventListener;
29
30 /**
31 * Unit tests for the RMICacheManagerPeerListener
32 * <p/>
33 * Note these tests need a live network interface running in multicast mode to work
34 *
35 * @author <a href="mailto:gluck@thoughtworks.com">Greg Luck</a>
36 * @version $Id: RMICacheManagerPeerListenerTest.java 51 2006-04-24 09:21:10Z gregluck $
37 */
38 public class RMICacheManagerPeerListenerTest extends TestCase {
39
40 /**
41 * CacheManager 1 in the cluster
42 */
43 protected CacheManager manager1;
44 /**
45 * CacheManager 2 in the cluster
46 */
47 protected CacheManager manager2;
48 /**
49 * CacheManager 3 in the cluster
50 */
51 protected CacheManager manager3;
52 /**
53 * CacheManager 4 in the cluster
54 */
55 protected CacheManager manager4;
56 /**
57 * CacheManager 5 in the cluster
58 */
59 protected CacheManager manager5;
60 /**
61 * CacheManager 6 in the cluster
62 */
63 protected CacheManager manager6;
64
65 /**
66 * The name of the cache under test
67 */
68 protected String cacheName = "sampleCache1";
69 /**
70 * CacheManager 1 of 2s cache being replicated
71 */
72 protected Cache cache1;
73
74 /**
75 * CacheManager 2 of 2s cache being replicated
76 */
77 protected Cache cache2;
78
79 /**
80 * {@inheritDoc}
81 * Sets up two caches: cache1 is local. cache2 is to be receive updates
82 *
83 * @throws Exception
84 */
85 protected void setUp() throws Exception {
86 if (JVMUtil.isSingleRMIRegistryPerVM()) {
87 return;
88 }
89
90 CountingCacheEventListener.resetCounters();
91 manager1 = new CacheManager(AbstractCacheTest.TEST_CONFIG_DIR + "distribution/ehcache-distributed1.xml");
92 manager2 = new CacheManager(AbstractCacheTest.TEST_CONFIG_DIR + "distribution/ehcache-distributed2.xml");
93 manager3 = new CacheManager(AbstractCacheTest.TEST_CONFIG_DIR + "distribution/ehcache-distributed3.xml");
94 manager4 = new CacheManager(AbstractCacheTest.TEST_CONFIG_DIR + "distribution/ehcache-distributed4.xml");
95 manager5 = new CacheManager(AbstractCacheTest.TEST_CONFIG_DIR + "distribution/ehcache-distributed5.xml");
96
97 manager1.getCache(cacheName).removeAll();
98
99 cache1 = manager1.getCache(cacheName);
100 cache1.removeAll();
101
102 cache2 = manager2.getCache(cacheName);
103 cache2.removeAll();
104
105
106 Thread.sleep(100);
107
108 }
109
110
111 /**
112 * {@inheritDoc}
113 *
114 * @throws Exception
115 */
116 protected void tearDown() throws Exception {
117 if (JVMUtil.isSingleRMIRegistryPerVM()) {
118 return;
119 }
120
121
122 manager1.shutdown();
123 manager2.shutdown();
124 manager3.shutdown();
125 manager4.shutdown();
126 if (manager5 != null) {
127 manager5.shutdown();
128 }
129
130 if (manager6 != null) {
131 manager6.shutdown();
132 }
133 }
134
135
136 /**
137 * Are all of the replicated caches bound to the RMI listener?
138 */
139 public void testPeersBound() {
140
141 if (JVMUtil.isSingleRMIRegistryPerVM()) {
142 return;
143 }
144
145 List cachePeers1 = ((RMICacheManagerPeerListener) manager1.getCachePeerListener()).getBoundCachePeers();
146 assertEquals(55, cachePeers1.size());
147 String[] boundCachePeers1 = ((RMICacheManagerPeerListener) manager1.getCachePeerListener()).listBoundRMICachePeers();
148 assertEquals(55, boundCachePeers1.length);
149 assertEquals(cachePeers1.size(), boundCachePeers1.length);
150
151 List cachePeers2 = ((RMICacheManagerPeerListener) manager2.getCachePeerListener()).getBoundCachePeers();
152 assertEquals(55, cachePeers2.size());
153 String[] boundCachePeers2 = ((RMICacheManagerPeerListener) manager2.getCachePeerListener()).listBoundRMICachePeers();
154 assertEquals(55, boundCachePeers2.length);
155 assertEquals(cachePeers2.size(), boundCachePeers2.length);
156
157
158 List cachePeers3 = ((RMICacheManagerPeerListener) manager3.getCachePeerListener()).getBoundCachePeers();
159 assertEquals(55, cachePeers3.size());
160 String[] boundCachePeers3 = ((RMICacheManagerPeerListener) manager3.getCachePeerListener()).listBoundRMICachePeers();
161 assertEquals(55, boundCachePeers3.length);
162 assertEquals(cachePeers3.size(), boundCachePeers3.length);
163
164
165 List cachePeers4 = ((RMICacheManagerPeerListener) manager4.getCachePeerListener()).getBoundCachePeers();
166 assertEquals(55, cachePeers4.size());
167 String[] boundCachePeers4 = ((RMICacheManagerPeerListener) manager4.getCachePeerListener()).listBoundRMICachePeers();
168 assertEquals(55, boundCachePeers4.length);
169 assertEquals(cachePeers4.size(), boundCachePeers4.length);
170
171 List cachePeers5 = ((RMICacheManagerPeerListener) manager5.getCachePeerListener()).getBoundCachePeers();
172 assertEquals(55, cachePeers5.size());
173 String[] boundCachePeers5 = ((RMICacheManagerPeerListener) manager5.getCachePeerListener()).listBoundRMICachePeers();
174 assertEquals(55, boundCachePeers5.length);
175 assertEquals(cachePeers5.size(), boundCachePeers5.length);
176 }
177
178
179 /**
180 * Are all of the replicated caches bound to the listener and working?
181 */
182 public void testBoundListenerPeers() throws RemoteException {
183
184 if (JVMUtil.isSingleRMIRegistryPerVM()) {
185 return;
186 }
187
188 String[] boundCachePeers1 = ((RMICacheManagerPeerListener) manager1.getCachePeerListener()).listBoundRMICachePeers();
189 for (int i = 0; i < boundCachePeers1.length; i++) {
190 String boundCacheName = boundCachePeers1[i];
191 Remote remote = ((RMICacheManagerPeerListener) manager1.getCachePeerListener()).lookupPeer(boundCacheName);
192 assertNotNull(remote);
193 }
194
195 }
196
197
198 }