View Javadoc

1   package test.crispy.impl;
2   
3   import java.util.ArrayList;
4   import java.util.Date;
5   import java.util.List;
6   import java.util.Properties;
7   
8   import junit.framework.TestCase;
9   import net.sf.crispy.Property;
10  import net.sf.crispy.impl.JBossRemotingExecutor;
11  import net.sf.crispy.impl.MiniServer;
12  import net.sf.crispy.impl.ServiceManager;
13  import net.sf.crispy.impl.jboss.MiniJBossRemotingServer;
14  import net.sf.crispy.interceptor.StopWatchInterceptor;
15  import net.sf.crispy.strategy.NameSpacePlusMethodInvocationStrategy;
16  import test.crispy.JUnitTestException2;
17  import test.crispy.compatibility.CompatibilityKit;
18  import test.crispy.concurrent.AsynchronousCallbackForTests;
19  import test.crispy.example.model.Kunde;
20  import test.crispy.example.model.Primitive;
21  import test.crispy.example.model.ValidationError;
22  import test.crispy.example.service.Calculator;
23  import test.crispy.example.service.Echo;
24  
25  public class JBossRemotingServiceTest extends TestCase {
26  	
27  	private static MiniServer miniServer = null;
28  	private CompatibilityKit compatibilityKit = new CompatibilityKit();
29  	
30  	/**
31  	 * Init <code>static</code> MiniServer for all tests.
32  	 */
33  	public JBossRemotingServiceTest() {
34  		if (miniServer == null) {
35  			miniServer = new MiniJBossRemotingServer();
36  			miniServer.addService("test.crispy.example.service.Echo", "test.crispy.example.service.EchoImpl");
37  			miniServer.addService("test.crispy.example.service.Calculator", "test.crispy.example.service.CalculatorImpl");
38  			
39  			miniServer.start();			
40  		}
41  		compatibilityKit.addProperty(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
42  	}	
43  	
44  	protected void setUp() throws Exception {
45  		super.setUp();
46  		compatibilityKit.removeProperty(Property.DYNAMIC_PROXY_CLASS);
47  	}	
48  	
49      public void testEchoPrimitive() throws Exception {
50      	Properties prop = new Properties();
51      	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
52      	
53          ServiceManager lvServiceManager = new ServiceManager(prop);
54          Echo lvEcho = (Echo) lvServiceManager.createService(Echo.class);
55          Primitive lvPrimitive = Primitive.createPrimitiveExample();
56          
57          Primitive lvPrimitiveAfter = lvEcho.echoPrimitive(lvPrimitive);
58          assertEquals(lvPrimitive, lvPrimitiveAfter);
59          assertNotSame(lvPrimitive, lvPrimitiveAfter);
60  	}
61  
62  	public void testSimpleRemotePing() throws Exception {
63  		Properties prop = new Properties();
64      	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
65      			
66  		ServiceManager manager = new ServiceManager(prop);
67  		Echo echo =  (Echo) manager.createService(Echo.class);
68  		String lvPing = echo.ping();
69  		assertEquals(lvPing, Echo.PING_STRING);
70  	}
71  	
72     public void testSimpleRemoteInvocation() throws Exception {
73          compatibilityKit.makeSimpleEchoTest(compatibilityKit.createServiceManager());
74  	}
75  	    
76  	 
77      public void testSimpleRemoteInvocationWithDynamicCglibProxy() throws Exception {
78      	compatibilityKit.addProperty(Property.DYNAMIC_PROXY_CLASS, Property.VALUE_FOR_CGLIB_DYNAMIC_PROXY);
79      	compatibilityKit.makeSimpleEchoTest(compatibilityKit.createServiceManager());
80  	}	
81      
82      public void testSimpleRemoteInvocationWithDynamicJdkProxy() throws Exception {
83      	compatibilityKit.addProperty(Property.DYNAMIC_PROXY_CLASS, Property.VALUE_FOR_JDK_DYNAMIC_PROXY);
84      	compatibilityKit.makeSimpleEchoTest(compatibilityKit.createServiceManager());
85  	}
86      
87      public void testSimpleDoubleRemoteInvocation() throws Exception {
88      	compatibilityKit.makeMultipleServiceTest();
89      }
90      
91      public void testComplexRemoteInvocation() throws Exception {
92      	compatibilityKit.makeComplexEchoTest(compatibilityKit.createServiceManager());
93      }
94  
95      public void testCycleDetectionTest() throws Exception {
96  		compatibilityKit.makeCycleDetectionTest(compatibilityKit.createServiceManager());
97  	}
98      
99      public void testAddNode() throws Exception {
100     	compatibilityKit.makeAddNodeTest(compatibilityKit.createServiceManager());
101 	}    
102     
103     public void testProxyInterceptor() throws Exception {
104         Properties prop =  new Properties();
105         prop.put(Property.INTERCEPTOR_CLASS, StopWatchInterceptor.class.getName());
106         prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
107         
108         ServiceManager lvServiceManager = new ServiceManager(prop);
109 
110 		Calculator lvCalculator = (Calculator) lvServiceManager.createService(Calculator.class);
111 		assertNotNull(lvCalculator);
112 		int lvResult = lvCalculator.add(2, 3);
113 		assertEquals(lvResult, 5);
114 		lvResult = lvCalculator.subtract(8, 2);
115 		assertEquals(lvResult, 6);		
116         
117         
118 		Echo lvEcho = (Echo) lvServiceManager.createService(Echo.class);
119 		assertNotNull(lvEcho);
120 		String lvEchoStr = "Hallo Echo";
121 		assertEquals(lvEcho.echo(lvEchoStr), lvEchoStr);		
122 	}
123 
124     public void testModifyService() throws Exception {
125 		compatibilityKit.makeModifyServiceTest(compatibilityKit.createServiceManager());
126 	}
127     
128     public void testAddLongs() throws Exception {
129     	Properties prop = new Properties();
130     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
131     	
132 		ServiceManager manager = new ServiceManager(prop);
133 		Calculator calc =  (Calculator) manager.createService(Calculator.class);
134 		assertEquals(calc.addLong(new Long(123l), new Long(124l)), new Long(247));
135 	}
136     
137     public void testOverloading() throws Exception {
138 		Properties prop = new Properties();
139     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());		
140 		
141 		ServiceManager manager = new ServiceManager(prop);
142 		Calculator lvCalculator = (Calculator) manager.createService(Calculator.class);
143 		int lvIntResult = lvCalculator.add(2, 3);
144 		assertEquals(lvIntResult, 5);
145 		long lvLongResult = lvCalculator.add(21, 32);
146 		assertEquals(lvLongResult, 53);
147 		double lvDoubleResult = lvCalculator.add(2.3, 3.2);
148 		assertEquals(lvDoubleResult, 5.5, 0);
149     }
150     
151     public void testOverloadingInteger() throws Exception {
152 		Properties prop = new Properties();
153     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
154 		
155 		ServiceManager manager = new ServiceManager(prop);
156 		Echo echo =  (Echo) manager.createService(Echo.class);
157 		Integer i[] = echo.echoArray(new Integer[] {new Integer(1), new Integer(3), new Integer(5)});
158 		assertTrue(i.length == 3);
159 		assertEquals(i[0], new Integer(1));
160 		assertEquals(i[1], new Integer(3));
161 		assertEquals(i[2], new Integer(5));
162 	}
163     
164     public void testOverloadingLong() throws Exception {
165 		Properties prop = new Properties();
166     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
167 		
168 		ServiceManager manager = new ServiceManager(prop);
169 		Echo echo =  (Echo) manager.createService(Echo.class);
170 		Long l[] = echo.echoArray(new Long[] {new Long(1), new Long(5)});
171 		assertTrue(l.length == 2);
172 		assertEquals(l[0], new Long(1));
173 		assertEquals(l[1], new Long(5));
174 	}
175 
176     public void testOverloadingObject() throws Exception {
177 		Properties prop = new Properties();
178     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
179 		
180 		ServiceManager manager = new ServiceManager(prop);
181 		Echo echo =  (Echo) manager.createService(Echo.class);
182 		Object o[] = echo.echoArray(new Object[] {"a", new Integer(3), new Long(5)});
183 		assertTrue(o.length == 3);
184 		assertEquals(o[0], "a");
185 		assertEquals(o[1], new Integer(3));
186 		assertEquals(o[2], new Long(5));
187 	}
188     
189     public void testCreateService() throws Exception {
190         Properties prop = new Properties();
191     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
192     	
193         ServiceManager lvManager = new ServiceManager(prop);
194         Calculator lvCalculator1 = (Calculator) lvManager.createService(Calculator.class);
195         Calculator lvCalculator2 = (Calculator) lvManager.createService(Calculator.class);
196         
197         assertNotNull(lvCalculator1);
198         assertNotNull(lvCalculator2);
199         assertNotSame(lvCalculator1, lvCalculator2);
200 	}
201     
202     public void testThrowException() throws Exception {
203         Properties prop = new Properties();
204     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());		
205 		ServiceManager lvManager = new ServiceManager(prop);
206 
207 		Echo lvEcho = (Echo) lvManager.createService(Echo.class);
208 		boolean throwException = false;
209 		try {
210 			lvEcho.throwException("A Test-Excption.");
211 		} catch (Exception e) {
212 			throwException = true;
213 		}
214 		assertTrue("No Exception thrown: " + throwException, throwException);
215 	}
216 
217     public void testNullValueParamsWithException() throws Exception {
218         Properties prop = new Properties();
219 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
220 		
221 		ServiceManager lvManager = new ServiceManager(prop);
222 
223 		Echo lvEcho = (Echo) lvManager.createService(Echo.class);
224 		String s = lvEcho.echo(null);
225 		assertNull(s);
226 	}
227 
228     public void testNullLongValueParams() throws Exception {
229         Properties prop = new Properties();
230 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
231 		
232 		ServiceManager lvManager = new ServiceManager(prop);
233 
234 		Calculator lvCalculator = (Calculator) lvManager.createService(Calculator.class);
235 		Long lvLong = lvCalculator.addLong(null, null);
236 		assertNull(lvLong);
237 	}
238 
239     public void testNullComplexValueParams() throws Exception {
240         Properties prop = new Properties();
241 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
242 		
243 		ServiceManager lvManager = new ServiceManager(prop);
244 
245 		Echo lvEcho = (Echo) lvManager.createService(Echo.class);
246 		Kunde k = lvEcho.renameKunde(null, null);
247 		assertNull(k);
248 	}
249 
250 	public void testTransferDate() throws Exception {
251 		Properties prop = new Properties();
252 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
253 		
254 		ServiceManager manager = new ServiceManager(prop);
255 		Echo lvEcho =  (Echo) manager.createService(Echo.class);
256 		
257 		Kunde k = new Kunde("JUnit-Test-Name");
258 		Date d = new Date();
259 		k.setDate(d);
260 		Kunde k2 = lvEcho.renameKunde(k, "Rename-Test");
261 		assertNotNull(k2.getDate());
262 		assertEquals(k.getDate(), k2.getDate());
263 	}
264 	
265 	public void testInvalidInvocationStrategy() throws Exception {
266         Properties prop = new Properties();
267     	prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());		
268     	prop.put(Property.INVOCATION_STRATEGY, NameSpacePlusMethodInvocationStrategy.class.getName());
269 		ServiceManager lvManager = new ServiceManager(prop);
270 
271 		Echo lvEcho = (Echo) lvManager.createService(Echo.class);
272 		try {
273 			lvEcho.echo("Bla");
274 			fail("Must be thrown Exception. It is set a bad InvocationStrategy");
275 		} catch (Exception e) {
276 			assertTrue(true);
277 		}
278 	}
279 
280 	
281     
282 	public void testAsynchronousInvocation() throws Exception {
283 		Properties prop = new Properties();
284 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
285 		prop.put(Property.ASYNCHRONOUS_CALLBACK_CLASS, AsynchronousCallbackForTests.class.getName());
286 		
287 		ServiceManager manager = new ServiceManager(prop);
288 		Echo echo =  (Echo) manager.createService(Echo.class);
289 		String lvPing = echo.ping();
290 		assertNull(lvPing);
291 		
292         assertTrue(manager.isInvocationAsynchronous(Echo.class));
293         
294         Thread.sleep(300);
295         AsynchronousCallbackForTests lvAsynchronousCallbackForTests = (AsynchronousCallbackForTests) manager.getAsynchronousCallback(Echo.class);
296         assertNotNull(lvAsynchronousCallbackForTests);
297         
298         assertEquals("ping", lvAsynchronousCallbackForTests.getMethodName());
299         assertEquals(Echo.PING_STRING, lvAsynchronousCallbackForTests.getResult());
300         assertNull(lvAsynchronousCallbackForTests.getThrowable());
301 	}
302 	
303 	public void testAsynchronousInvocationWithMultyThreaded() throws Exception {
304 		Properties prop = new Properties();
305 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
306 		prop.put(Property.ASYNCHRONOUS_CALLBACK_CLASS, AsynchronousCallbackForTests.class.getName());
307 		prop.put(Property.ASYNCHRONOUS_MAX_SIZE_OF_THREADS, "3");
308 		
309 		ServiceManager manager = new ServiceManager(prop);
310 		Echo echo =  (Echo) manager.createService(Echo.class);
311 		String lvPing = echo.ping();
312 		assertNull(lvPing);
313 		
314         assertTrue(manager.isInvocationAsynchronous(Echo.class));
315         
316         Thread.sleep(300);
317         AsynchronousCallbackForTests lvAsynchronousCallbackForTests = (AsynchronousCallbackForTests) manager.getAsynchronousCallback(Echo.class);
318         assertNotNull(lvAsynchronousCallbackForTests);
319         
320         assertEquals("ping", lvAsynchronousCallbackForTests.getMethodName());
321         assertEquals(Echo.PING_STRING, lvAsynchronousCallbackForTests.getResult());
322         assertNull(lvAsynchronousCallbackForTests.getThrowable());
323 	}
324 
325 	public void testIndivualAsynchronousInvocationWithMultyThreaded() throws Exception {
326 		Properties prop = new Properties();
327 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
328 
329 		ServiceManager manager = new ServiceManager(prop);
330 		AsynchronousCallbackForTests lvCallback = new AsynchronousCallbackForTests();
331 		Echo e = (Echo) manager.createService(Echo.class, lvCallback, null, 8);
332 		
333 		String lvEchoStr = null;
334 		String lvLongExecution = null;
335 		for (int i=0;i<3;i++) {
336 			lvLongExecution = e.doLongExecution("Hello");
337 			assertNull(lvLongExecution);
338 			lvEchoStr = e.echo("Hello");
339 			assertNull(lvEchoStr);
340 		}
341 	}
342 	
343 	public void testIndivualAsynchronousInvocationWithMultyThreadedWith2Services() throws Exception {
344 		Properties prop = new Properties();
345 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
346 
347 		ServiceManager manager = new ServiceManager(prop);
348 		AsynchronousCallbackForTests lvCallback = new AsynchronousCallbackForTests();
349 		Echo e = (Echo) manager.createService(Echo.class, lvCallback, null, 8);
350 		Calculator c =  (Calculator) manager.createService(Calculator.class, lvCallback, null, 8);
351 		
352 		String lvLongExecution = null;
353 		Long lvAddResult = null;
354 		for (int i=0;i<3;i++) {
355 			lvLongExecution = e.doLongExecution("Hello");
356 			assertNull(lvLongExecution);
357 			lvAddResult = c.addLong(new Long(123), new Long(456));
358 			assertNull(lvAddResult);
359 		}
360 	}
361 
362 	public void testIndivualAsynchronousInvocationWithMethodFilter() throws Exception {
363 		Properties prop = new Properties();
364 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
365 
366 		ServiceManager manager = new ServiceManager(prop);
367 		AsynchronousCallbackForTests lvCallback = new AsynchronousCallbackForTests();
368 		Echo e = (Echo) manager.createService(Echo.class, lvCallback, new String[] { "doLongExecution" }, 4);
369 		
370 		String lvEchoStr = null;
371 		String lvLongExecution = null;
372 		for (int i=0;i<3;i++) {
373 			lvLongExecution = e.doLongExecution("Hello");
374 			assertNotNull(lvLongExecution);
375 			assertEquals("Hello", lvLongExecution);
376 			lvEchoStr = e.echo("Hello");
377 			assertNull(lvEchoStr);
378 		}
379 	}
380 
381 	public void testAddAndRemoveAsynchronousCallback() throws Exception {
382 		Properties prop = new Properties();
383 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
384 
385 		ServiceManager manager = new ServiceManager(prop);
386 		AsynchronousCallbackForTests lvCallback = new AsynchronousCallbackForTests();
387 		Echo e = (Echo) manager.createService(Echo.class, lvCallback, new String[] { "doLongExecution" }, 4);
388 		Calculator c =  (Calculator) manager.createService(Calculator.class, lvCallback, null, 4);
389 				
390 		String lvEchoStr = e.echo("Hello");
391 		assertNull(lvEchoStr);
392 		
393 		Long lvAddResult = c.addLong(new Long(1), new Long(3));
394 		assertNull(lvAddResult);
395 		
396 		assertTrue(manager.isInvocationAsynchronous(Calculator.class));
397 		manager.removeAsynchronousCallback(Calculator.class);
398 		assertFalse(manager.isInvocationAsynchronous(Calculator.class));
399 		
400 		lvEchoStr = e.echo("Hello2");
401 		assertNull(lvEchoStr);
402 		
403 		lvAddResult = c.addLong(new Long(2), new Long(3));
404 		assertNotNull(lvAddResult);
405 		assertEquals(new Long(5), lvAddResult);
406 		
407 		
408 		manager.removeAsynchronousCallback(Echo.class);
409 		
410 		lvEchoStr = e.echo("Hello3");
411 		assertNotNull(lvEchoStr);
412 		assertEquals("Hello3", lvEchoStr);
413 	}
414 
415 	public void testRemoteMethodWithThrownExceptionWithValidationErrors() throws Exception {
416 		Properties prop = new Properties();
417 		prop.put(Property.EXECUTOR_CLASS, JBossRemotingExecutor.class.getName());
418     	
419 		ServiceManager manager = new ServiceManager(prop);
420 		Echo lvEcho = (Echo) manager.createService(Echo.class);
421 		
422 		List lvValidationErrors = new ArrayList();
423 		ValidationError lvError1 = new ValidationError(1, "Error 1");
424 		ValidationError lvError2 = new ValidationError(2, "Error 2");
425 		lvValidationErrors.add(lvError1);
426 		lvValidationErrors.add(lvError2);
427 		try {
428 			lvEcho.throwComplexException("JUnit-Test", lvValidationErrors);
429 			fail("The method throwComplexEception must be thrown a Exception");
430 		} catch (JUnitTestException2 e) {
431 			assertEquals(lvValidationErrors.size(), e.getValidationErrors().size());
432 		}
433 	}
434 	
435 }