[jboss-svn-commits] JBL Code SVN: r35263 - in labs/jbossrules/trunk/drools-flow-core/src: test/java/org/drools/process and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Sep 23 19:59:41 EDT 2010


Author: diegoll
Date: 2010-09-23 19:59:40 -0400 (Thu, 23 Sep 2010)
New Revision: 35263

Modified:
   labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
   labs/jbossrules/trunk/drools-flow-core/src/test/java/org/drools/process/SubProcessTest.java
Log:
throwing exception on nonexistent subprocess id. Closes JBRULES-2708

Modified: labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java	2010-09-23 23:42:01 UTC (rev 35262)
+++ labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java	2010-09-23 23:59:40 UTC (rev 35263)
@@ -21,12 +21,11 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.drools.common.InternalRuleBase;
+import org.drools.RuntimeDroolsException;
 import org.drools.definition.process.Node;
 import org.drools.definition.process.Process;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.WorkItem;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.runtime.process.EventListener;
 import org.drools.runtime.process.NodeInstance;
@@ -110,9 +109,9 @@
         Process process = ((ProcessInstance) getProcessInstance())
     		.getKnowledgeRuntime().getKnowledgeBase().getProcess(processId);
         if (process == null) {
-        	System.err.println("Could not find process " + processId);
         	System.err.println("Aborting process");
         	((ProcessInstance) getProcessInstance()).setState(ProcessInstance.STATE_ABORTED);
+        	throw new RuntimeDroolsException("Could not find process " + processId);
         } else {
 	    	ProcessInstance processInstance = ( ProcessInstance )
 	    		((ProcessInstance) getProcessInstance()).getKnowledgeRuntime()

Modified: labs/jbossrules/trunk/drools-flow-core/src/test/java/org/drools/process/SubProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-core/src/test/java/org/drools/process/SubProcessTest.java	2010-09-23 23:42:01 UTC (rev 35262)
+++ labs/jbossrules/trunk/drools-flow-core/src/test/java/org/drools/process/SubProcessTest.java	2010-09-23 23:59:40 UTC (rev 35263)
@@ -16,8 +16,6 @@
 
 package org.drools.process;
 
-import junit.framework.TestCase;
-
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.common.AbstractRuleBase;
@@ -40,17 +38,22 @@
 import org.drools.workflow.core.node.StartNode;
 import org.drools.workflow.core.node.SubProcessNode;
 import org.drools.workflow.core.node.WorkItemNode;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
 
-public class SubProcessTest extends TestCase {
+public class SubProcessTest {
 
 	private boolean executed = false;
 	private WorkItem workItem;
 	
+	@Before
 	public void setUp() {
 		executed = false;
 		workItem = null;
 	}
     
+	@Test
     public void testSynchronousSubProcess() {
         RuleFlowProcess process = new RuleFlowProcess();
         process.setId("org.drools.process.process");
@@ -121,6 +124,7 @@
         assertEquals(0, ksession.getProcessInstances().size());
     }
 
+	@Test
     public void testAsynchronousSubProcess() {
         RuleFlowProcess process = new RuleFlowProcess();
         process.setId("org.drools.process.process");
@@ -197,4 +201,46 @@
         assertEquals(0, ksession.getProcessInstances().size());
     }
     
+	@Test
+    public void testNonExistentSubProcess() {
+	    String nonExistentSubProcessName = "nonexistent.process";
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId("org.drools.process.process");
+        process.setName("Process");
+        StartNode startNode = new StartNode();
+        startNode.setName("Start");
+        startNode.setId(1);
+        SubProcessNode subProcessNode = new SubProcessNode();
+        subProcessNode.setName("SubProcessNode");
+        subProcessNode.setId(2);
+        subProcessNode.setProcessId(nonExistentSubProcessName);
+        EndNode endNode = new EndNode();
+        endNode.setName("End");
+        endNode.setId(3);
+        
+        connect(startNode, subProcessNode);
+        connect(subProcessNode, endNode);
+        
+        process.addNode( startNode );
+        process.addNode( subProcessNode );
+        process.addNode( endNode );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        ((AbstractRuleBase) ((InternalKnowledgeBase) kbase).getRuleBase()).addProcess(process);
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        try{
+            ksession.startProcess("org.drools.process.process");
+            fail("should throw exception");
+        } catch (RuntimeException re){
+            assertTrue(re.getMessage().contains( nonExistentSubProcessName ));
+        }
+    }
+
+    private void connect(Node sourceNode,
+                         Node targetNode) {
+        new ConnectionImpl (sourceNode, Node.CONNECTION_DEFAULT_TYPE,
+                            targetNode, Node.CONNECTION_DEFAULT_TYPE);
+    }
+    
 }



More information about the jboss-svn-commits mailing list