[jboss-svn-commits] JBL Code SVN: r32905 - labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 17 10:46:31 EDT 2010


Author: jervisliu
Date: 2010-05-17 10:46:30 -0400 (Mon, 17 May 2010)
New Revision: 32905

Modified:
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
Log:
Updated test case for GUVNOR-346 (Copy to packages at the same time using the same name, results an exception). This test does not fail anymore as we have upgraded to JackRabbit 2.1. 

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2010-05-17 13:37:50 UTC (rev 32904)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2010-05-17 14:46:30 UTC (rev 32905)
@@ -10,6 +10,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Random;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -1160,7 +1161,8 @@
 	
 	//In this test case we expect an ItemExistException from the second thread,
     //other than ending up with two packages with same name.
-	public void xtestConcurrentCopyPackage() throws Exception {
+	//https://jira.jboss.org/jira/browse/GUVNOR-346
+	public void testConcurrentCopyPackage() throws Exception {
 		//We have to handle how to get an instance of RulesRepository,
 		//by ourself, as different threads need to use different sessions.
 		final Repository repository;
@@ -1194,59 +1196,83 @@
 		item.checkin("");
 		repo.save();
 
-		Thread[] t = new Thread[2];
+	    int NUM_ITERATIONS = 40;
+	    int NUM_SESSIONS = 2;
+	    
+        for (int n = 0; n < NUM_ITERATIONS; n++) {
+    		Node folderNode = repo.getAreaNode(RulesRepository.RULE_PACKAGE_AREA);
+        	
+            // cleanup
+            while (folderNode.hasNode("testConcurrentCopyPackage2")) {
+            	folderNode.getNode("testConcurrentCopyPackage2").remove();
+            	repo.save();
+            }
 
-		for (int i = 0; i < t.length; i++) {
-			t[i] = new Thread(new Runnable() {
-				public void run() {
-					running++;
-					try {
-						Session localSession = repository
-								.login(new SimpleCredentials("admin", "admin"
-										.toCharArray()));
-						RulesRepository repo1 = new RulesRepository(
-								localSession);
+            Thread[] threads = new Thread[NUM_SESSIONS];
+            for (int i = 0; i < threads.length; i++) {
+                String id = "session#" + i;
+                ConcurrentCopySession ts = new ConcurrentCopySession(id, repository);
+                Thread t = new Thread(ts);
+                t.setName(id);
+                t.start();
+                threads[i] = t;
+            }
+            for (int i = 0; i < threads.length; i++) {
+                threads[i].join();
+            }
 
-						repo1.copyPackage("testConcurrentCopyPackage",
-								"testConcurrentCopyPackage2");
-						PackageItem dest = repo1
-								.loadPackage("testConcurrentCopyPackage2");
-						assertNotNull(dest);
-						Thread.yield();
-					} catch (LoginException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-						fail();
-					} catch (RepositoryException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-						fail();
-					} finally {
-						running--;
-					}
-				}
-			});
-		}
+    		//Node folderNode = repo.getAreaNode(RulesRepository.RULE_PACKAGE_AREA);
+    		NodeIterator results = folderNode.getNodes("testConcurrentCopyPackage2");
+    		assertEquals(1, results.getSize());
+        }     
+	}
+	
+    class ConcurrentCopySession implements Runnable {
+        String identity;
+        Random r;
+        Repository repository;
 
-		for (int i = 0; i < t.length; i++) {
-			t[i].start();
-			Thread.yield();
-		}
+        ConcurrentCopySession(String identity, Repository repository) {
+        	this.repository = repository;
+            this.identity = identity;
+            r = new Random();
+        }
 
-		while (running > 0) {
-			Thread.yield();
-		}
+        private void randomSleep() {
+            long l = r.nextInt(90) + 20;
+            try {
+                Thread.sleep(l);
+            } catch (InterruptedException ie) {
+            }
+        }
 
-		Node folderNode = repo.getAreaNode(RulesRepository.RULE_PACKAGE_AREA);
-		NodeIterator results = folderNode.getNodes("testConcurrentCopyPackage2");
-		while (results.hasNext()) {
-			Node node = results.nextNode();
-			System.out.println("---" + node.getName());
-		}
+        public void run() {
+			try {
+				Session localSession = repository.login(new SimpleCredentials("admin", "admin"
+								.toCharArray()));
+				RulesRepository repo1 = new RulesRepository(
+						localSession);
 
-		//TO-BE-FIXED: https://jira.jboss.org/jira/browse/GUVNOR-346
-		assertEquals(1, results.getSize());
-	}
+				repo1.copyPackage("testConcurrentCopyPackage",
+						"testConcurrentCopyPackage2");
+				PackageItem dest = repo1
+						.loadPackage("testConcurrentCopyPackage2");
+				assertNotNull(dest);
+				randomSleep();
+			} catch (LoginException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+				fail();
+			} catch (RepositoryException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+				fail();
+			} catch (RulesRepositoryException rre) {
+				//expected
+			} finally {
+			}
+        }
+    }
 
     private static boolean deleteDir(File dir) {
 



More information about the jboss-svn-commits mailing list