View Javadoc

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         //allow cluster to be established
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 }