View Javadoc
1   package test.crispy.concurrent;
2   
3   import java.lang.reflect.Method;
4   
5   import test.crispy.example.service.EchoImpl;
6   import net.sf.crispy.concurrent.MethodExecuteCallback;
7   import net.sf.crispy.concurrent.ThreadController;
8   import net.sf.crispy.concurrent.ThreadWorker;
9   import net.sf.crispy.util.Invoker;
10  import junit.framework.TestCase;
11  
12  public class ConcurrentTest extends TestCase {
13  	
14  	public void testThreadCounter() throws Exception {
15  		ThreadController lvThreadController = new ThreadController();
16  		assertEquals(lvThreadController.getCurrentRequests(), 0);
17  		
18  		ThreadWorker lvThreadWorker1 = lvThreadController.getThreadWorker();
19  		assertEquals(lvThreadController.getCurrentRequests(), 1);
20  		
21  		ThreadWorker lvThreadWorker2 = lvThreadController.getThreadWorker();
22  		assertEquals(lvThreadController.getCurrentRequests(), 2);
23  
24  		assertSame(lvThreadWorker1, lvThreadWorker2);
25  		
26  		lvThreadController.releasThreadWorker(lvThreadWorker2);
27  		assertEquals(lvThreadController.getCurrentRequests(), 1);
28  		
29  		lvThreadController.releasThreadWorker(lvThreadWorker1);
30  		assertEquals(lvThreadController.getCurrentRequests(), 0);
31  	}
32  	
33  	public void testPooledThreads() throws Exception {
34  		ThreadController lvThreadController = new ThreadController();
35  		lvThreadController.setMaxThreads(5);
36  		ThreadWorker lvThreadWorker1 = lvThreadController.getThreadWorker();
37  		assertEquals(lvThreadController.getCurrentRequests(), 1);
38  		
39  		ThreadWorker lvThreadWorker2 = lvThreadController.getThreadWorker();
40  		assertEquals(lvThreadController.getCurrentRequests(), 2);
41  		
42  		assertNotSame(lvThreadWorker1, lvThreadWorker2);
43  		
44  		lvThreadController.releasThreadWorker(lvThreadWorker2);
45  		assertEquals(lvThreadController.getCurrentRequests(), 1);
46  		
47  		lvThreadController.releasThreadWorker(lvThreadWorker1);
48  		assertEquals(lvThreadController.getCurrentRequests(), 0);		
49  	}
50  	
51  	public void testMoreThanMaxThreads() throws Exception {
52  		ThreadController lvThreadController = new ThreadController();
53  		lvThreadController.setMaxThreads(2);
54  		
55  		ThreadWorker lvThreadWorker1 = lvThreadController.getThreadWorker();
56  		assertEquals(lvThreadController.getCurrentRequests(), 1);
57  		
58  		ThreadWorker lvThreadWorker2 = lvThreadController.getThreadWorker();
59  		assertEquals(lvThreadController.getCurrentRequests(), 2);
60  
61  		assertNotSame(lvThreadWorker1, lvThreadWorker2);
62  		
63  		try {
64  			lvThreadController.getThreadWorker();
65  			fail("Max size of Threads are 2");
66  		} catch (Exception e) {
67  			assertTrue(true);
68  		}
69  		
70  		lvThreadController.releasThreadWorker(lvThreadWorker2);
71  		assertEquals(lvThreadController.getCurrentRequests(), 1);
72  		
73  		lvThreadWorker2 = lvThreadController.getThreadWorker();
74  		assertEquals(lvThreadController.getCurrentRequests(), 2);
75  		
76  		lvThreadController.releasThreadWorker(lvThreadWorker2);
77  		lvThreadController.releasThreadWorker(lvThreadWorker1);
78  		assertEquals(lvThreadController.getCurrentRequests(), 0);
79  	}
80  	
81  	public void testExecAsynchronousWithResult() throws Exception {
82  		ThreadController lvThreadController = new ThreadController();
83  		ThreadWorker lvThreadWorker = new ThreadWorker(lvThreadController);
84  		Object lvObject = new EchoImpl();
85  		Method lvMethods[] = Invoker.findAllMethods(EchoImpl.class, "echo");
86  		String lvArgs[] = new String[] {"Hello JUnit-TestCase"};
87  		AsynchronousCallbackForTests lvAsynchronousCallbackForTests = new AsynchronousCallbackForTests();
88  		lvThreadWorker.executeAsynchrone(lvObject, lvMethods[0], lvArgs, 
89  											new MethodExecuteCallback(),
90  											lvAsynchronousCallbackForTests);
91  		Thread.sleep(100);
92  		assertEquals(lvArgs[0], lvAsynchronousCallbackForTests.getResult());
93  		assertEquals("echo", lvAsynchronousCallbackForTests.getMethodName());
94  	}
95  	
96  	
97  	public void testExecAsynchronousWithException() throws Exception {
98  		ThreadController lvThreadController = new ThreadController();
99  		ThreadWorker lvThreadWorker = new ThreadWorker(lvThreadController);
100 		Object lvObject = new EchoImpl();
101 		Method lvMethods[] = Invoker.findAllMethods(EchoImpl.class, "throwException");
102 		String lvArgs[] = new String[] {"Hello JUnit-TestCase"};
103 		AsynchronousCallbackForTests lvAsynchronousCallbackForTests = new AsynchronousCallbackForTests();
104 		lvThreadWorker.executeAsynchrone(lvObject, lvMethods[0], lvArgs, 
105 											new MethodExecuteCallback(),
106 											lvAsynchronousCallbackForTests);
107 		Thread.sleep(100);
108 		assertNull(lvAsynchronousCallbackForTests.getResult());
109 		assertNotNull(lvAsynchronousCallbackForTests.getThrowable());
110 		assertEquals("throwException", lvAsynchronousCallbackForTests.getMethodName());
111 	}
112 	
113 	public void testExecAsynchronousWithNoMethodException() throws Exception {
114 		ThreadController lvThreadController = new ThreadController();
115 		ThreadWorker lvThreadWorker = new ThreadWorker(lvThreadController);
116 		Object lvObject = new EchoImpl();
117 		String lvArgs[] = new String[] {"Hello JUnit-TestCase"};
118 		AsynchronousCallbackForTests lvAsynchronousCallbackForTests = new AsynchronousCallbackForTests();
119 		lvThreadWorker.executeAsynchrone(lvObject, null, lvArgs, 
120 											new MethodExecuteCallback(),
121 											lvAsynchronousCallbackForTests);
122 		Thread.sleep(100);
123 		assertNull(lvAsynchronousCallbackForTests.getResult());
124 		assertNotNull(lvAsynchronousCallbackForTests.getThrowable());
125 		assertEquals("NoMethodName", lvAsynchronousCallbackForTests.getMethodName());
126 	}
127 
128 
129 }