[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