[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