[jboss-svn-commits] JBL Code SVN: r36213 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/agent and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Dec 4 20:10:07 EST 2010
Author: mark.proctor at jboss.com
Date: 2010-12-04 20:10:05 -0500 (Sat, 04 Dec 2010)
New Revision: 36213
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/BaseKnowledgeAgentTest.java
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java
Log:
JBRULES-2817 Make the KnowledgeAgent Tests more robust and faster
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java 2010-12-04 18:09:28 UTC (rev 36212)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java 2010-12-05 01:10:05 UTC (rev 36213)
@@ -34,6 +34,8 @@
public interface KnowledgeAgent {
void addEventListener(KnowledgeAgentEventListener listener);
+
+ void removeEventListener(KnowledgeAgentEventListener listener);
public enum ResourceStatus{
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/BaseKnowledgeAgentTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/BaseKnowledgeAgentTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/BaseKnowledgeAgentTest.java 2010-12-05 01:10:05 UTC (rev 36213)
@@ -0,0 +1,312 @@
+package org.drools.agent;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import org.drools.KnowledgeBase;
+import org.drools.core.util.DroolsStreamUtils;
+import org.drools.core.util.FileManager;
+import org.drools.core.util.IoUtils;
+import org.drools.core.util.StringUtils;
+import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.AfterResourceProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeResourceProcessedEvent;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
+import org.drools.event.knowledgeagent.KnowledgeBaseUpdatedEvent;
+import org.drools.event.knowledgeagent.ResourceCompilationFailedEvent;
+import org.drools.io.Resource;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ResourceChangeNotifierImpl;
+import org.drools.io.impl.ResourceChangeScannerImpl;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.ResourceHandler;
+
+import junit.framework.TestCase;
+
+public abstract class BaseKnowledgeAgentTest extends TestCase {
+ FileManager fileManager;
+ Server server;
+ ResourceChangeScannerImpl scanner;
+
+ @Override
+ protected void setUp() throws Exception {
+ this.fileManager = new FileManager();
+ this.fileManager.setUp();
+ ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
+
+ ResourceFactory.getResourceChangeNotifierService().start();
+
+ // we don't start the scanner, as we call it manually;
+ this.scanner = (ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService();
+
+ this.server = new Server( IoUtils.findPort() );
+ ResourceHandler resourceHandler = new ResourceHandler();
+ resourceHandler.setResourceBase( fileManager.getRootDirectory().getPath() );
+
+ this.server.setHandler( resourceHandler );
+
+ this.server.start();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ fileManager.tearDown();
+ ResourceFactory.getResourceChangeNotifierService().stop();
+ ((ResourceChangeNotifierImpl) ResourceFactory.getResourceChangeNotifierService()).reset();
+ ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
+
+ server.stop();
+ }
+
+
+
+ public int getPort() {
+ return this.server.getConnectors()[0].getLocalPort();
+ }
+
+
+ public void scan(KnowledgeAgent kagent) {
+ // Calls the Resource Scanner and sets up a listener and a latch so we can wait until it's finished processing, instead of using timers
+ final CountDownLatch latch = new CountDownLatch( 1 );
+
+ KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
+
+ public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+ }
+
+ public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+ }
+
+ public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+ }
+
+ public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+ }
+
+ public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+ }
+
+ public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+ }
+
+ public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+ }
+
+ public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+ latch.countDown();
+ }
+ };
+
+ kagent.addEventListener( l );
+
+ this.scanner.scan();
+
+ try {
+ latch.await( 10, TimeUnit.SECONDS );
+ } catch ( InterruptedException e ) {
+ throw new RuntimeException( "Unable to wait for latch countdown", e);
+ }
+
+ if ( latch.getCount() > 0 ) {
+ throw new RuntimeException( "Event for KnowlegeBase update, due to scan, was never received" );
+ }
+
+ kagent.removeEventListener( l );
+ }
+
+ void applyChangeSet(KnowledgeAgent kagent, String xml) {
+ // Calls the Resource Scanner and sets up a listener and a latch so we can wait until it's finished processing, instead of using timers
+ final CountDownLatch latch = new CountDownLatch( 1 );
+
+ KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
+
+ public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+ }
+
+ public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+ }
+
+ public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+ }
+
+ public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+ }
+
+ public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+ }
+
+ public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+ }
+
+ public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+ }
+
+ public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+ latch.countDown();
+ }
+ };
+
+ kagent.addEventListener( l );
+
+ kagent.applyChangeSet( ResourceFactory.newByteArrayResource( xml.getBytes() ) );
+
+ try {
+ latch.await( 10, TimeUnit.SECONDS );
+ } catch ( InterruptedException e ) {
+ throw new RuntimeException( "Unable to wait for latch countdown", e);
+ }
+
+ if ( latch.getCount() > 0 ) {
+ throw new RuntimeException( "Event for KnowlegeBase update, due to scan, was never received" );
+ }
+
+ kagent.removeEventListener( l );
+ }
+
+ void applyChangeSet(KnowledgeAgent kagent, Resource r) {
+ // Calls the Resource Scanner and sets up a listener and a latch so we can wait until it's finished processing, instead of using timers
+ final CountDownLatch latch = new CountDownLatch( 1 );
+
+ KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
+
+ public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+ }
+
+ public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+ }
+
+ public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+ }
+
+ public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+ }
+
+ public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+ }
+
+ public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+ }
+
+ public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+ }
+
+ public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+ latch.countDown();
+ }
+ };
+
+ kagent.addEventListener( l );
+
+ kagent.applyChangeSet( r );
+
+ try {
+ latch.await( 10, TimeUnit.SECONDS );
+ } catch ( InterruptedException e ) {
+ throw new RuntimeException( "Unable to wait for latch countdown", e);
+ }
+
+ if ( latch.getCount() > 0 ) {
+ throw new RuntimeException( "Event for KnowlegeBase update, due to scan, was never received" );
+ }
+
+ kagent.removeEventListener( l );
+ }
+
+
+ public static void writePackage(Object pkg,
+ File p1file )throws IOException, FileNotFoundException {
+ if ( p1file.exists() ) {
+ // we want to make sure there is a time difference for lastModified and lastRead checks as Linux and http often round to seconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ try {
+ Thread.sleep( 1000 );
+ } catch (Exception e) {
+ throw new RuntimeException( "Unable to sleep" );
+ }
+ }
+ FileOutputStream out = new FileOutputStream( p1file );
+ try {
+ DroolsStreamUtils.streamOut( out,
+ pkg );
+ } finally {
+ out.close();
+ }
+ }
+
+ public KnowledgeAgent createKAgent(KnowledgeBase kbase) {
+ return createKAgent( kbase, true );
+ }
+ public KnowledgeAgent createKAgent(KnowledgeBase kbase, boolean newInsatnce) {
+ KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
+ aconf.setProperty( "drools.agent.scanDirectories",
+ "true" );
+ aconf.setProperty( "drools.agent.scanResources",
+ "true" );
+ aconf.setProperty( "drools.agent.newInstance",
+ Boolean.toString( newInsatnce ) );
+
+ KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("test agent",
+ kbase,
+ aconf );
+
+ assertEquals( "test agent",
+ kagent.getName() );
+
+ return kagent;
+ }
+
+
+ public String createVersionedRule(String packageName, String ruleName, String attribute, String version) {
+ StringBuilder rule = new StringBuilder();
+ if ( StringUtils.isEmpty( packageName ) ) {
+ rule.append( "package org.drools.test\n" );
+ } else {
+ rule.append( "package " );
+ rule.append( packageName );
+ rule.append( "\n" );
+ }
+ rule.append( "global java.util.List list\n" );
+ rule.append( "rule " );
+ rule.append( ruleName );
+ rule.append( "\n" );
+ if ( !StringUtils.isEmpty( attribute ) ) {
+ rule.append( attribute +"\n" );
+ }
+ rule.append( "when\n" );
+ rule.append( "then\n" );
+ if ( StringUtils.isEmpty( version ) ) {
+ rule.append( "list.add( drools.getRule().getName() );\n" );
+ } else {
+ rule.append("list.add( drools.getRule().getName()+\"-V" + version + "\");\n");
+ }
+ rule.append( "end\n" );
+
+ return rule.toString();
+ }
+
+ public String createVersionedRule(String ruleName, String version) {
+ return createVersionedRule( null, ruleName, null, version );
+ }
+
+ public String createDefaultRule(String name) {
+ return createDefaultRule( name,
+ null );
+ }
+
+ public String createDefaultRule(String ruleName,
+ String packageName) {
+ return createVersionedRule( null, ruleName, null, null );
+ }
+
+ public String createAttributeRule(String ruleName,
+ String attribute) {
+ return createVersionedRule( null, ruleName, attribute, null );
+ }
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java 2010-12-04 18:09:28 UTC (rev 36212)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java 2010-12-05 01:10:05 UTC (rev 36213)
@@ -22,46 +22,8 @@
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ResourceHandler;
-public class KnowledgeAgentBinaryDiffTests extends TestCase {
+public class KnowledgeAgentBinaryDiffTests extends BaseKnowledgeAgentTest {
- FileManager fileManager;
- private Server server;
-
- @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());
- System.out.println("root : " + fileManager.getRootDirectory().getPath());
-
- server.setHandler(resourceHandler);
-
- server.start();
-
- System.out.println("Server running on port "+this.getPort());
- }
-
- 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();
- }
-
public void testDifferentDateExpires() throws Exception {
final String attribute1 = "date-expires \"4-jan-2010\"";
@@ -293,20 +255,10 @@
}
public void testDifferentLHS() throws Exception {
+ File f1 = fileManager.write( "rule1.drl",
+ createDefaultRule( "rule1" ) );
- String header1 = "";
- header1 += "package org.drools.test\n";
- header1 += "global java.util.List list\n\n";
- String rule1 = this.createCommonRule("rule1");
-
-
- File f1 = fileManager.newFile("rule1.drl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(header1);
- output.write(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'";
@@ -315,16 +267,14 @@
xml += " <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
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 );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- KnowledgeAgent kagent = this.createKAgent(kbase);
+ KnowledgeAgent kagent = this.createKAgent(kbase, false);
+
+ applyChangeSet( kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL()) );
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
@@ -335,26 +285,12 @@
assertTrue(list.contains("rule1"));
list.clear();
+
+ File f2 = fileManager.write( "rule1.drl",
+ createVersionedRule( "rule1", "2" ) );
+
+ scan(kagent);
- // have to sleep here as linux lastModified does not do milliseconds
- // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
- Thread.sleep(2000);
-
- //String rule1v3 = this.createCommonRule("rule1","3");
- String rule1v2 = "";
- rule1v2 += "rule rule1\n";
- rule1v2 += "when\n";
- rule1v2 += "\tString()\n";
- rule1v2 += "then\n";
- rule1v2 += "list.add( drools.getRule().getName()+\"-V2\");\n";
- rule1v2 += "end\n";
-
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header1);
- output.write(rule1v2);
- output.close();
- Thread.sleep(3000);
-
// Use the same session for incremental build test
ksession = kbase.newStatefulKnowledgeSession();
ksession.setGlobal("list", list);
@@ -365,25 +301,15 @@
assertEquals(1, list.size());
assertTrue(list.contains("rule1-V2"));
- kagent.monitorResourceChangeEvents(false);
+ kagent.dispose();
}
public void testDifferentConsequences() throws Exception {
- String header1 = "";
- header1 += "package org.drools.test\n";
- header1 += "global java.util.List list\n\n";
+ File f1 = fileManager.write( "rule1.drl",
+ createDefaultRule( "rule1" ) );
- String rule1 = this.createCommonRule("rule1");
-
-
- File f1 = fileManager.newFile("rule1.drl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(header1);
- output.write(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'";
@@ -392,16 +318,14 @@
xml += " <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
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 );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- KnowledgeAgent kagent = this.createKAgent(kbase);
+ KnowledgeAgent kagent = this.createKAgent(kbase, false);
+
+ applyChangeSet( kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL()) );
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
@@ -413,18 +337,11 @@
list.clear();
- // have to sleep here as linux lastModified does not do milliseconds
- // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
- Thread.sleep(2000);
+ fileManager.write( "rule1.drl",
+ createVersionedRule( "rule1", "2" ) );
+
+ scan( kagent );
- String rule1v2 = this.createCommonRule("rule1", "2");
-
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header1);
- output.write(rule1v2);
- output.close();
- Thread.sleep(3000);
-
// Use the same session for incremental build test
ksession = kbase.newStatefulKnowledgeSession();
ksession.setGlobal("list", list);
@@ -435,38 +352,13 @@
assertEquals(1, list.size());
assertTrue(list.contains("rule1-V2"));
- kagent.monitorResourceChangeEvents(false);
+ kagent.dispose();
}
+ private void differentRuleAttributeTest(String attribute1, String attribute2,RuleAttributeAsserter asserter) throws Exception {
+ File f1 = fileManager.write( "rule1.drl",
+ createAttributeRule( "rule1", attribute1 ) );
-
-
-
-
-//
-
- private void differentRuleAttributeTest(String attribute1, String attribute2,RuleAttributeAsserter asserter) throws Exception {
-
- String header1 = "";
- header1 += "package org.drools.test\n";
- header1 += "global java.util.List list\n\n";
-
- String rule1 = "";
- rule1 += "rule rule1\n";
- rule1 += attribute1+"\n";
- rule1 += "when\n";
- rule1 += "\tString()\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName());\n";
- rule1 += "end\n";
-
-
- File f1 = fileManager.newFile("rule1.drl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(header1);
- output.write(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'";
@@ -475,97 +367,30 @@
xml += " <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
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 );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- KnowledgeAgent kagent = this.createKAgent(kbase);
+ KnowledgeAgent kagent = this.createKAgent(kbase, false);
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ applyChangeSet( kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL()));
org.drools.rule.Rule rule = (org.drools.rule.Rule) kagent.getKnowledgeBase().getRule("org.drools.test", "rule1");
assertNotNull(rule);
asserter.assertRuleAttribute(attribute1, rule);
-
- // have to sleep here as linux lastModified does not do milliseconds
- // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
- Thread.sleep(2000);
-
- String rule1v2 = "";
- rule1v2 += "rule rule1\n";
- rule1v2 += attribute2+"\n";
- rule1v2 += "when\n";
- rule1v2 += "\tString()\n";
- rule1v2 += "then\n";
- rule1v2 += "list.add( drools.getRule().getName());\n";
- rule1v2 += "end\n";
-
- output = new BufferedWriter(new FileWriter(f1));
- output.write(header1);
- output.write(rule1v2);
- output.close();
- Thread.sleep(3000);
-
+ File f2 = fileManager.write( "rule1.drl",
+ createAttributeRule( "rule1", attribute2 ) );
+
+ scan( kagent );
+
rule = (org.drools.rule.Rule) kagent.getKnowledgeBase().getRule("org.drools.test", "rule1");
assertNotNull(rule);
asserter.assertRuleAttribute(attribute2, rule);
- kagent.monitorResourceChangeEvents(false);
+ kagent.dispose();
}
-
- private KnowledgeAgent createKAgent(KnowledgeBase kbase) {
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
-
- //System.setProperty(KnowledgeAgentFactory.PROVIDER_CLASS_NAME_PROPERTY_NAME, "org.drools.agent.impl.KnowledgeAgentProviderImpl");
-
- 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", "false");
-
-
-
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
- assertEquals("test agent", kagent.getName());
-
- return kagent;
- }
-
- private String createCommonRule(String ruleName) {
- StringBuilder sb = new StringBuilder();
- sb.append("rule ");
- sb.append(ruleName);
- sb.append("\n");
- sb.append("when\n");
- sb.append("then\n");
- sb.append("list.add( drools.getRule().getName() );\n");
- sb.append("end\n");
-
- return sb.toString();
- }
-
- private String createCommonRule(String ruleName, String version) {
- StringBuilder sb = new StringBuilder();
- sb.append("rule ");
- sb.append(ruleName);
- sb.append("\n");
- sb.append("when\n");
- sb.append("then\n");
- sb.append("list.add( drools.getRule().getName()+\"-V" + version + "\");\n");
- sb.append("end\n");
-
- return sb.toString();
- }
-
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java 2010-12-04 18:09:28 UTC (rev 36212)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java 2010-12-05 01:10:05 UTC (rev 36213)
@@ -42,195 +42,11 @@
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ResourceHandler;
-public class KnowledgeAgentTest extends TestCase {
+public class KnowledgeAgentTest extends BaseKnowledgeAgentTest {
- FileManager fileManager;
- private Server server;
-
- private ResourceChangeScannerImpl scanner;
+
- @Override
- protected void setUp() throws Exception {
- this.fileManager = new FileManager();
- this.fileManager.setUp();
- ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
- ResourceFactory.getResourceChangeNotifierService().start();
-
- // we don't start the scanner, as we call it manually;
- this.scanner = (ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService();
-
- this.server = new Server( IoUtils.findPort() );
- ResourceHandler resourceHandler = new ResourceHandler();
- resourceHandler.setResourceBase( fileManager.getRootDirectory().getPath() );
-
- this.server.setHandler( resourceHandler );
-
- this.server.start();
- }
-
- @Override
- protected void tearDown() throws Exception {
- fileManager.tearDown();
- ResourceFactory.getResourceChangeNotifierService().stop();
- ((ResourceChangeNotifierImpl) ResourceFactory.getResourceChangeNotifierService()).reset();
- ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
-
- server.stop();
- }
-
- private int getPort() {
- return this.server.getConnectors()[0].getLocalPort();
- }
-
- private void scan(KnowledgeAgent kagent) {
- // Calls the Resource Scanner and sets up a listener and a latch so we can wait until it's finished processing, instead of using timers
- final CountDownLatch latch = new CountDownLatch( 1 );
-
- KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
-
- public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
- }
-
- public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
- }
-
- public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
- }
-
- public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
- }
-
- public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
- }
-
- public void afterResourceProcessed(AfterResourceProcessedEvent event) {
- }
-
- public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
- }
-
- public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
- latch.countDown();
- }
- };
-
- kagent.addEventListener( l );
-
- this.scanner.scan();
-
- try {
- latch.await( 10, TimeUnit.SECONDS );
- } catch ( InterruptedException e ) {
- throw new RuntimeException( "Unable to wait for latch countdown", e);
- }
-
- if ( latch.getCount() > 0 ) {
- throw new RuntimeException( "Event for KnowlegeBase update, due to scan, was never received" );
- }
-
- kagent.removeEventListener( l );
- }
-
- void applyChangeSet(KnowledgeAgent kagent, String xml) {
- // Calls the Resource Scanner and sets up a listener and a latch so we can wait until it's finished processing, instead of using timers
- final CountDownLatch latch = new CountDownLatch( 1 );
-
- KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
-
- public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
- }
-
- public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
- }
-
- public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
- }
-
- public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
- }
-
- public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
- }
-
- public void afterResourceProcessed(AfterResourceProcessedEvent event) {
- }
-
- public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
- }
-
- public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
- latch.countDown();
- }
- };
-
- kagent.addEventListener( l );
-
- kagent.applyChangeSet( ResourceFactory.newByteArrayResource( xml.getBytes() ) );
-
- try {
- latch.await( 10, TimeUnit.SECONDS );
- } catch ( InterruptedException e ) {
- throw new RuntimeException( "Unable to wait for latch countdown", e);
- }
-
- if ( latch.getCount() > 0 ) {
- throw new RuntimeException( "Event for KnowlegeBase update, due to scan, was never received" );
- }
-
- kagent.removeEventListener( l );
- }
-
- void applyChangeSet(KnowledgeAgent kagent, Resource r) {
- // Calls the Resource Scanner and sets up a listener and a latch so we can wait until it's finished processing, instead of using timers
- final CountDownLatch latch = new CountDownLatch( 1 );
-
- KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
-
- public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
- }
-
- public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
- }
-
- public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
- }
-
- public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
- }
-
- public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
- }
-
- public void afterResourceProcessed(AfterResourceProcessedEvent event) {
- }
-
- public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
- }
-
- public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
- latch.countDown();
- }
- };
-
- kagent.addEventListener( l );
-
- kagent.applyChangeSet( r );
-
- try {
- latch.await( 10, TimeUnit.SECONDS );
- } catch ( InterruptedException e ) {
- throw new RuntimeException( "Unable to wait for latch countdown", e);
- }
-
- if ( latch.getCount() > 0 ) {
- throw new RuntimeException( "Event for KnowlegeBase update, due to scan, was never received" );
- }
-
- kagent.removeEventListener( l );
- }
-
-
public void testModifyFileUrl() throws Exception {
fileManager.write( "rule1.drl",
createDefaultRule( "rule1" ) );
@@ -861,70 +677,4 @@
assertTrue( list.contains( "rule2" ) );
}
- private static void writePackage(Object pkg,
- File p1file )throws IOException, FileNotFoundException {
- if ( p1file.exists() ) {
- // we want to make sure there is a time difference for lastModified and lastRead checks as Linux and http often round to seconds
- // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
- try {
- Thread.sleep( 1000 );
- } catch (Exception e) {
- throw new RuntimeException( "Unable to sleep" );
- }
- }
- FileOutputStream out = new FileOutputStream( p1file );
- try {
- DroolsStreamUtils.streamOut( out,
- pkg );
- } finally {
- out.close();
- }
- }
-
- private KnowledgeAgent createKAgent(KnowledgeBase kbase) {
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty( "drools.agent.scanDirectories",
- "true" );
- aconf.setProperty( "drools.agent.scanResources",
- "true" );
- aconf.setProperty( "drools.agent.newInstance",
- "true" );
-
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("test agent",
- kbase,
- aconf );
-
- assertEquals( "test agent",
- kagent.getName() );
-
- return kagent;
- }
-
- private String createDefaultRule(String name) {
- return this.createDefaultRule( name,
- null );
- }
-
- private String createDefaultRule(String name,
- String packageName) {
- StringBuilder rule = new StringBuilder();
- if ( packageName == null ) {
- rule.append( "package org.drools.test\n" );
- } else {
- rule.append( "package " );
- rule.append( packageName );
- rule.append( "\n" );
- }
- rule.append( "global java.util.List list\n" );
- rule.append( "rule " );
- rule.append( name );
- rule.append( "\n" );
- rule.append( "when\n" );
- rule.append( "then\n" );
- rule.append( "list.add( drools.getRule().getName() );\n" );
- rule.append( "end\n" );
-
- return rule.toString();
- }
-
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java 2010-12-04 18:09:28 UTC (rev 36212)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java 2010-12-05 01:10:05 UTC (rev 36213)
@@ -110,6 +110,10 @@
// exist
}
}
+ }
+
+ public Map<Resource, Set<ResourceChangeNotifier>> getResources() {
+ return resources;
}
public void scan() {
@@ -161,6 +165,7 @@
// detect if Resource has been removed
long lastModified = ((InternalResource) resource).getLastModified();
long lastRead = ((InternalResource) resource).getLastRead();
+
if ( lastModified == 0 ) {
this.listener.debug( "ResourceChangeScanner removed resource=" + resource );
removed.add( resource );
More information about the jboss-svn-commits
mailing list