[jbpm-commits] JBoss JBPM SVN: r2591 - in jbpm3/trunk/modules/core/src: test/java/org/jbpm and 7 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Oct 22 20:46:09 EDT 2008
Author: alex.guizar at jboss.com
Date: 2008-10-22 20:46:08 -0400 (Wed, 22 Oct 2008)
New Revision: 2591
Added:
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1755/
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinExecutionDbTest.java
jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/
jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/gpd.xml
jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/parallelprocess.xml
Removed:
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinDbTest.java
Modified:
jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1135/JBPM1135Test.java
jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java
Log:
added another test class for JBPM-1755, based on support case
reorganized some other tests that rely on EventCallback
Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java 2008-10-23 00:33:38 UTC (rev 2590)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -118,15 +118,8 @@
protected void newTransaction()
{
- try
- {
- commitAndCloseSession();
- beginSessionTransaction();
- }
- catch (Throwable t)
- {
- throw new RuntimeException("couldn't commit and start new transaction", t);
- }
+ commitAndCloseSession();
+ beginSessionTransaction();
}
public ProcessInstance saveAndReload(ProcessInstance pi)
@@ -308,11 +301,6 @@
{
processAllJobs(maxWait, maxJobs);
}
- catch (Exception e)
- {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
finally
{
stopJobExecutor();
Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java 2008-10-23 00:33:38 UTC (rev 2590)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1072/JBPM1072Test.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -80,6 +80,7 @@
@Override
protected void tearDown() throws Exception {
+ EventCallback.clear();
graphSession.deleteProcessDefinition(processDefinition);
super.tearDown();
}
Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1135/JBPM1135Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1135/JBPM1135Test.java 2008-10-23 00:33:38 UTC (rev 2590)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1135/JBPM1135Test.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -28,51 +28,54 @@
import org.jbpm.graph.exe.ProcessInstance;
/**
- * JobSession.deleteJobsForProcessInstance doesn't work if jbpm isn't the transaction manager
+ * JobSession.deleteJobsForProcessInstance doesn't work if jbpm isn't the
+ * transaction manager
*
* https://jira.jboss.org/jira/browse/JBPM-1135
*
* @author Alejandro Guizar
*/
-public class JBPM1135Test extends AbstractDbTestCase
-{
+public class JBPM1135Test extends AbstractDbTestCase {
- public void testTimerOnTimer()
- {
+ private long processDefinitionId;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("org/jbpm/jbpm1135/timerprocess.xml");
jbpmContext.deployProcessDefinition(processDefinition);
- try
- {
- ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("timerProcess");
- processInstance.getContextInstance().setVariable("eventCallback", new EventCallback());
- processInstance.signal();
- assertEquals("firstNode", processInstance.getRootToken().getNode().getName());
- commitAndCloseSession();
+ processDefinitionId = processDefinition.getId();
+ startJobExecutor();
+ }
- startJobExecutor();
- try
- {
- EventCallback.waitForEvent(Event.EVENTTYPE_TIMER);
- beginSessionTransaction();
- long processInstanceId = processInstance.getId();
- assertEquals("secondNode", jbpmContext.loadProcessInstance(processInstanceId)
- .getRootToken()
- .getNode()
- .getName());
- commitAndCloseSession();
+ @Override
+ protected void tearDown() throws Exception {
+ EventCallback.clear();
+ stopJobExecutor();
+ graphSession.deleteProcessDefinition(processDefinitionId);
+ super.tearDown();
+ }
- EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
- beginSessionTransaction();
- assertTrue(jbpmContext.loadProcessInstance(processInstanceId).hasEnded());
- }
- finally
- {
- stopJobExecutor();
- }
- }
- finally
- {
- jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
- }
+ public void testTimerOnTimer() {
+ ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
+ ProcessInstance processInstance = new ProcessInstance(processDefinition);
+ processInstance.getContextInstance().setVariable("eventCallback", new EventCallback());
+ processInstance.signal();
+ jbpmContext.save(processInstance);
+ assertEquals("firstNode", processInstance.getRootToken().getNode().getName());
+ commitAndCloseSession();
+
+ EventCallback.waitForEvent(Event.EVENTTYPE_TIMER);
+ beginSessionTransaction();
+ long processInstanceId = processInstance.getId();
+ assertEquals("secondNode", jbpmContext.loadProcessInstance(processInstanceId)
+ .getRootToken()
+ .getNode()
+ .getName());
+ commitAndCloseSession();
+
+ EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
+ beginSessionTransaction();
+ assertTrue(jbpmContext.loadProcessInstance(processInstanceId).hasEnded());
}
}
Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java 2008-10-23 00:33:38 UTC (rev 2590)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -34,43 +34,52 @@
*
* @author Alejandro Guizar
*/
-public class JBPM1452Test extends AbstractDbTestCase
-{
+public class JBPM1452Test extends AbstractDbTestCase {
- static{
- // making sure System.err and System.out are synchronized
- System.setErr(System.out);
- }
+ private long processDefinitionId;
- at Override
- protected JbpmConfiguration getJbpmConfiguration()
- {
- if (jbpmConfiguration == null)
- {
- jbpmConfiguration = JbpmConfiguration.parseXmlString(
- "<jbpm-configuration>" +
- " <null name='jbpm.job.executor' />" +
- "</jbpm-configuration>");
+ @Override
+ protected JbpmConfiguration getJbpmConfiguration() {
+ if (jbpmConfiguration == null) {
+ jbpmConfiguration = JbpmConfiguration.parseXmlString("<jbpm-configuration>"
+ + " <null name='jbpm.job.executor' />"
+ + "</jbpm-configuration>");
}
return jbpmConfiguration;
}
- public void testNoJobExecutor()
- {
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ ProcessDefinition processDefinition = new ProcessDefinition("Audit");
+ jbpmContext.deployProcessDefinition(processDefinition);
+ processDefinitionId = processDefinition.getId();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ graphSession.deleteProcessDefinition(processDefinitionId);
+ super.tearDown();
+ }
+
+ public void testNoJobExecutor() {
// check the job executor is properly nullified
ObjectFactory objectFactory = jbpmContext.getObjectFactory();
- assertTrue("expected object factory to have object jbpm.job.executor", objectFactory.hasObject("jbpm.job.executor"));
+ assertTrue("expected object factory to have object jbpm.job.executor",
+ objectFactory.hasObject("jbpm.job.executor"));
assertNull(objectFactory.createObject("jbpm.job.executor"));
// start and end a process instance, no exception should be thrown
- ProcessDefinition processDefinition = new ProcessDefinition("Audit");
- jbpmContext.deployProcessDefinition(processDefinition);
try {
- jbpmContext.newProcessInstanceForUpdate("Audit");
- } catch(Throwable t) {
- t.printStackTrace();
- } finally {
+ ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
+ ProcessInstance processInstance = new ProcessInstance(processDefinition);
+ jbpmContext.save(processInstance);
+
newTransaction();
- graphSession.deleteProcessDefinition(processDefinition.getId());
+ processInstance.end();
}
+ catch (RuntimeException e) {
+ jbpmContext.setRollbackOnly();
+ fail("could not end process instance in absence of job executor: " + e);
+ }
}
}
Added: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java (rev 0)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1755/JBPM1755Test.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -0,0 +1,103 @@
+package org.jbpm.jbpm1755;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.LockMode;
+import org.jbpm.EventCallback;
+import org.jbpm.db.AbstractDbTestCase;
+import org.jbpm.graph.def.Event;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.node.Join;
+
+/**
+ * Allow process author to set the parent token lock mode in the join token.
+ *
+ * https://jira.jboss.org/jira/browse/JBPM-1755
+ *
+ * @author Alejandro Guizar
+ */
+public class JBPM1755Test extends AbstractDbTestCase {
+
+ private long processDefinitionId;
+
+ private static final int processInstanceCount = 5;
+ private static final long maxWaitTime = 10 * 1000;
+ private static final Log log = LogFactory.getLog(JBPM1755Test.class);
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("org/jbpm/jbpm1755/parallelprocess.xml");
+ jbpmContext.deployProcessDefinition(processDefinition);
+ processDefinitionId = processDefinition.getId();
+
+ startJobExecutor();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ EventCallback.clear();
+ graphSession.deleteProcessDefinition(processDefinitionId);
+ stopJobExecutor();
+ super.tearDown();
+ }
+
+ public void testReadLock() {
+ launchProcessInstances(LockMode.READ);
+ }
+
+ public void testUpgradeLock() {
+ launchProcessInstances(LockMode.UPGRADE);
+ }
+
+ public void testForceLock() {
+ launchProcessInstances(LockMode.FORCE);
+ }
+
+ private void launchProcessInstances(LockMode lockMode) {
+ ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
+ Join join = (Join) processDefinition.getNode("join1");
+ join.setParentLockMode(lockMode.toString());
+
+ long[] processInstanceIds = new long[processInstanceCount];
+ for (int i = 0; i < processInstanceCount; i++) {
+ ProcessInstance processInstance = new ProcessInstance(processDefinition);
+ processInstanceIds[i] = processInstance.getId();
+ processInstance.getContextInstance().setVariable("eventCallback", new EventCallback());
+ processInstance.signal();
+ jbpmContext.save(processInstance);
+ }
+ commitAndCloseSession();
+
+ for (int i = 0; i < processInstanceCount; i++) {
+ long processInstanceId = processInstanceIds[i];
+ waitForProcessInstanceEnd(processInstanceId);
+ assertTrue(hasProcessInstanceEnded(processInstanceId));
+ }
+ beginSessionTransaction();
+ }
+
+ private void waitForProcessInstanceEnd(long processInstanceId) {
+ long startTime = System.currentTimeMillis();
+ do {
+ EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END, 1000);
+ if (System.currentTimeMillis() - startTime > maxWaitTime) {
+ log.warn("process instance " + processInstanceId + " took too long");
+ break;
+ }
+ } while (!hasProcessInstanceEnded(processInstanceId));
+ }
+
+ private boolean hasProcessInstanceEnded(long processInstanceId) {
+ beginSessionTransaction();
+ try {
+ return jbpmContext.loadProcessInstance(processInstanceId).hasEnded();
+ }
+ finally {
+ commitAndCloseSession();
+ }
+ }
+
+}
Deleted: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinDbTest.java 2008-10-23 00:33:38 UTC (rev 2590)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinDbTest.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -1,71 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.jpdl.exe;
-
-import org.jbpm.db.AbstractDbTestCase;
-import org.jbpm.graph.def.ProcessDefinition;
-import org.jbpm.graph.exe.ProcessInstance;
-
-public class JoinDbTest extends AbstractDbTestCase {
-
- public void testJoinPersistence() {
- ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
- "<process-definition>" +
- " <start-state>" +
- " <transition to='f' />" +
- " </start-state>" +
- " <fork name='f'>" +
- " <transition name='a' to='a' />" +
- " <transition name='b' to='b' />" +
- " </fork>" +
- " <state name='a'>" +
- " <transition to='j' />" +
- " </state>" +
- " <state name='b'>" +
- " <transition to='j' />" +
- " </state>" +
- " <join name='j'>" +
- " <transition to='end' />" +
- " </join>" +
- " <end-state name='end'/>" +
- "</process-definition>"
- );
- graphSession.saveProcessDefinition(processDefinition);
- try
- {
- ProcessInstance processInstance = new ProcessInstance(processDefinition);
- processInstance.signal();
- processInstance.findToken("/a").signal();
-
- processInstance = saveAndReload(processInstance);
- processInstance.findToken("/b").signal();
-
- assertEquals("end", processInstance.getRootToken().getNode().getName());
- assertEquals("j", processInstance.findToken("/a").getNode().getName());
- assertEquals("j", processInstance.findToken("/b").getNode().getName());
- }
- finally
- {
- jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
- }
- }
-}
Copied: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinExecutionDbTest.java (from rev 2587, jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinDbTest.java)
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinExecutionDbTest.java (rev 0)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/exe/JoinExecutionDbTest.java 2008-10-23 00:46:08 UTC (rev 2591)
@@ -0,0 +1,71 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.jpdl.exe;
+
+import org.jbpm.db.AbstractDbTestCase;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+
+public class JoinExecutionDbTest extends AbstractDbTestCase {
+
+ public void testJoinPersistence() {
+ ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
+ "<process-definition>" +
+ " <start-state>" +
+ " <transition to='f' />" +
+ " </start-state>" +
+ " <fork name='f'>" +
+ " <transition name='a' to='a' />" +
+ " <transition name='b' to='b' />" +
+ " </fork>" +
+ " <state name='a'>" +
+ " <transition to='j' />" +
+ " </state>" +
+ " <state name='b'>" +
+ " <transition to='j' />" +
+ " </state>" +
+ " <join name='j'>" +
+ " <transition to='end' />" +
+ " </join>" +
+ " <end-state name='end'/>" +
+ "</process-definition>"
+ );
+ graphSession.saveProcessDefinition(processDefinition);
+ try
+ {
+ ProcessInstance processInstance = new ProcessInstance(processDefinition);
+ processInstance.signal();
+ processInstance.findToken("/a").signal();
+
+ processInstance = saveAndReload(processInstance);
+ processInstance.findToken("/b").signal();
+
+ assertEquals("end", processInstance.getRootToken().getNode().getName());
+ assertEquals("j", processInstance.findToken("/a").getNode().getName());
+ assertEquals("j", processInstance.findToken("/b").getNode().getName());
+ }
+ finally
+ {
+ jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
+ }
+ }
+}
Added: jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/gpd.xml
===================================================================
--- jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/gpd.xml (rev 0)
+++ jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/gpd.xml 2008-10-23 00:46:08 UTC (rev 2591)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<root-container name="raceCondition" width="798" height="531">
+ <node name="start" x="135" y="52" width="140" height="40">
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ </node>
+ <node name="fork1" x="79" y="136" width="252" height="24">
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ </node>
+ <node name="join1" x="79" y="311" width="252" height="24">
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ </node>
+ <node name="node2" x="155" y="219" width="100" height="36">
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ </node>
+ <node name="node3" x="276" y="220" width="98" height="36">
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ </node>
+ <node name="node1" x="31" y="218" width="105" height="36">
+ <edge>
+ <label x="5" y="-10"/>
+ </edge>
+ </node>
+ <node name="end" x="134" y="377" width="140" height="40"/>
+</root-container>
Added: jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/parallelprocess.xml
===================================================================
--- jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/parallelprocess.xml (rev 0)
+++ jbpm3/trunk/modules/core/src/test/resources/org/jbpm/jbpm1755/parallelprocess.xml 2008-10-23 00:46:08 UTC (rev 2591)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process-definition name="raceCondition" xmlns="urn:jbpm.org:jpdl-3.3">
+
+ <start-state name="start">
+ <transition to="fork1"></transition>
+ </start-state>
+
+ <fork name="fork1">
+ <transition to="node2" name="2"></transition>
+ <transition to="node3" name="3"></transition>
+ <transition to="node1" name="1"></transition>
+ </fork>
+
+ <join name="join1" async="exclusive">
+ <transition to="end"></transition>
+ </join>
+
+ <node name="node2" async="true">
+ <transition to="join1"></transition>
+ </node>
+
+ <node name="node3" async="true">
+ <transition to="join1"></transition>
+ </node>
+
+ <node name="node1" async="true">
+ <transition to="join1"></transition>
+ </node>
+
+ <end-state name="end"></end-state>
+
+ <event type="process-end">
+ <action expression="${eventCallback.processEnd}"></action>
+ </event>
+
+</process-definition>
\ No newline at end of file
More information about the jbpm-commits
mailing list