[jboss-svn-commits] JBL Code SVN: r36390 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Dec 12 22:02:06 EST 2010
Author: mark.proctor at jboss.com
Date: 2010-12-12 22:02:05 -0500 (Sun, 12 Dec 2010)
New Revision: 36390
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java
Log:
JBRULES-2817 Make the KnowledgeAgent Tests more robust and faster
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java 2010-12-13 03:00:30 UTC (rev 36389)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java 2010-12-13 03:02:05 UTC (rev 36390)
@@ -11,6 +11,7 @@
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
+import org.drools.Person;
import org.drools.core.util.FileManager;
import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
@@ -25,83 +26,34 @@
import org.drools.io.ResourceFactory;
import org.drools.io.impl.ResourceChangeNotifierImpl;
import org.drools.io.impl.ResourceChangeScannerImpl;
+import org.drools.runtime.StatefulKnowledgeSession;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ResourceHandler;
-public class KnowledgeAgentEventListenerTest extends TestCase {
+public class KnowledgeAgentEventListenerTest extends BaseKnowledgeAgentTest {
- FileManager fileManager;
- private Server server;
- private final Object lock = new Object();
+ private final Object lock = new Object();
private volatile boolean changeSetApplied;
- private boolean compilationErrors;
- private boolean kbaseUpdated;
- private int beforeChangeSetProcessed;
- private int afterChangeSetProcessed;
- private int beforeChangeSetApplied;
- private int afterChangeSetApplied;
- private int beforeResourceProcessed;
- private int afterResourceProcessed;
-
-
- @Override
- protected void setUp() throws Exception {
- fileManager = new FileManager();
- fileManager.setUp();
- ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
-
- ResourceFactory.getResourceChangeNotifierService().start();
- ResourceFactory.getResourceChangeScannerService().start();
-
- this.server = new Server(0);
- ResourceHandler resourceHandler = new ResourceHandler();
- resourceHandler.setResourceBase(fileManager.getRootDirectory().getPath());
-
- server.setHandler(resourceHandler);
-
- server.start();
-
- this.resetEventCounters();
- }
-
- private int getPort() {
- return this.server.getConnectors()[0].getLocalPort();
- }
-
- @Override
- protected void tearDown() throws Exception {
- fileManager.tearDown();
- ResourceFactory.getResourceChangeNotifierService().stop();
- ResourceFactory.getResourceChangeScannerService().stop();
- ((ResourceChangeNotifierImpl) ResourceFactory.getResourceChangeNotifierService()).reset();
- ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
-
- server.stop();
- }
+ private boolean compilationErrors;
+ private boolean kbaseUpdated;
+ private int beforeChangeSetProcessed;
+ private int afterChangeSetProcessed;
+ private int beforeChangeSetApplied;
+ private int afterChangeSetApplied;
+ private int beforeResourceProcessed;
+ private int afterResourceProcessed;
- public void testDummy() {
+ public void test_RemoveMeAfterFixedFIXMES() {
+
}
public void FIXMEtestEventListenerWithIncrementalChangeSet() throws Exception {
+ fileManager.write( "myExpander.dsl",
+ this.createCommonDSL( null ) );
- String header = "";
- header += "package org.drools.test\n";
- header += "import org.drools.Person\n\n";
- header += "global java.util.List list\n\n";
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule1" ) );
- //create a basic dsl file
- File f1 = fileManager.newFile("myExpander.dsl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(this.createCommonDSL(null));
- output.close();
-
- //create a basic dslr file
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.close();
-
String xml = "";
xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
@@ -111,147 +63,166 @@
xml += " <resource source='http://localhost:" + this.getPort() + "/myExpander.dsl' type='DSL' />";
xml += " </add> ";
xml += "</change-set>";
- File fxml = fileManager.newFile("changeset.xml");
- output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- output.close();
+ File fxml = fileManager.write( "changeset.xml",
+ xml );
List<String> list = new ArrayList<String>();
//Create a new Agent with newInstace=true
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- KnowledgeAgent kagent = this.createKAgent(kbase, false);
+ KnowledgeAgent kagent = this.createKAgent( kbase,
+ false );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
//Agent: take care of them!
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ applyChangeSet( kagent,
+ ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(2, this.beforeResourceProcessed);
- assertEquals(2, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 2,
+ this.beforeResourceProcessed );
+ assertEquals( 2,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
- Thread.sleep(2000);
- //the dsl is now modified.
- f1 = fileManager.newFile("myExpander.dsl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(this.createCommonDSL("name == \"John\""));
- output.close();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( new Person( "John" ) );
+ ksession.fireAllRules();
- //We also need to mark the dslr file as modified, so the rules could
- //be regenerated
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.close();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule1" ) );
+ list.clear();
+ File f2 = fileManager.write( "myExpander.dsl",
+ this.createCommonDSL( "name == \"John\"" ) );
- this.waitUntilChangeSetApplied();
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(2, this.beforeResourceProcessed);
- assertEquals(2, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule1" ) );
+
+ scan( kagent );
+
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 2,
+ this.beforeResourceProcessed );
+ assertEquals( 2,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
- //The new fact activated and fired the modified rule
- Thread.sleep(2000);
+ ksession.fireAllRules();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule1" ) );
+ list.clear();
- //let's add a new rule
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.write(this.createCommonDSLRRule("Rule2"));
- output.close();
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( new String[]{"Rule1", "Rule2"} ) );
- this.waitUntilChangeSetApplied();
+ scan( kagent );
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(1, this.beforeResourceProcessed);
- assertEquals(1, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 1,
+ this.beforeResourceProcessed );
+ assertEquals( 1,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
+ ksession.fireAllRules();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule2" ) );
+ list.clear();
+
//let's remove Rule1 and Rule2 and add a new rule: Rule3
- Thread.sleep(2000);
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule3"));
- output.close();
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule3" ) );
+ scan( kagent );
- this.waitUntilChangeSetApplied();
-
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(1, this.beforeResourceProcessed);
- assertEquals(1, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 1,
+ this.beforeResourceProcessed );
+ assertEquals( 1,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
+ ksession.fireAllRules();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule3" ) );
+ list.clear();
+
//let's delete the dsl file (errors are expected)
- Thread.sleep(2000);
- f1 = fileManager.newFile("myExpander.dsl");
- f1.delete();
+ this.fileManager.deleteFile( f2 );
+ scan( kagent );
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.close();
-
- this.waitUntilChangeSetApplied();
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(2, this.beforeResourceProcessed);
- assertEquals(2, this.afterResourceProcessed);
- assertTrue(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule1" ) );
+ scan( kagent );
+ assertEquals( 2,
+ this.beforeChangeSetApplied );
+ assertEquals( 2,
+ this.afterChangeSetApplied );
+ assertEquals( 2,
+ this.beforeChangeSetProcessed );
+ assertEquals( 2,
+ this.afterChangeSetProcessed );
+ assertEquals( 2,
+ this.beforeResourceProcessed );
+ assertEquals( 2,
+ this.afterResourceProcessed );
+ assertTrue( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
- kagent.monitorResourceChangeEvents(false);
+ ksession.dispose();
+ kagent.dispose();
}
public void FIXMEtestEventListenerWithoutIncrementalChangeSet() throws Exception {
+ fileManager.write( "myExpander.dsl",
+ this.createCommonDSL( null ) );
- System.out.println("\n\ntestDSLAndNewInstance\n\n");
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule1" ) );
- String header = "";
- header += "package org.drools.test\n";
- header += "import org.drools.Person\n\n";
- header += "global java.util.List list\n\n";
-
- //create a basic dsl file
- File f1 = fileManager.newFile("myExpander.dsl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(this.createCommonDSL(null));
- output.close();
-
- //create a basic dslr file
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.close();
-
String xml = "";
xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
@@ -261,150 +232,200 @@
xml += " <resource source='http://localhost:" + this.getPort() + "/myExpander.dsl' type='DSL' />";
xml += " </add> ";
xml += "</change-set>";
- File fxml = fileManager.newFile("changeset.xml");
- output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- output.close();
+ File fxml = fileManager.write( "changeset.xml",
+ xml );
List<String> list = new ArrayList<String>();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
//Create a new Agent with newInstace=true
- KnowledgeAgent kagent = this.createKAgent(kbase,true);
+ KnowledgeAgent kagent = this.createKAgent( kbase,
+ false );
//Agent: take care of them!
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ applyChangeSet( kagent,
+ ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
-
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(2, this.beforeResourceProcessed);
- assertEquals(2, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 2,
+ this.beforeResourceProcessed );
+ assertEquals( 2,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
- Thread.sleep(2000);
- //Let's modify the dsl file
- f1 = fileManager.newFile("myExpander.dsl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(this.createCommonDSL("name == \"John\""));
- output.close();
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( new Person( "John" ) );
+ ksession.fireAllRules();
+ ksession.dispose();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule1" ) );
+ list.clear();
- //We need to mark the dslr file as modified (even when it was not) so
- //the agent could recreate the rules it contains using the new dsl.
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.close();
+ File f2 = fileManager.write( "myExpander.dsl",
+ this.createCommonDSL( "name == \"John\"" ) );
- this.waitUntilChangeSetApplied();
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(2, this.beforeResourceProcessed);
- assertEquals(2, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
- this.resetEventCounters();
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule1" ) );
- Thread.sleep(2000);
- //Let's add a new Rule
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.write(this.createCommonDSLRRule("Rule2"));
- output.close();
+ scan( kagent );
- this.waitUntilChangeSetApplied();
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(1, this.beforeResourceProcessed);
- assertEquals(1, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
- this.resetEventCounters();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( new Person( "John" ) );
+ ksession.fireAllRules();
+ ksession.dispose();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule1" ) );
+ list.clear();
- Thread.sleep(2000);
- //Let's remove both rules and add a new one: Rule3
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule3"));
- output.close();
-
- this.waitUntilChangeSetApplied();
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(1, this.beforeResourceProcessed);
- assertEquals(1, this.afterResourceProcessed);
- assertFalse(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 2,
+ this.beforeResourceProcessed );
+ assertEquals( 2,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
- Thread.sleep(2000);
- //let's delete the dsl file (errors are expected)
- f1 = fileManager.newFile("myExpander.dsl");
- f1.delete();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( new Person( "John" ) );
+ ksession.fireAllRules();
+ ksession.dispose();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule1" ) );
+ list.clear();
- f1 = fileManager.newFile("rules.drl");
- output = new BufferedWriter(new FileWriter(f1));
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( new String[]{"Rule1", "Rule2"} ) );
- output.write(header);
- output.write(this.createCommonDSLRRule("Rule1"));
- output.close();
+ scan( kagent );
- this.waitUntilChangeSetApplied();
- assertEquals(1, this.beforeChangeSetApplied);
- assertEquals(1, this.afterChangeSetApplied);
- assertEquals(1, this.beforeChangeSetProcessed);
- assertEquals(1, this.afterChangeSetProcessed);
- assertEquals(2, this.beforeResourceProcessed);
- assertEquals(2, this.afterResourceProcessed);
- assertTrue(this.compilationErrors);
- assertTrue(this.kbaseUpdated);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 1,
+ this.beforeResourceProcessed );
+ assertEquals( 1,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
this.resetEventCounters();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( new Person( "John" ) );
+ ksession.fireAllRules();
+ ksession.dispose();
+ assertEquals( 2,
+ list.size() );
+ assertTrue( list.contains( "Rule1" ) );
+ assertTrue( list.contains( "Rule2" ) );
+ list.clear();
- kagent.monitorResourceChangeEvents(false);
- }
+ //let's remove Rule1 and Rule2 and add a new rule: Rule3
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule3" ) );
+ scan( kagent );
- private KnowledgeAgent createKAgent(KnowledgeBase kbase, boolean newInstance) {
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ assertEquals( 1,
+ this.beforeChangeSetApplied );
+ assertEquals( 1,
+ this.afterChangeSetApplied );
+ assertEquals( 1,
+ this.beforeChangeSetProcessed );
+ assertEquals( 1,
+ this.afterChangeSetProcessed );
+ assertEquals( 1,
+ this.beforeResourceProcessed );
+ assertEquals( 1,
+ this.afterResourceProcessed );
+ assertFalse( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
+ this.resetEventCounters();
- //System.setProperty(KnowledgeAgentFactory.PROVIDER_CLASS_NAME_PROPERTY_NAME, "org.drools.agent.impl.KnowledgeAgentProviderImpl");
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( new Person( "John" ) );
+ ksession.fireAllRules();
+ ksession.dispose();
+ assertEquals( 1,
+ list.size() );
+ assertTrue( list.contains( "Rule3" ) );
+ list.clear();
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- // Testing incremental build here
- aconf.setProperty("drools.agent.newInstance", "" + newInstance);
+ //let's delete the dsl file (errors are expected)
+ this.fileManager.deleteFile( f2 );
+ scan( kagent );
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
+ fileManager.write( "rules.drl",
+ createCommonDSLRRule( "Rule1" ) );
+ scan( kagent );
+ assertEquals( 2,
+ this.beforeChangeSetApplied );
+ assertEquals( 2,
+ this.afterChangeSetApplied );
+ assertEquals( 2,
+ this.beforeChangeSetProcessed );
+ assertEquals( 2,
+ this.afterChangeSetProcessed );
+ assertEquals( 2,
+ this.beforeResourceProcessed );
+ assertEquals( 2,
+ this.afterResourceProcessed );
+ assertTrue( this.compilationErrors );
+ assertTrue( this.kbaseUpdated );
+ this.resetEventCounters();
- final KnowledgeAgentEventListenerTest test = this;
- kagent.addEventListener(new KnowledgeAgentEventListener() {
+ ksession.dispose();
+ kagent.dispose();
+ }
+ public KnowledgeAgent createKAgent(KnowledgeBase kbase,
+ boolean newInstance) {
+ KnowledgeAgent kagent = super.createKAgent( kbase,
+ newInstance );
+
+ kagent.addEventListener( new KnowledgeAgentEventListener() {
+
public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
beforeChangeSetApplied++;
}
public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
afterChangeSetApplied++;
- synchronized (lock) {
+ synchronized ( lock ) {
changeSetApplied = true;
lock.notifyAll();
}
@@ -432,59 +453,23 @@
public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
compilationErrors = true;
+ System.out.println( event.getKnowledgeBuilder().getErrors().toString() );
}
- });
+ } );
- assertEquals("test agent", kagent.getName());
+ assertEquals( "test agent",
+ kagent.getName() );
return kagent;
}
- private String createCommonDSLRRule(String ruleName) {
- StringBuilder sb = new StringBuilder();
- sb.append("rule ");
- sb.append(ruleName);
- sb.append("\n");
- sb.append("when\n");
- sb.append("There is a Person\n");
- sb.append("then\n");
- sb.append("add rule's name to list;\n");
- sb.append("end\n");
-
- return sb.toString();
- }
-
- private String createCommonDSL(String restriction) {
- StringBuilder sb = new StringBuilder();
- sb.append("[condition][]There is a Person = Person(");
- if (restriction != null) {
- sb.append(restriction);
- }
- sb.append(")\n");
- sb.append("[consequence][]add rule's name to list = list.add( drools.getRule().getName() );\n");
- return sb.toString();
- }
-
- private void waitUntilChangeSetApplied() {
- synchronized (lock) {
- while (!changeSetApplied) {
- try {
- lock.wait();
- } catch (InterruptedException e) {
- }
- System.out.println("Waking up!");
- }
- changeSetApplied = false;
- }
- }
-
- private void resetEventCounters(){
- this.beforeChangeSetApplied=0;
- this.beforeChangeSetProcessed=0;
- this.beforeResourceProcessed=0;
- this.afterChangeSetApplied=0;
- this.afterChangeSetProcessed=0;
- this.afterResourceProcessed=0;
+ private void resetEventCounters() {
+ this.beforeChangeSetApplied = 0;
+ this.beforeChangeSetProcessed = 0;
+ this.beforeResourceProcessed = 0;
+ this.afterChangeSetApplied = 0;
+ this.afterChangeSetProcessed = 0;
+ this.afterResourceProcessed = 0;
this.compilationErrors = false;
this.changeSetApplied = false;
this.kbaseUpdated = false;
More information about the jboss-svn-commits
mailing list