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 import net.sf.ehcache.Cache;
21 import net.sf.ehcache.CacheManager;
22 import net.sf.ehcache.Element;
23 import net.sf.ehcache.AbstractCacheTest;
24
25 import java.rmi.Naming;
26 import java.util.Date;
27
28 /**
29 *
30 * Note these tests need a live network interface running in multicast mode to work
31 *
32 * @author Greg Luck
33 * @version $Id: RMIDistributedCacheTest.java 51 2006-04-24 09:21:10Z gregluck $
34 */
35 public class RMIDistributedCacheTest extends TestCase {
36
37
38 /**
39 * manager
40 */
41 protected CacheManager manager;
42 /**
43 * the cache name we wish to test
44 */
45 private String cacheName1 = "sampleCache1";
46 private String cacheName2 = "sampleCache2";
47 /**
48 * the cache we wish to test
49 */
50 private Cache sampleCache1;
51 private Cache sampleCache2;
52
53
54 private String hostName = "localhost";
55
56 private Integer port = new Integer(40000);
57 private Element element;
58 private CachePeer cache1Peer;
59 private CachePeer cache2Peer;
60
61 /**
62 * {@inheritDoc}
63 *
64 * @throws Exception
65 */
66 protected void setUp() throws Exception {
67 if (JVMUtil.isSingleRMIRegistryPerVM()) {
68 return;
69 }
70
71 manager = CacheManager.create(AbstractCacheTest.TEST_CONFIG_DIR + "distribution/ehcache-distributed1.xml");
72 sampleCache1 = manager.getCache(cacheName1);
73 sampleCache2 = manager.getCache(cacheName2);
74 sampleCache1.removeAll();
75 element = new Element("key", new Date());
76 sampleCache1.put(element);
77 CacheManagerPeerListener cacheManagerPeerListener =
78 new RMICacheManagerPeerListener(hostName, port, manager, new Integer(2000));
79 cacheManagerPeerListener.init();
80 cache1Peer = (CachePeer) Naming.lookup(createNamingUrl() + cacheName1);
81 cache2Peer = (CachePeer) Naming.lookup(createNamingUrl() + cacheName2);
82 }
83
84 /**
85 * Shutdown the cache
86 */
87 protected void tearDown() throws InterruptedException {
88 if (JVMUtil.isSingleRMIRegistryPerVM()) {
89 return;
90 }
91
92 Thread.sleep(10);
93 manager.shutdown();
94 }
95
96
97 /**
98 * Getting an RMI Server going is a big deal
99 */
100 public void testCreation() throws Exception {
101 if (JVMUtil.isSingleRMIRegistryPerVM()) {
102 return;
103 }
104
105 assertNotNull(cache1Peer);
106 assertNotNull(cache2Peer);
107 }
108
109 /**
110 * The use of one-time registry creation and Naming.rebind should mean we can create as many listeneres as we like.
111 * They will simply replace the ones that were there.
112 */
113 public void testMultipleCreationOfRMIServers() throws Exception {
114 if (JVMUtil.isSingleRMIRegistryPerVM()) {
115 return;
116 }
117
118 for (int i = 0; i < 100; i++) {
119 new RMICacheManagerPeerListener(hostName, port, manager, new Integer(2000));
120 }
121 cache1Peer = (CachePeer) Naming.lookup(createNamingUrl() + cacheName1);
122 assertNotNull(cache1Peer);
123 }
124
125 private String createNamingUrl() {
126 return "//" + hostName + ":" + port + "/";
127 }
128
129 /**
130 * Attempts to get the cache name
131 *
132 * @throws java.net.MalformedURLException
133 * @throws java.rmi.NotBoundException
134 * @throws java.rmi.RemoteException
135 */
136 public void testGetName() throws Exception {
137 if (JVMUtil.isSingleRMIRegistryPerVM()) {
138 return;
139 }
140
141 String lookupCacheName = cache1Peer.getName();
142 assertEquals(cacheName1, lookupCacheName);
143 lookupCacheName = cache2Peer.getName();
144 assertEquals(cacheName2, lookupCacheName);
145 }
146
147
148 }