[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