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 }