1 //
2 // Copyright (c) ZeroC, Inc. All rights reserved.
3 //
4 
5 package test.IceDiscovery.simple;
6 
7 import test.IceDiscovery.simple.Test.*;
8 
9 import java.util.List;
10 import java.util.ArrayList;
11 
12 import java.util.Set;
13 import java.util.HashSet;
14 
15 public class AllTests
16 {
17     private static void
test(boolean b)18     test(boolean b)
19     {
20         if(!b)
21         {
22             throw new RuntimeException();
23         }
24     }
25 
26     public static void
allTests(Ice.Communicator communicator, int num)27     allTests(Ice.Communicator communicator, int num)
28     {
29         List<ControllerPrx> proxies = new ArrayList<ControllerPrx>();
30         List<ControllerPrx> indirectProxies = new ArrayList<ControllerPrx>();
31         for(int i = 0; i < num; ++i)
32         {
33             String id = "controller" + i;
34             proxies.add(ControllerPrxHelper.uncheckedCast(communicator.stringToProxy(id)));
35             indirectProxies.add(ControllerPrxHelper.uncheckedCast(communicator.stringToProxy(id + "@control" + i)));
36         }
37 
38         System.out.print("testing indirect proxies... ");
39         System.out.flush();
40         {
41             for(ControllerPrx prx : indirectProxies)
42             {
43                 prx.ice_ping();
44             }
45         }
46         System.out.println("ok");
47 
48         System.out.print("testing well-known proxies... ");
49         System.out.flush();
50         {
51             for(ControllerPrx prx : proxies)
52             {
53                 prx.ice_ping();
54             }
55         }
56         System.out.println("ok");
57 
58         System.out.print("testing object adapter registration... ");
59         System.out.flush();
60         {
61             try
62             {
63                 communicator.stringToProxy("object @ oa1").ice_ping();
64                 test(false);
65             }
66             catch(Ice.NoEndpointException ex)
67             {
68             }
69 
70             proxies.get(0).activateObjectAdapter("oa", "oa1", "");
71 
72             try
73             {
74                 communicator.stringToProxy("object @ oa1").ice_ping();
75                 test(false);
76             }
77             catch(Ice.ObjectNotExistException ex)
78             {
79             }
80 
81             proxies.get(0).deactivateObjectAdapter("oa");
82 
83             try
84             {
85                 communicator.stringToProxy("object @ oa1").ice_ping();
86                 test(false);
87             }
88             catch(Ice.NoEndpointException ex)
89             {
90             }
91         }
92         System.out.println("ok");
93 
94         System.out.print("testing object adapter migration...");
95         System.out.flush();
96         {
97             proxies.get(0).activateObjectAdapter("oa", "oa1", "");
98             proxies.get(0).addObject("oa", "object");
99             communicator.stringToProxy("object @ oa1").ice_ping();
100             proxies.get(0).removeObject("oa", "object");
101             proxies.get(0).deactivateObjectAdapter("oa");
102 
103             proxies.get(1).activateObjectAdapter("oa", "oa1", "");
104             proxies.get(1).addObject("oa", "object");
105             communicator.stringToProxy("object @ oa1").ice_ping();
106             proxies.get(1).removeObject("oa", "object");
107             proxies.get(1).deactivateObjectAdapter("oa");
108         }
109         System.out.println("ok");
110 
111         System.out.print("testing object migration...");
112         System.out.flush();
113         {
114             proxies.get(0).activateObjectAdapter("oa", "oa1", "");
115             proxies.get(1).activateObjectAdapter("oa", "oa2", "");
116 
117             proxies.get(0).addObject("oa", "object");
118             communicator.stringToProxy("object @ oa1").ice_ping();
119             communicator.stringToProxy("object").ice_ping();
120             proxies.get(0).removeObject("oa", "object");
121 
122             proxies.get(1).addObject("oa", "object");
123             communicator.stringToProxy("object @ oa2").ice_ping();
124             communicator.stringToProxy("object").ice_ping();
125             proxies.get(1).removeObject("oa", "object");
126 
127             try
128             {
129                 communicator.stringToProxy("object @ oa1").ice_ping();
130             }
131             catch(Ice.ObjectNotExistException ex)
132             {
133             }
134             try
135             {
136                 communicator.stringToProxy("object @ oa2").ice_ping();
137             }
138             catch(Ice.ObjectNotExistException ex)
139             {
140             }
141 
142             proxies.get(0).deactivateObjectAdapter("oa");
143             proxies.get(1).deactivateObjectAdapter("oa");
144         }
145         System.out.println("ok");
146 
147         System.out.print("testing replica groups...");
148         System.out.flush();
149         {
150             proxies.get(0).activateObjectAdapter("oa", "oa1", "rg");
151             proxies.get(1).activateObjectAdapter("oa", "oa2", "rg");
152             proxies.get(2).activateObjectAdapter("oa", "oa3", "rg");
153 
154             proxies.get(0).addObject("oa", "object");
155             proxies.get(1).addObject("oa", "object");
156             proxies.get(2).addObject("oa", "object");
157 
158             communicator.stringToProxy("object @ oa1").ice_ping();
159             communicator.stringToProxy("object @ oa2").ice_ping();
160             communicator.stringToProxy("object @ oa3").ice_ping();
161 
162             communicator.stringToProxy("object @ rg").ice_ping();
163 
164             Set<String> adapterIds = new HashSet<String>();
165             adapterIds.add("oa1");
166             adapterIds.add("oa2");
167             adapterIds.add("oa3");
168             TestIntfPrx intf = TestIntfPrxHelper.uncheckedCast(communicator.stringToProxy("object"));
169             intf = (TestIntfPrx)intf.ice_connectionCached(false).ice_locatorCacheTimeout(0);
170             while(!adapterIds.isEmpty())
171             {
172                 adapterIds.remove(intf.getAdapterId());
173             }
174 
175             while(true)
176             {
177                 adapterIds.add("oa1");
178                 adapterIds.add("oa2");
179                 adapterIds.add("oa3");
180                 intf = TestIntfPrxHelper.uncheckedCast(
181                     communicator.stringToProxy("object @ rg").ice_connectionCached(false));
182                 int nRetry = 100;
183                 while(!adapterIds.isEmpty() && --nRetry > 0)
184                 {
185                     adapterIds.remove(intf.getAdapterId());
186                 }
187                 if(nRetry > 0)
188                 {
189                     break;
190                 }
191 
192                 // The previous locator lookup probably didn't return all the replicas... try again.
193                 communicator.stringToProxy("object @ rg").ice_locatorCacheTimeout(0).ice_ping();
194             }
195 
196             proxies.get(0).deactivateObjectAdapter("oa");
197             proxies.get(1).deactivateObjectAdapter("oa");
198             test(TestIntfPrxHelper.uncheckedCast(
199                      communicator.stringToProxy("object @ rg")).getAdapterId().equals("oa3"));
200             proxies.get(2).deactivateObjectAdapter("oa");
201 
202             proxies.get(0).activateObjectAdapter("oa", "oa1", "rg");
203             proxies.get(0).addObject("oa", "object");
204             test(TestIntfPrxHelper.uncheckedCast(
205                      communicator.stringToProxy("object @ rg")).getAdapterId().equals("oa1"));
206             proxies.get(0).deactivateObjectAdapter("oa");
207         }
208         System.out.println("ok");
209 
210         System.out.print("testing invalid lookup endpoints... ");
211         System.out.flush();
212         {
213             String multicast;
214             if(communicator.getProperties().getProperty("Ice.IPv6").equals("1"))
215             {
216                 multicast = "\"ff15::1\"";
217             }
218             else
219             {
220                 multicast = "239.255.0.1";
221             }
222 
223             {
224 
225                 Ice.InitializationData initData = new Ice.InitializationData();
226                 initData.properties = communicator.getProperties()._clone();
227                 initData.properties.setProperty("IceDiscovery.Lookup", "udp -h " + multicast + " --interface unknown");
228                 Ice.Communicator com = Ice.Util.initialize(initData);
229                 test(com.getDefaultLocator() != null);
230                 try
231                 {
232                     com.stringToProxy("controller0@control0").ice_ping();
233                     test(false);
234                 }
235                 catch(Ice.LocalException ex)
236                 {
237                 }
238                 com.destroy();
239             }
240             {
241                 Ice.InitializationData initData = new Ice.InitializationData();
242                 initData.properties = communicator.getProperties()._clone();
243                 String intf = initData.properties.getProperty("IceDiscovery.Interface");
244                 if(!intf.isEmpty())
245                 {
246                     intf = " --interface \"" + intf + "\"";
247                 }
248                 String port = initData.properties.getProperty("IceDiscovery.Port");
249                 initData.properties.setProperty("IceDiscovery.Lookup",
250                                                  "udp -h " + multicast + " --interface unknown:" +
251                                                  "udp -h " + multicast + " -p " + port + intf);
252                 Ice.Communicator com = Ice.Util.initialize(initData);
253                 test(com.getDefaultLocator() != null);
254                 com.stringToProxy("controller0@control0").ice_ping();
255                 com.destroy();
256             }
257         }
258         System.out.println("ok");
259 
260         System.out.print("shutting down... ");
261         System.out.flush();
262         for(ControllerPrx prx : proxies)
263         {
264             prx.shutdown();
265         }
266         System.out.println("ok");
267     }
268 }
269