[jbpm-commits] JBoss JBPM SVN: r5311 - jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Jul 16 07:07:23 EDT 2009


Author: jbarrez
Date: 2009-07-16 07:07:23 -0400 (Thu, 16 Jul 2009)
New Revision: 5311

Modified:
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/ForkTest.java
Log:
JBPM-2040 : added testcase to see if unstructured fork/join with one path leading to end-state is possible

Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/ForkTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/ForkTest.java	2009-07-16 09:26:01 UTC (rev 5310)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/ForkTest.java	2009-07-16 11:07:23 UTC (rev 5311)
@@ -24,6 +24,7 @@
  */
 package org.jbpm.test.activities;
 
+import org.jbpm.api.history.HistoryProcessInstance;
 import org.jbpm.api.task.Task;
 import org.jbpm.test.JbpmTestCase;
 
@@ -69,5 +70,103 @@
     
     assertProcessInstanceEnded(processInstanceId);
   }
+  
+  
+  private static final String UNSTRUCTURED_CONCURRENT_PROCESS =
+    "<process name='unstructuredConcurrency' xmlns='http://jbpm.org/4.0/jpdl'>" +
+    "<start name='start'> " +
+    "   <transition to='theFork'/> " +
+    "</start> " +
+    "<fork name='theFork'> " +
+    "   <transition name='pathA' to='A'/> " +
+    "   <transition name='pathB' to='B'/> " +
+    "</fork> " +
+    "<task name='A'> " +
+    "   <transition to='theJoin'/> " +
+    "</task> " +
+    "<task name='B'> " +
+    "   <transition to='end2'/> " +
+    "</task> " +
+    "<join name='theJoin'> " +
+    "   <transition to='waitState'/> " +
+    "</join> " +
+    "<state name='waitState'>" +
+    "  <transition to='end1' />" +
+    "</state>" +
+    "<end name='end1'/> " +
+    "<end name='end2'/> " +
+    "</process>";
+  
+  // Test for JBPM-2040
+  public void testDefaultUnstructuredForkBehaviour() {
+    deployJpdlXmlString(UNSTRUCTURED_CONCURRENT_PROCESS);
+    String processInstanceId = executionService.startProcessInstanceByKey("unstructuredConcurrency").getId();
+    
+    Task taskA = taskService.createTaskQuery().activityName("A").uniqueResult();
+    taskService.completeTask(taskA.getId());
+    assertActivitiesActive(processInstanceId, "waitState", "B");
+    
+    Task taskB = taskService.createTaskQuery().activityName("B").uniqueResult();
+    taskService.completeTask(taskB.getId());
+    assertProcessInstanceEnded(processInstanceId);
+  }
+  
+  //Test for JBPM-2040
+  public void testDefaultUnstructuredForkBehaviour2() {
+    deployJpdlXmlString(UNSTRUCTURED_CONCURRENT_PROCESS);
+    String processInstanceId = executionService.startProcessInstanceByKey("unstructuredConcurrency").getId();
+    
+    Task taskB = taskService.createTaskQuery().activityName("B").uniqueResult();
+    taskService.completeTask(taskB.getId());
+    assertProcessInstanceEnded(processInstanceId);
+    
+    assertTrue("There are still open tasks left",
+      taskService.createTaskQuery().processInstanceId(processInstanceId).list().isEmpty());
+  }
+  
+  //Test for JBPM-2040
+  public void testUnstructuredForkBehaviourWhenEndingExecutionOnly() {
+    // We're now changing the default end behaviour to ending
+    // only the execution instead of the process instance
+    deployJpdlXmlString(addEndExecutionToConcurrentProcess());
+    String processInstanceId = executionService.startProcessInstanceByKey("unstructuredConcurrency").getId();
+    
+    Task taskB = taskService.createTaskQuery().activityName("B").uniqueResult();
+    taskService.completeTask(taskB.getId());
+    
+    assertProcessInstanceActive(processInstanceId);
+    assertActivityActive(processInstanceId, "A");
+    
+    Task taskA = taskService.createTaskQuery().activityName("A").uniqueResult();
+    taskService.completeTask(taskA.getId());
+    assertActivityActive(processInstanceId, "waitState");
+    assertProcessInstanceActive(processInstanceId);
+    
+    executionService.signalExecutionById(
+            executionService.findExecutionById(processInstanceId)
+                            .findActiveExecutionIn("waitState").getId());
+    assertProcessInstanceEnded(processInstanceId);
+  }
+  
+  //Test for JBPM-2040
+  public void testUnstructuredForkBehaviourWhenEndingExecutionOnly2() {
+    // We're now changing the default end behaviour to ending
+    // only the execution instead of the process instance
+    deployJpdlXmlString(addEndExecutionToConcurrentProcess());
+    String processInstanceId = executionService.startProcessInstanceByKey("unstructuredConcurrency").getId();
+    
+    Task taskA = taskService.createTaskQuery().activityName("A").uniqueResult();
+    taskService.completeTask(taskA.getId());
+    assertActivitiesActive(processInstanceId, "B", "waitState");
+    
+    Task taskB = taskService.createTaskQuery().activityName("B").uniqueResult();
+    taskService.completeTask(taskB.getId());
+    assertProcessInstanceActive(processInstanceId); 
+  }
+  
+  private String addEndExecutionToConcurrentProcess() {
+    return  UNSTRUCTURED_CONCURRENT_PROCESS.replace("<end name='end1'/>", "<end name='end1' ends='execution'/>")
+                                           .replace("<end name='end2'/>", "<end name='end2' ends='execution'/>");
+  }
 
 }



More information about the jbpm-commits mailing list