1 21 22 package com.rift.coad.lib.thread.pool; 23 24 import junit.framework.*; 25 import java.util.Vector ; 26 import java.util.HashSet ; 27 import java.util.List ; 28 import java.util.Date ; 29 import java.util.ArrayList ; 30 import java.util.Set ; 31 import java.util.concurrent.atomic.AtomicInteger ; 32 import java.net.URLClassLoader ; 33 import java.net.URL ; 34 35 import org.apache.log4j.Logger; 36 import org.apache.log4j.BasicConfigurator; 37 38 import com.rift.coad.lib.common.ClassUtil; 39 import com.rift.coad.lib.thread.CoadunationThread; 40 import com.rift.coad.lib.thread.ThreadStateMonitor; 41 import com.rift.coad.lib.security.UserSession; 42 import com.rift.coad.lib.security.user.UserSessionManager; 43 import com.rift.coad.lib.configuration.ConfigurationFactory; 44 import com.rift.coad.lib.configuration.Configuration; 45 import com.rift.coad.lib.security.user.UserStoreManager; 46 import com.rift.coad.lib.security.ThreadsPermissionContainer; 47 import com.rift.coad.lib.security.login.handlers.PasswordInfoHandler; 48 import com.rift.coad.lib.security.SessionManager; 49 import com.rift.coad.lib.security.RoleManager; 50 import com.rift.coad.lib.security.Validator; 51 import com.rift.coad.lib.security.login.LoginManager; 52 import com.rift.coad.lib.thread.CoadunationThread; 53 import com.rift.coad.lib.thread.CoadunationThreadGroup; 54 import com.rift.coad.lib.thread.ThreadGroupManager; 55 import com.rift.coad.lib.security.ThreadPermissionSession; 56 57 62 public class ThreadPoolManagerTest extends TestCase { 63 64 67 public static class TestMonitor { 68 69 private int waitCount = 0; 70 private int callCount = 0; 71 72 75 public TestMonitor() { 76 77 } 78 79 80 83 public synchronized void threadWait() { 84 waitCount++; 85 callCount++; 86 try { 87 wait(); 88 } catch (Exception ex) { 89 System.out.println("Failed to wait : " + ex.getMessage()); 90 ex.printStackTrace(System.out); 91 } 92 waitCount--; 93 } 94 95 96 99 public synchronized int getWaitCount() { 100 return waitCount; 101 } 102 103 104 107 public synchronized int getCallCount() { 108 return callCount; 109 } 110 111 114 public synchronized void resetCalledCount() { 115 callCount = 0; 116 } 117 118 119 122 public synchronized void notifyAllWaitingThreads() { 123 notifyAll(); 124 } 125 } 126 127 128 129 132 public static class TestTask implements Task { 133 134 137 public void process(ThreadPoolManager pool) throws Exception { 138 testMonitor.threadWait(); 139 } 140 141 } 142 143 public static TestMonitor testMonitor = new TestMonitor(); 144 145 public ThreadPoolManagerTest(String testName) { 146 super(testName); 147 BasicConfigurator.configure(); 148 } 149 150 protected void setUp() throws Exception { 151 } 152 153 protected void tearDown() throws Exception { 154 } 155 156 159 public void testThreadPoolManager() throws Exception { 160 System.out.println("ThreadPoolManager"); 161 162 ThreadsPermissionContainer permissions = new ThreadsPermissionContainer(); 164 SessionManager.init(permissions); 165 UserStoreManager userStoreManager = new UserStoreManager(); 166 UserSessionManager sessionManager = new UserSessionManager(permissions, 167 userStoreManager); 168 LoginManager.init(sessionManager,userStoreManager); 169 170 RoleManager.getInstance(); 172 173 CoadunationThreadGroup threadGroup = new CoadunationThreadGroup( 175 sessionManager,userStoreManager); 176 ClassLoader loader = new URLClassLoader (new URL [0], 177 this.getClass().getClassLoader()); 178 Thread.currentThread().setContextClassLoader(loader); 179 ThreadGroupManager.getInstance().initThreadGroup(threadGroup); 180 181 Set set = new HashSet (); 183 set.add("test"); 184 UserSession user = new UserSession("test1", set); 185 permissions.putSession(new Long (Thread.currentThread().getId()), 186 new ThreadPermissionSession( 187 new Long (Thread.currentThread().getId()),user)); 188 189 ThreadPoolManager instance1 = new ThreadPoolManager(2, TestTask.class, 191 "test"); 192 ThreadPoolManager instance2 = new ThreadPoolManager(3,5, TestTask.class, 193 "test"); 194 195 assertEquals(2, instance1.getSize()); 196 instance1.setSize(3); 197 assertEquals(3, instance1.getSize()); 198 assertEquals(3, instance2.getMinSize()); 199 instance2.setMinSize(4); 200 assertEquals(4, instance2.getMinSize()); 201 try { 202 instance2.setMinSize(6); 203 fail("Should not be able to set the pool size to greater than max."); 204 } catch (PoolException ex) { 205 } 207 assertEquals(5, instance2.getMaxSize()); 208 try { 209 instance2.setMaxSize(3); 210 fail("Should not be able to set the pool size max to smaller " + 211 "than max."); 212 } catch (PoolException ex) { 213 } 215 216 assertEquals(2,testMonitor.getWaitCount()); 217 assertEquals(2,testMonitor.getCallCount()); 218 219 instance1.releaseThread(); 220 instance2.releaseThread(); 221 Thread.sleep(500); 222 223 assertEquals(4,testMonitor.getCallCount()); 224 assertEquals(4,testMonitor.getWaitCount()); 225 226 instance1.releaseThread(); 227 instance1.releaseThread(); 228 instance2.releaseThread(); 229 instance2.releaseThread(); 230 instance2.releaseThread(); 231 instance2.releaseThread(); 232 Thread.sleep(500); 233 234 assertEquals(8,testMonitor.getCallCount()); 235 assertEquals(8,testMonitor.getWaitCount()); 236 237 testMonitor.notifyAllWaitingThreads(); 238 239 instance1.releaseThread(); 240 instance1.releaseThread(); 241 instance2.releaseThread(); 242 instance2.releaseThread(); 243 Thread.sleep(500); 244 245 assertEquals(6,testMonitor.getWaitCount()); 246 assertEquals(14,testMonitor.getCallCount()); 247 248 instance1.terminate(); 249 instance2.terminate(); 250 } 251 252 } 253 | Popular Tags |