[jboss-svn-commits] JBL Code SVN: r34207 - in labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test: resources/org/drools/integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 26 16:27:13 EDT 2010


Author: eaa
Date: 2010-07-26 16:27:12 -0400 (Mon, 26 Jul 2010)
New Revision: 34207

Added:
   labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java
   labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.rf
Log:
JBRULES-2595: Extend ProcessEventListener to add support for low-level exceptions occurred in a process execution
	- Added test case

Added: labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java
===================================================================
--- labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java	                        (rev 0)
+++ labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java	2010-07-26 20:27:12 UTC (rev 34207)
@@ -0,0 +1,131 @@
+package org.drools.integrationtests;
+
+import org.drools.Person;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import java.util.List;
+import java.util.ArrayList;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.event.process.DefaultProcessEventListener;
+import org.drools.event.process.ProcessNodeExceptionOccurredEvent;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItemManager;
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ProcessNodeExceptionOccurredEventTest {
+
+    private static class ExpectedResult {
+
+        private String nodeName;
+        private String expectedException;
+
+        public ExpectedResult(String nodeName, String expectedException) {
+            this.nodeName = nodeName;
+            this.expectedException = expectedException;
+        }
+
+        public void validate(ProcessNodeExceptionOccurredEvent event) {
+
+            if (this.nodeName != null) {
+                assertEquals(this.nodeName, event.getNodeInstance().getNodeName());
+            }
+
+            if (this.expectedException != null) {
+                boolean found = false;
+                Throwable t = event.getError();
+                while (t != null) {
+                    if (t.toString().contains(this.expectedException)) {
+                        found = true;
+                        break;
+                    }
+                    t = t.getCause();
+                }
+
+                if (!found) {
+                    fail(this.expectedException + " wasn't found!");
+                }
+            }
+        }
+    }
+
+    private static class FailWorkItemHandler implements WorkItemHandler {
+
+        public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+        public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+        }
+    }
+
+    
+    private int exceptionCount = 0;
+    private ExpectedResult expectedResult;
+
+    private class CustomListener extends DefaultProcessEventListener {
+
+        @Override
+        public void onNodeException(ProcessNodeExceptionOccurredEvent event) {
+            exceptionCount++;
+            expectedResult.validate(event);
+        }
+    }
+
+    @Test
+    public void actionAndWorkItemExceptionTest() throws InterruptedException {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add(ResourceFactory.newClassPathResource("org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.rf"), ResourceType.DRF);
+        if (kbuilder.hasErrors()) {
+            Assert.fail(kbuilder.getErrors().toString());
+        }
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+        ksession.addEventListener(new CustomListener());
+
+
+        this.expectedResult = new ExpectedResult("Some Script", "java.lang.NullPointerException");
+        try {
+            ksession.startProcess("org.drools.test.process1");
+            fail("An exception should occurr!");
+        } catch (RuntimeException ex) {
+            //ok
+        }
+        assertEquals(1, this.exceptionCount);
+        this.exceptionCount = 0;
+
+        List<String> list = new ArrayList<String>();
+
+        Person person = new Person();
+        person.setName("John");
+
+        ksession.setGlobal("person", person);
+        ksession.setGlobal("list", list);
+
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new FailWorkItemHandler());
+
+
+        this.expectedResult = new ExpectedResult("HumanTask", "java.lang.UnsupportedOperationException");
+
+        try {
+            ksession.startProcess("org.drools.test.process1");
+            fail("An exception should occurr!");
+        } catch (RuntimeException ex) {
+            //ok
+        }
+        assertEquals(1, this.exceptionCount);
+        this.exceptionCount = 0;
+
+        ksession.dispose();
+    }
+}

Added: labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.rf
===================================================================
--- labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.rf	                        (rev 0)
+++ labs/jbossrules/branches/trunk_20100722_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.rf	2010-07-26 20:27:12 UTC (rev 34207)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="flow" package-name="org.drools.test.process1" id="org.drools.test.process1">
+
+  <header>
+  
+  	<imports>
+      <import name="org.drools.Person" />
+    </imports>
+    <globals>
+      <global identifier="person" type="org.drools.Person" />
+      <global identifier="list" type="java.util.List" />
+    </globals>
+  
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="100" y="100" width="48" height="48" />
+     <actionNode id="2" name="Some Script" x="186" y="97" width="80" height="48" >
+      <action type="expression" dialect="java" >
+        System.out.println("Hello "+person.getName());        
+      </action>
+    </actionNode>
+
+
+
+     <workItem id="3" name="HumanTask" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>John Doe</value>
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>Do something</value>
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+      </work>
+      <onEntry>
+        <action type="expression" name="Print" dialect="mvel" >list.add("Executing on entry action");</action>
+      </onEntry>
+      <onExit>
+        <action type="expression" name="Print" dialect="java" >list.add("Executing on exit action1");</action>
+        <action type="expression" name="Print" dialect="java" >list.add("Executing on exit action2");</action>
+      </onExit>
+    </workItem>
+
+    <end id="4" name="End" x="357" y="92" width="48" height="48" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+    <connection from="3" to="4" />
+  </connections>
+
+</process>
\ No newline at end of file



More information about the jboss-svn-commits mailing list