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 }