1 21 22 package com.rift.coad.daemon.messageservice; 24 25 import junit.framework.*; 26 import java.lang.ThreadLocal ; 27 import java.util.Date ; 28 import java.util.Queue ; 29 import java.util.PriorityQueue ; 30 import java.util.HashMap ; 31 import java.util.HashSet ; 32 import java.util.Map ; 33 import java.util.ArrayList ; 34 import java.util.Set ; 35 import java.util.concurrent.ConcurrentHashMap ; 36 import javax.naming.Context ; 37 import javax.naming.InitialContext ; 38 import javax.transaction.xa.XAException ; 39 import javax.transaction.xa.XAResource ; 40 import javax.transaction.xa.Xid ; 41 import javax.transaction.UserTransaction ; 42 import org.apache.log4j.Logger; 43 import org.apache.log4j.BasicConfigurator; 44 45 import org.objectweb.jotm.Jotm; 47 48 import com.rift.coad.lib.naming.NamingDirector; 50 import com.rift.coad.lib.naming.ContextManager; 51 import com.rift.coad.lib.db.DBSourceManager; 52 53 import com.rift.coad.lib.interceptor.InterceptorFactory; 54 import com.rift.coad.lib.security.RoleManager; 55 import com.rift.coad.lib.security.ThreadsPermissionContainer; 56 import com.rift.coad.lib.security.ThreadPermissionSession; 57 import com.rift.coad.lib.security.UserSession; 58 import com.rift.coad.lib.security.user.UserSessionManager; 59 import com.rift.coad.lib.security.user.UserStoreManager; 60 import com.rift.coad.lib.security.SessionManager; 61 import com.rift.coad.lib.security.login.LoginManager; 62 import com.rift.coad.lib.thread.CoadunationThreadGroup; 63 64 import com.rift.coad.lib.configuration.Configuration; 65 import com.rift.coad.lib.configuration.ConfigurationFactory; 66 import com.rift.coad.util.lock.LockRef; 67 import com.rift.coad.util.lock.ObjectLockFactory; 68 import com.rift.coad.lib.transaction.TransactionDirector; 69 import com.rift.coad.util.transaction.TransactionManager; 70 import com.rift.coad.util.lock.LockRef; 71 import com.rift.coad.util.lock.ObjectLockFactory; 72 73 78 public class MessageQueueTest extends TestCase { 79 80 83 public class TestMessageManager implements MessageManager { 84 public String id = null; 86 public Date nextProcessTime = new Date (); 87 public int priority = 0; 88 91 public TestMessageManager (String id, int priority) { 92 this.id = id; 93 this.priority = priority; 94 } 95 96 97 100 public String getID() { 101 return id; 102 } 103 104 107 public Message getMessage() throws MessageServiceException { 108 return null; 109 } 110 111 114 public void updateMessage(Message updatedMessage) throws MessageServiceException { 115 116 } 117 118 121 public Date nextProcessTime() { 122 return nextProcessTime; 123 } 124 125 128 public void setNextProcessTime(Date nextProcessTime) { 129 this.nextProcessTime = nextProcessTime; 130 } 131 132 135 public int getPriority() { 136 return priority; 137 } 138 139 140 146 public int compareTo(Object o) { 147 TestMessageManager tmsg =(TestMessageManager)o; 148 if (tmsg.nextProcessTime().getTime() > nextProcessTime().getTime()) { 149 return -1; 150 } else if (nextProcessTime().getTime() > tmsg.nextProcessTime().getTime()) { 151 return 1; 152 } else if (tmsg.getPriority() > getPriority()) { 153 return -1; 154 } else if (getPriority() > tmsg.getPriority()) { 155 return 1; 156 } 157 return 0; 158 } 159 160 161 public void commit(Xid xid, boolean b) throws XAException { 162 } 163 164 public void end(Xid xid, int i) throws XAException { 165 } 166 167 public void forget(Xid xid) throws XAException { 168 } 169 170 public int getTransactionTimeout() throws XAException { 171 return -1; 172 } 173 174 public boolean isSameRM(XAResource xAResource) throws XAException { 175 return this == xAResource; 176 } 177 178 public int prepare(Xid xid) throws XAException { 179 return 0; 180 } 181 182 public Xid [] recover(int i) throws XAException { 183 return null; 184 } 185 186 public void rollback(Xid xid) throws XAException { 187 } 188 189 public boolean setTransactionTimeout(int i) throws XAException { 190 return true; 191 } 192 193 public void start(Xid xid, int i) throws XAException { 194 } 195 196 public String getMessageQueueName() { 197 return "test"; 198 } 199 200 public void remove() throws MessageServiceException { 201 } 202 203 } 204 205 public MessageQueueTest(String testName) { 206 super(testName); 207 } 209 210 protected void setUp() throws Exception { 211 } 212 213 protected void tearDown() throws Exception { 214 } 215 216 219 public void testMessageQueue() throws Exception { 220 System.out.println("MessageQueue"); 221 222 ThreadsPermissionContainer permissions = new ThreadsPermissionContainer(); 224 SessionManager.init(permissions); 225 UserStoreManager userStoreManager = new UserStoreManager(); 226 UserSessionManager sessionManager = new UserSessionManager(permissions, 227 userStoreManager); 228 LoginManager.init(sessionManager,userStoreManager); 229 CoadunationThreadGroup threadGroup = new CoadunationThreadGroup(sessionManager, 231 userStoreManager); 232 233 RoleManager.getInstance(); 235 236 InterceptorFactory.init(permissions,sessionManager,userStoreManager); 237 238 Set set = new HashSet (); 240 set.add("test"); 241 UserSession user = new UserSession("test1", set); 242 permissions.putSession(new Long (Thread.currentThread().getId()), 243 new ThreadPermissionSession( 244 new Long (Thread.currentThread().getId()),user)); 245 246 NamingDirector.init(threadGroup); 248 249 TransactionDirector transactionDirector = TransactionDirector.init(); 251 ObjectLockFactory.init(); 252 TransactionManager.init(); 253 254 Context context = new InitialContext (); 256 UserTransaction ut = 257 (UserTransaction )context.lookup("java:comp/UserTransaction"); 258 259 ut.begin(); 260 261 MessageQueue messageQueue = new MessageQueue("test"); 262 263 TestMessageManager message1 = new TestMessageManager("test1",1); 264 TransactionManager.getInstance().bindResource(message1,true); 265 messageQueue.addMessage(message1); 266 267 ut.rollback(); 268 269 ut.begin(); 270 try { 271 messageQueue.getMessage("test1"); 272 fail("Retrieved a message that should not be there"); 273 } catch (MessageServiceException ex) { 274 System.out.println("Failed to find the message : " + 275 ex.getMessage()); 276 } 277 ut.commit(); 278 279 280 ut.begin(); 281 282 TestMessageManager message2 = new TestMessageManager("test2",1); 283 TransactionManager.getInstance().bindResource(message1,true); 284 messageQueue.addMessage(message1); 285 TransactionManager.getInstance().bindResource(message2,true); 286 messageQueue.addMessage(message2); 287 288 ut.commit(); 289 290 ut.begin(); 291 292 if (message1 != messageQueue.getMessage("test1")) { 293 fail("Test message 1 not found"); 294 } 295 ut.rollback(); 296 297 Date nextRunTime = new Date (); 298 TestMessageManager testRunMessage = 299 (TestMessageManager)messageQueue.popFrontMessage(nextRunTime); 300 if (testRunMessage == null) { 301 fail("Failed to pop a message from the list"); 302 } 303 if (!testRunMessage.getID().equals("test1")) { 304 fail("The pop order is wrong"); 305 } 306 307 ut.begin(); 308 TransactionManager.getInstance().bindResource(testRunMessage,true); 309 testRunMessage.setNextProcessTime(new Date (testRunMessage. 310 nextProcessTime().getTime() + 1000)); 311 ut.commit(); 312 messageQueue.pushBackMessage(testRunMessage); 313 314 testRunMessage = 315 (TestMessageManager)messageQueue.popFrontMessage(nextRunTime); 316 if (testRunMessage == null) { 317 fail("Failed to pop a message from the list"); 318 } 319 if (!testRunMessage.getID().equals("test2")) { 320 fail("The pop order is wrong"); 321 } 322 323 ut.begin(); 324 TransactionManager.getInstance().bindResource(testRunMessage,true); 325 testRunMessage.setNextProcessTime(new Date (testRunMessage. 326 nextProcessTime().getTime() + 1000)); 327 ut.commit(); 328 messageQueue.pushBackMessage(testRunMessage); 329 330 331 testRunMessage = 332 (TestMessageManager)messageQueue.popFrontMessage(nextRunTime); 333 if (testRunMessage != null) { 334 fail("Popped a message from the list"); 335 } 336 337 Thread.sleep(1500); 338 339 testRunMessage = 340 (TestMessageManager)messageQueue.popFrontMessage(nextRunTime); 341 if (testRunMessage == null) { 342 fail("Failed to pop a message from the list"); 343 } 344 if (!testRunMessage.getID().equals("test1")) { 345 fail("The pop order is wrong"); 346 } 347 348 ut.begin(); 349 TransactionManager.getInstance().bindResource(testRunMessage,true); 350 testRunMessage.setNextProcessTime(new Date (testRunMessage. 351 nextProcessTime().getTime() + 1000)); 352 ut.commit(); 353 messageQueue.pushBackMessage(testRunMessage); 354 355 356 testRunMessage = 357 (TestMessageManager)messageQueue.popFrontMessage(nextRunTime); 358 if (testRunMessage == null) { 359 fail("Failed to pop a message from the list"); 360 } 361 if (!testRunMessage.getID().equals("test2")) { 362 fail("The pop order is wrong"); 363 } 364 365 ut.begin(); 366 messageQueue.removeMessage("test2"); 367 ut.commit(); 368 369 ut.begin(); 370 try { 371 messageQueue.getMessage("test2"); 372 fail("Retrieved a message that should not be there"); 373 } catch (MessageServiceException ex) { 374 System.out.println("Failed to find the message : " + 375 ex.getMessage()); 376 } 377 ut.commit(); 378 379 ut.begin(); 380 messageQueue.removeMessage("test1"); 381 ut.commit(); 382 383 ut.begin(); 384 try { 385 messageQueue.getMessage("test1"); 386 fail("Retrieved a message that should not be there"); 387 } catch (MessageServiceException ex) { 388 System.out.println("Failed to find the message : " + 389 ex.getMessage()); 390 } 391 ut.commit(); 392 } 393 394 395 } 396 | Popular Tags |