[jboss-svn-commits] JBL Code SVN: r36384 - 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 21:06:35 EST 2010


Author: mark.proctor at jboss.com
Date: 2010-12-12 21:06:35 -0500 (Sun, 12 Dec 2010)
New Revision: 36384

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/BaseKnowledgeAgentTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java
Log:
JBRULES-2817 Make the KnowledgeAgent Tests more robust and faster

Modified: 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	2010-12-13 01:57:15 UTC (rev 36383)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/BaseKnowledgeAgentTest.java	2010-12-13 02:06:35 UTC (rev 36384)
@@ -79,6 +79,7 @@
         KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
             
             public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+                throw new RuntimeException("Unable to compile Knowledge"+ event );
             }
             
             public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
@@ -128,6 +129,7 @@
         KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
             
             public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+                throw new RuntimeException("Unable to compile Knowledge"+ event );
             }
             
             public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
@@ -177,6 +179,7 @@
         KnowledgeAgentEventListener l = new KnowledgeAgentEventListener() {
             
             public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+                throw new RuntimeException("Unable to compile Knowledge"+ event );
             }
             
             public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
@@ -260,53 +263,153 @@
                       kagent.getName() );
 
         return kagent;
+    }    
+    
+    public String createHeader(String packageName) {
+        StringBuilder header = new StringBuilder();
+        if ( StringUtils.isEmpty( packageName ) ) {
+            header.append( "package org.drools.test\n" );
+        } else {
+            header.append( "package " );
+            header.append( packageName );
+            header.append( "\n" );
+        }
+        header.append( "import org.drools.Person\n" );
+        header.append( "global java.util.List list\n" );
+        
+        return header.toString();
     }
     
     
-    public String createVersionedRule(String packageName, String ruleName, String attribute, String version) {        
+    public String createVersionedRule(String packageName, String[] ruleNames, String attribute, String lhs, String version) {
+        return createVersionedRule( true, packageName, ruleNames, attribute, lhs, version );
+    }
+    
+    public String createCustomRule(boolean header, String packageName, String[] ruleNames, String attribute, String lhs, String rhs) {
         StringBuilder rule = new StringBuilder();
-        if ( StringUtils.isEmpty( packageName ) ) {
-            rule.append( "package org.drools.test\n" );
-        } else {
-            rule.append( "package " );
-            rule.append( packageName );
+        
+        if ( header ) {
+            rule.append( createHeader( packageName ) );
+        }
+        
+        for (String ruleName : ruleNames ) {
+            rule.append( "rule " );
+            rule.append( ruleName );
             rule.append( "\n" );
+            if ( !StringUtils.isEmpty( attribute ) ) {
+                rule.append( attribute +"\n" );    
+            }
+            rule.append( "when\n" );
+            if ( !StringUtils.isEmpty( lhs ) ) {
+                rule.append( lhs );
+            }
+            rule.append( "then\n" );
+            rule.append( rhs );
+            rule.append( "end\n\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" );
+                
+        return rule.toString();  
+    }
+    
+    public String createVersionedRule(boolean header, String packageName, String[] ruleNames, String attribute, String lhs, String version) {
+        String rhs = null;
         if ( StringUtils.isEmpty( version ) ) {
-            rule.append( "list.add( drools.getRule().getName() );\n" );
+            rhs = "list.add( drools.getRule().getName() );\n";
         } else {
-            rule.append("list.add( drools.getRule().getName()+\"-V" + version + "\");\n");
+            rhs = "list.add( drools.getRule().getName()+\"-V" + version + "\");\n";
         }
-        rule.append( "end\n" );
-
-        return rule.toString();       
+        return createCustomRule(header, packageName, ruleNames, attribute, lhs, rhs  );
+    }     
+    
+    public String createLhsRule(String[] ruleNames, String lhs) {
+        return createVersionedRule( null, ruleNames, null, lhs, null );
     }    
     
+    public String createLhsRule(String ruleName, String lhs) {
+        return createVersionedRule( null, new String[] { ruleName }, null, lhs, null );
+    }
+    
     public String createVersionedRule(String ruleName, String version) {
-        return createVersionedRule( null, ruleName, null, version );
+        return createVersionedRule( null, new String[] { ruleName }, null, null, version );
     }
 
-    public String createDefaultRule(String name) {
-        return createDefaultRule( name,
+    public String createDefaultRule(String ruleName) {
+        return createDefaultRule( new String[] { ruleName },
                                   null );
     }
-
+    
+    public String createDefaultRule(String[] rulesNames) {
+        return createDefaultRule( rulesNames,
+                                  null );
+    }    
+    
     public String createDefaultRule(String ruleName,
                                     String packageName) {
-        return createVersionedRule( null, ruleName, null, null );
+        return createVersionedRule( packageName,  new String[] { ruleName }, null, null, null );
+    }     
+
+    public String createDefaultRule(String[] ruleNames,
+                                    String packageName) {
+        return createVersionedRule( packageName, ruleNames, null, null, null );
     }  
     
     public String createAttributeRule(String ruleName,
                                       String attribute) {
-        return createVersionedRule( null, ruleName, attribute, null );
-    }     
+        return createVersionedRule( null, new String[] { ruleName }, attribute, null, null );
+    }  
+
+    public String createCommonDSLRRule(String[] ruleNames) {
+        StringBuilder sb = new StringBuilder();
+        
+        sb.append("package org.drools.test\n");
+        sb.append("import org.drools.Person\n\n");
+        sb.append("global java.util.List list\n\n");
+        
+        for (String ruleName : ruleNames ) {
+            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\n");
+        }
+
+        return sb.toString(); 
+    }
+    
+    public String createCommonDSLRRule(String ruleName) {
+        return createCommonDSLRRule( new String[] { ruleName } );
+    }
+
+    public 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();
+    }
+    
+    public String createCommonFunction(String functionName, String valueToAdd) {
+      StringBuilder sb = new StringBuilder();
+      
+      sb.append("package org.drools.test\n");
+      sb.append("import org.drools.Person\n\n");
+      sb.append("global java.util.List list\n\n");
+      
+      sb.append("function void  ");
+      sb.append(functionName);
+      sb.append("(java.util.List myList,String source){\n");
+      sb.append(" myList.add(\"");
+      sb.append(valueToAdd);
+      sb.append(" from \"+source);\n");
+      sb.append("}\n");
+    
+      return sb.toString();
+    }    
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java	2010-12-13 01:57:15 UTC (rev 36383)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java	2010-12-13 02:06:35 UTC (rev 36384)
@@ -8,6 +8,7 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
@@ -29,215 +30,153 @@
 import org.drools.io.impl.ResourceChangeNotifierImpl;
 import org.drools.io.impl.ResourceChangeScannerImpl;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
 import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.QueryResultsRow;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.ResourceHandler;
 
-public class KnowledgeAgentIncrementalChangeSetTest extends TestCase {
+public class KnowledgeAgentIncrementalChangeSetTest 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());
-
-        server.setHandler(resourceHandler);
-
-        server.start();
-    }
-
-    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 testModifyFileUrlIncremental() throws Exception {
+        fileManager.write( "rule1.drl",
+                           createDefaultRule( "rule1" ) );
 
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-        
-        String rule1 =  this.createCommonRule("rule1");
+        fileManager.write( "rule2.drl",
+                           createDefaultRule( "rule2" ) );
 
-        File f1 = fileManager.newFile("rule1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.close();
-
-        String rule2 = this.createCommonRule("rule2");
-        
-        File f2 = fileManager.newFile("rule2.drl");
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule2);
-        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'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule2.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule1.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule2.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()));
+        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
 
         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
-        System.gc();
-        Thread.sleep(2000);
+        fileManager.write( "rule1.drl",
+                           createDefaultRule( "rule3" ) );
 
-        String rule3 = this.createCommonRule("rule3");
+        scan( kagent );
 
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule3);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
         // Use the same session for incremental build test
+        ksession.fireAllRules();
+        ksession.dispose();
+
+        assertEquals( 1,
+                      list.size() );
+
+        assertTrue( list.contains( "rule3" ) );
+        ksession.dispose();
+
+        // Check rule2 is still there
         ksession = kbase.newStatefulKnowledgeSession();
         list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule3" ) );
+        assertTrue( list.contains( "rule2" ) );
 
-        assertTrue(list.contains("rule3"));
-        assertTrue(list.contains("rule2"));
-        kagent.monitorResourceChangeEvents(false);
+        ksession.dispose();
+        kagent.dispose();
     }
 
     public void testRemoveFileUrlIncremental() throws Exception {
+        File f1 = fileManager.write( "rule1.drl",
+                                     createLhsRule( "rule1",
+                                                    "String()" ) );
 
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-        
-        String rule1 = this.createCommonRule("rule1");
+        File f2 = fileManager.write( "rule2.drl",
+                                     createLhsRule( "rule2",
+                                                    "String()" ) );
 
-        File f1 = fileManager.newFile("rule1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.close();
-
-        String rule2 = this.createCommonRule("rule2");
-
-        File f2 = fileManager.newFile("rule2.drl");
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule2);
-        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'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule2.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule1.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule2.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()));
+        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
 
         list.clear();
 
         // Delete the file so only rule 2 fires
-        f1.delete();
-        System.gc();
-        Thread.sleep(3000);
+        this.fileManager.deleteFile( f1 );
+        scan( kagent );
 
-        // Use the same session for incremental build test
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
+        ksession.insert( "String2" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(1, list.size());
-        assertTrue(list.contains("rule2"));
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule2" ) );
 
         //Delete f2 now, no rules should fire
         list.clear();
-        f2.delete();
-        System.gc();
-        Thread.sleep(3000);
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
+        this.fileManager.deleteFile( f2 );
+        scan( kagent );
+
+        ksession.insert( "String3" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(0, list.size());
+        assertEquals( 0,
+                      list.size() );
 
-        kagent.monitorResourceChangeEvents(false);
+        ksession.dispose();
+
+        kagent.dispose();
     }
 
-
-
     /**
      * Tests that if we have two DRL files, where one file overwrites a rule in
      * a prior file, that if we modify the first file that was overwritten, that
@@ -246,1239 +185,1012 @@
      * @throws Exception
      */
     public void testModifyFileUrlOverwriteIncremental() throws Exception {
+        File f1 = fileManager.write( "rule1.drl",
+                                     createLhsRule( new String[]{"rule1", "rule2"},
+                                                    "String()\n" ) );
 
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
+        File f2 = fileManager.write( "rule2.drl",
+                                     createVersionedRule( null,
+                                                          new String[]{"rule1"},
+                                                          null,
+                                                          "String()\n",
+                                                          "2" ) );
 
-        String rule1 = this.createCommonRule("rule1");
-
-        String rule2 = this.createCommonRule("rule2");
-
-        File f1 = fileManager.newFile("rule1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.write(rule2);
-        output.close();
-
-        String rule1v2 = this.createCommonRule("rule1","2");
-        
-        File f2 = fileManager.newFile("rule2.drl");
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule1v2);
-        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'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule2.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule1.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule2.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);
-        
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+        KnowledgeAgent kagent = this.createKAgent( kbase,
+                                                   false );
 
+        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1-V2"));
-        assertTrue(list.contains("rule2"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V2" ) );
+        assertTrue( list.contains( "rule2" ) );
 
         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
-        System.gc();
-        Thread.sleep(2000);
+        File f3 = fileManager.write( "rule2.drl",
+                                     createVersionedRule( "rule1",
+                                                          "3" ) );
 
-        String rule1v3 = this.createCommonRule("rule1","3");
+        scan( kagent );
 
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule1v3);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
+        ksession.insert( "String2" );
 
-        // Use the same session for incremental build test
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1-V3"));
-        assertTrue(list.contains("rule2"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V3" ) );
+        assertTrue( list.contains( "rule2" ) );
 
         //Delete f2 now, rule1 should still fire if the indexing worked properly
         list.clear();
-        f2.delete();
-        System.gc();
-        Thread.sleep(3000);
+        this.fileManager.deleteFile( f2 );
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
+        scan( kagent );
+
+        ksession.insert( "String3" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(1, list.size());
-        assertTrue(list.contains("rule2"));
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule2" ) );
 
-        kagent.monitorResourceChangeEvents(false);
+        ksession.dispose();
+        kagent.dispose();
     }
 
-
-
     /**
      * Creates two rules (rule1 and rule2) in a drl file. Then it modifies the
      * drl file to change rule2 with rule3.
      * @throws Exception
      */
     public void testMultipleRulesOnFileUrlIncremental() throws Exception {
-        
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-        
-        String rule1 = this.createCommonRule("rule1");
 
-        String rule2 = this.createCommonRule("rule2");
+        File f1 = fileManager.write( "rules.drl",
+                                     createLhsRule( new String[]{"rule1", "rule2"},
+                                                    "String()\n" ) );
 
-        File f1 = fileManager.newFile("rules.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.write(rule2);
-        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'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rules.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rules.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()));
+        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( "String1" );
         ksession.fireAllRules();
         ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
 
         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
-        System.gc();
-        Thread.sleep(2000);
+        fileManager.write( "rules.drl",
+                            createLhsRule( new String[]{"rule1", "rule3"},
+                                           "String()\n" ) );
 
-        String rule3 = this.createCommonRule("rule3");
+        scan( kagent );
 
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.write(rule3);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
         // Use the same session for incremental build test
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
+        ksession.insert( "String2" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule3"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule3" ) );
 
-        kagent.monitorResourceChangeEvents(false);
+        ksession.dispose();
+        kagent.dispose();
     }
 
-
     public void testMultipleRulesOnFilesUrlIncremental() throws Exception {
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
 
-        String rule1 = "";
-        rule1 += "rule rule1\n";
-        rule1 += "when\n";
-        rule1 += "then\n";
-        rule1 += "list.add( drools.getRule().getName() );\n";
-        rule1 += "end\n\n";
+        File f1 = fileManager.write( "rules1.drl",
+                                     createLhsRule( new String[]{"rule1", "rule2"},
+                                                    "String()\n" ) );
 
+        fileManager.write( "rules2.drl",
+                           createLhsRule( "rule3",
+                                          "String()\n" ) );
 
-        String rule2 = "";
-        rule2 += "rule rule2\n";
-        rule2 += "when\n";
-        rule2 += "then\n";
-        rule2 += "list.add( drools.getRule().getName());\n";
-        rule2 += "end\n";
-
-        String rule3 = "";
-        rule3 += "rule rule3\n";
-        rule3 += "when\n";
-        rule3 += "then\n";
-        rule3 += "list.add( drools.getRule().getName());\n";
-        rule3 += "end\n";
-
-        String rule4 = "";
-        rule4 += "rule rule4\n";
-        rule4 += "when\n";
-        rule4 += "then\n";
-        rule4 += "list.add( drools.getRule().getName());\n";
-        rule4 += "end\n";
-
-        String rule5 = "";
-        rule5 += "rule rule5\n";
-        rule5 += "when\n";
-        rule5 += "then\n";
-        rule5 += "list.add( drools.getRule().getName());\n";
-        rule5 += "end\n";
-
-        File f1 = fileManager.newFile("rules1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.write(rule2);
-        output.close();
-
-        File f2 = fileManager.newFile("rules2.drl");
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule3);
-        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'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rules1.drl' type='DRL' />";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rules2.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rules1.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rules2.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();
 
-        ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
-        sconf.setProperty("drools.resource.scanner.interval", "2");
-        ResourceFactory.getResourceChangeScannerService().configure(sconf);
+        KnowledgeAgent kagent = createKAgent( kbase,
+                                              false );
 
-        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);
+        applyChangeSet( kagent,
+                        ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
-        assertEquals("test agent", kagent.getName());
-
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        FactHandle h1 = ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3"));
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
 
         list.clear();
+        fileManager.write( "rules2.drl",
+                           createLhsRule( "rule4",
+                                          "String()\n" ) );
+        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
-        System.gc();
-        Thread.sleep(2000);
-
-
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule4);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
         // Use the same session for incremental build test
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
+        // Fact is still there, so should match against latest new rule
         ksession.fireAllRules();
-        ksession.dispose();
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule4" ) );
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule4"));
-
         list.clear();
+        ksession.retract( h1 );
 
-        // 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
-        System.gc();
-        Thread.sleep(2000);
+        ksession.insert( "String2" );
+        ksession.fireAllRules();
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule4" ) );
 
+        list.clear();
+        fileManager.write( "rules1.drl",
+                           createLhsRule( new String[]{"rule1", "rule5"},
+                                          "String()\n" ) );
+        scan( kagent );
 
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.write(rule5);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-
-        // Use the same session for incremental build test
-        ksession = kbase.newStatefulKnowledgeSession();
-        ksession.setGlobal("list", list);
+        // Fact is still there, so should match against latest new rule        
         ksession.fireAllRules();
-        ksession.dispose();
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule5" ) );
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule5"));
-        assertTrue(list.contains("rule4"));
-
+        ksession.retract( h1 );
         list.clear();
 
-        kagent.monitorResourceChangeEvents(false);
+        ksession.insert( "String3" );
+        ksession.fireAllRules();
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule5" ) );
+        assertTrue( list.contains( "rule4" ) );
+
+        ksession.dispose();
+        kagent.dispose();
     }
 
-
     public void testModifyPackageUrlIncremental() throws Exception {
 
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-        
-        String rule1 = header + this.createCommonRule("rule1");
-
-        String rule2 = header + this.createCommonRule("rule2");
-
         // Put just Rule1 in the first package
-        File pkg1 = fileManager.newFile("pkg1.pkg");
+        File pkg1 = fileManager.newFile( "pkg1.pkg" );
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule1",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         KnowledgePackage pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg, pkg1);
+        writePackage( pkg,
+                      pkg1 );
 
         String xml = "";
         xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
         xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/pkg1.pkg' type='PKG' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/pkg1.pkg' type='PKG' />";
         xml += "    </add> ";
         xml += "</change-set>";
-        File fxml = fileManager.newFile("changeset.xml");
-        Writer output = new BufferedWriter(new FileWriter(fxml));
-        output.write(xml);
-        output.close();
+        File fxml = fileManager.write( "changeset.xml",
+                                       xml );
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        KnowledgeAgent kagent = createKAgent( kbase,
+                                              false );
+        applyChangeSet( kagent,
+                        ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
-        KnowledgeAgent kagent = this.createKAgent(kbase);
-
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(1, list.size());
-        assertTrue(list.contains("rule1"));
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
 
         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
-        System.gc();
-        Thread.sleep(2000);
-
-        String rule3 = header+this.createCommonRule("rule3");
-
         kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule3.getBytes()),
-                ResourceType.DRL);
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule3",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule2",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg, pkg1);
-        System.gc();
-        Thread.sleep(3000);
+        writePackage( pkg,
+                      pkg1 );
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        scan( kagent );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule3" ) );
+        assertTrue( list.contains( "rule2" ) );
 
-        assertTrue(list.contains("rule3"));
-        assertTrue(list.contains("rule2"));
-        kagent.monitorResourceChangeEvents(false);
+        list.clear();
+        ksession.insert( "String2" );
+        ksession.fireAllRules();
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule3" ) );
+        assertTrue( list.contains( "rule2" ) );
+
+        ksession.dispose();
+        kagent.dispose();
     }
 
-    public void testUpdatePackageUrlIncremental() throws Exception {
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-        
-        String rule1 = header + this.createCommonRule("rule1");
+    public void FIXME_testUpdatePackageUrlIncremental() throws Exception {
 
-        String rule2 = header + this.createCommonRule("rule2");
-
         // Add Rule1 and Rule2 in the first package
-        File pkg1 = fileManager.newFile("pkg1.pkg");
+        File pkg1 = fileManager.newFile( "pkg1.pkg" );
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
-                ResourceType.DRL);
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule1",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule2",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         KnowledgePackage pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg, pkg1);
+        writePackage( pkg,
+                      pkg1 );
 
         String xml = "";
         xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
         xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/pkg1.pkg' type='PKG' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/pkg1.pkg' type='PKG' />";
         xml += "    </add> ";
         xml += "</change-set>";
-        File fxml = fileManager.newFile("changeset.xml");
-        Writer 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()));
+        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
 
         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
-        System.gc();
-        Thread.sleep(2000);
-
-        String rule3 = header + this.createCommonRule("rule3");
-
         kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
-                ResourceType.DRL);
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule3.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createDefaultRule( "rule2" ).getBytes() ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newByteArrayResource( createDefaultRule( "rule3" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg, pkg1);
-        System.gc();
-        Thread.sleep(3000);
+        writePackage( pkg,
+                      pkg1 );
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        scan( kagent );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
+        // !!! MDP rule2 is not new, it should not have fired
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule3" ) );
 
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3"));
-        kagent.monitorResourceChangeEvents(false);
+        list.clear();
+        ksession.insert( "String2" );
+        ksession.fireAllRules();
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
+        ksession.dispose();
+        kagent.dispose();
     }
 
-
     public void testUpdatePackageUrlOverwriteIncremental() throws Exception {
 
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-        
-        String rule1 = header + this.createCommonRule("rule1");
-
-        String rule1v2 = header + this.createCommonRule("rule1","2");
-
-        String rule2 = header + this.createCommonRule("rule2");
-
-        String rule3 = header + this.createCommonRule("rule3");
-
         // Add Rule1 and Rule2 in the first package
-        File pkgF1 = fileManager.newFile("pkg1.pkg");
+        File pkgF1 = fileManager.newFile( "pkg1.pkg" );
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
-                ResourceType.DRL);
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule1",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule2",
+                                                                           "String()\n" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         KnowledgePackage pkg1 = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg1, pkgF1);
+        writePackage( pkg1,
+                      pkgF1 );
 
         // Add Rule3 in the second package
-        File pkgF2 = fileManager.newFile("pkg2.pkg");
+        File pkgF2 = fileManager.newFile( "pkg2.pkg" );
         kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule3.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createDefaultRule( "rule3" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         KnowledgePackage pkg2 = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg2, pkgF2);
+        writePackage( pkg2,
+                      pkgF2 );
 
         String xml = "";
         xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
         xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/pkg1.pkg' type='PKG' />";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/pkg2.pkg' type='PKG' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/pkg1.pkg' type='PKG' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/pkg2.pkg' type='PKG' />";
         xml += "    </add> ";
         xml += "</change-set>";
-        File fxml = fileManager.newFile("changeset.xml");
-        Writer 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,
+                                                   false );
 
-        KnowledgeAgent kagent = this.createKAgent(kbase);
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+        applyChangeSet( kagent,
+                        ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
-        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        FactHandle h1 = ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3"));
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
 
         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
-        System.gc();
-        Thread.sleep(2000);
-
         kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newByteArrayResource(rule1v2.getBytes()),
-                ResourceType.DRL);
-        if (kbuilder.hasErrors()) {
-            fail(kbuilder.getErrors().toString());
+        kbuilder.add( ResourceFactory.newByteArrayResource( createVersionedRule( null,
+                                                                                 new String[]{"rule1"},
+                                                                                 null,
+                                                                                 "String()",
+                                                                                 "2" ).getBytes() ),
+                      ResourceType.DRL );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
         }
         pkg2 = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
-        writePackage(pkg2, pkgF2);
-        System.gc();
-        Thread.sleep(3000);
+        writePackage( pkg2,
+                      pkgF2 );
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        scan( kagent );
+
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V2" ) );
+        list.clear();
 
-        assertTrue(list.contains("rule1-V2"));
-        assertTrue(list.contains("rule2"));
-        kagent.monitorResourceChangeEvents(false);
-    }
+        ksession.retract( h1 );
+        ksession.insert( "String2" );
 
+        ksession.fireAllRules();
 
-    public void testCompleteRuleScenario() throws Exception {
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
+        assertEquals( 2,
+                      list.size() );
 
-        String rule1 = this.createCommonRule("rule1");
-        String rule1V2 = this.createCommonRule("rule1", "2");
-        String rule1V3 = this.createCommonRule("rule1", "3");
-        String rule2 = this.createCommonRule("rule2");
-        String rule3 = this.createCommonRule("rule3");
-        String rule3V2 = this.createCommonRule("rule3","2");
-        String rule4 = this.createCommonRule("rule4");
+        assertTrue( list.contains( "rule1-V2" ) );
+        assertTrue( list.contains( "rule2" ) );
 
+        ksession.dispose();
+        kagent.dispose();
+    }
 
-        File f1 = fileManager.newFile("rule1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.write(rule2);
-        output.close();
+    public void FIXME_testCompleteRuleScenario() throws Exception {
+        File f1 = fileManager.write( "rule1.drl",
+                                     createLhsRule( new String[]{"rule1", "rule2"},
+                                                    "String()\n" ) );
 
-        File f2 = fileManager.newFile("rule2.drl");
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule3);
-        output.close();
+        File f2 = fileManager.write( "rule2.drl",
+                                     createLhsRule( "rule3",
+                                                    "String()\n" ) );
 
-        File f3 = fileManager.newFile("rule3.drl");
-        output = new BufferedWriter(new FileWriter(f3));
-        output.write(header);
-        output.write(rule1V2);
-        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'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule2.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule1.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule2.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);
-
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
+        KnowledgeAgent kagent = this.createKAgent( kbase,
+                                                   false );
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        FactHandle h1 = ksession.insert( "String1" );
 
+        applyChangeSet( kagent,
+                        ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1"));
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3"));
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule1" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
 
         list.clear();
 
+        File f3 = fileManager.write( "rule3.drl",
+                                     createVersionedRule( null,
+                                                          new String[]{"rule1"},
+                                                          null,
+                                                          "String()\n",
+                                                          "2" ) );
         xml = "";
         xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
         xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule3.drl' type='DRL' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rule3.drl' type='DRL' />";
         xml += "    </add> ";
         xml += "</change-set>";
+        fxml = fileManager.write( "changeset.xml",
+                                      xml );
 
-        fxml = fileManager.newFile("changeset.xml");
-        output = new BufferedWriter(new FileWriter(fxml));
-        output.write(xml);
-        output.close();
+        applyChangeSet( kagent,
+                        ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+        // Check as a result of old data against new rules
+        ksession.fireAllRules();
+        assertEquals( 1,
+                      list.size() );
+        
+        assertTrue( list.contains( "rule1-V2" ) );
+        list.clear();
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        // Check all rules are still there with new data
+        ksession.retract( h1 );
+        h1 = ksession.insert( "String2" );
         ksession.fireAllRules();
-        ksession.dispose();
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V2" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
+        list.clear();
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1-V2"));
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3"));
+        f2 = fileManager.write( "rule2.drl",
+                                createLhsRule( new String[]{"rule3",
+                                                            "rule4"},
+                                               "String()\n" ) );
+        scan( kagent );
 
+        // Check as a result of old data against new rules
+        ksession.fireAllRules();
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule4" ) );
+        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
-        System.gc();
-        Thread.sleep(2000);
-
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule3);
-        output.write(rule4);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        // Check all rules are still there with new data
+        ksession.retract( h1 );
+        h1 = ksession.insert( "String3" );
         ksession.fireAllRules();
-        ksession.dispose();
+        assertEquals( 4,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V2" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
+        assertTrue( list.contains( "rule4" ) );
+        list.clear();
 
-        assertEquals(4, list.size());
-        assertTrue(list.contains("rule1-V2"));
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3"));
-        assertTrue(list.contains("rule4"));
+        f3 = fileManager.write( "rule3.drl",
+                                createVersionedRule( null,
+                                                     new String[]{"rule3"},
+                                                     null,
+                                                     "String()",
+                                                     "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
-        System.gc();
-        Thread.sleep(2000);
+        // Check as a result of old data against new rules
+        ksession.fireAllRules();
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "rule3-V2" ) );
+        list.clear();
 
-        //removes rule1 from rules3.drl and add a new definition for rule3 in that file
-        output = new BufferedWriter(new FileWriter(f3));
-        output.write(header);
-        output.write(rule3V2);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
+        // !!! MDP this logic is wrong rule3 and rule3-v2 should both exist
+        //     rule3 is in rule2.drl and rule3-V2 is in rules3.drl
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        // Check all rules are still there with new data
+        ksession.retract( h1 );
+        h1 = ksession.insert( "String4" );
         ksession.fireAllRules();
-        ksession.dispose();
+        assertEquals( 3,
+                      list.size() );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3-V2" ) );
+        assertTrue( list.contains( "rule4" ) );
+        list.clear();
 
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule3-V2"));
-        assertTrue(list.contains("rule4"));
+        this.fileManager.deleteFile( f3 );
+        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
-        System.gc();
-        Thread.sleep(2000);
-
-        //removes rule3 from rules3.drl
-        output = new BufferedWriter(new FileWriter(f3));
-        output.write(header);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        // Check remaining rules are still there with new data
+        ksession.retract( h1 );
+        h1 = ksession.insert( "String5" );
         ksession.fireAllRules();
-        ksession.dispose();
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule4" ) );
+        list.clear();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule4"));
+        String str = createHeader( "org.drools.test" ) +
+                     createVersionedRule( false,
+                                          null,
+                                          new String[]{"rule1"},
+                                          null,
+                                          "String()\n",
+                                          "3" ) +
+                     createVersionedRule( false,
+                                          null,
+                                          new String[]{"rule3", "rule4"},
+                                          null,
+                                          "String()\n",
+                                          null );
 
-        // 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
-        System.gc();
-        Thread.sleep(2000);
+        System.out.println( str );
 
-        //removes rule3 from rules3.drl
-        f3.delete();
-        System.gc();
-        Thread.sleep(3000);
+        f2 = fileManager.write( "rule2.drl",
+                                str );
+        scan( kagent );
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(2, list.size());
-        assertTrue(list.contains("rule2"));
-        assertTrue(list.contains("rule4"));
+        System.out.println( list );
 
+        // MDP the logic from this point is wrong. Rule3 was removed when added, so it should be in the list
 
-        // 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
-        System.gc();
-        Thread.sleep(2000);
-
-        //adds rules1-V3 definition to rules2.drl
-        output = new BufferedWriter(new FileWriter(f2));
-        output.write(header);
-        output.write(rule1V3);
-        output.write(rule3);
-        output.write(rule4);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        //        File f3 = fileManager.write( "rule3.drl",
+        //                                     createVersionedRule( null,
+        //                                                          new String[]{"rule1"},
+        //                                                          null,
+        //                                                          "String()\n",
+        //                                                          "2" ) );
+        //    
+        //            //adds rules1-V3 definition to rules2.drl
+        //            output = new BufferedWriter(new FileWriter(f2));
+        //            output.write(header);
+        //            output.write(rule1V3);
+        //            output.write(rule3);
+        //            output.write(rule4);
+        //            output.close();
+        //            System.gc();
+        //            Thread.sleep(3000);
+        //    
+        //            ksession = kbase.newStatefulKnowledgeSession();
+        //            list = new ArrayList<String>();
+        //            ksession.setGlobal("list", list);
+        //            ksession.fireAllRules();
+        //            ksession.dispose();
+        //    
+        assertEquals( 2,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V3" ) );
+        assertTrue( list.contains( "rule3" ) );
+        list.clear();
+        
+        ksession.retract( h1 );
+        h1 = ksession.insert( "String5" );    
         ksession.fireAllRules();
-        ksession.dispose();
-
-        assertEquals(3, list.size());
-        assertTrue(list.contains("rule1-V3"));
-        assertTrue(list.contains("rule2"));
+        
         //rule3 doesn't reapear because it was not modified in the resource
         //assertTrue(list.contains("rule3"));
-        assertTrue(list.contains("rule4"));
+        
+        
+        assertEquals( 4,
+                      list.size() );
+        assertTrue( list.contains( "rule1-V3" ) );
+        assertTrue( list.contains( "rule2" ) );
+        assertTrue( list.contains( "rule3" ) );
+        assertTrue( list.contains( "rule4" ) );
+        //    
+        //            kagent.monitorResourceChangeEvents(false);
+        ksession.dispose();
+        kagent.dispose();
 
-        kagent.monitorResourceChangeEvents(false);
-
     }
 
-
-
-    public void testAddModifyFunctionIncremental() throws Exception {
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-
-
-        StringBuilder sb = new StringBuilder();
-        sb.append("rule rule1 \n");
-        sb.append("when\n");
-        sb.append("then\n");
-        sb.append("function1 (list,\"rule1\");\n");
-        sb.append("end\n");
-
-        String rule1 = sb.toString();
-
-        File f1 = fileManager.newFile("rule1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(rule1);
-        output.close();
-
+    public void FIXME_testAddModifyFunctionIncremental() throws Exception {
+        File f1 = fileManager.write( "rule1.drl",
+                                     createCustomRule( true, null, new String[] { "rule1" },
+                                                       null, "String()\n", "function1 (list,drools.getRule().getName());\n") );
+        
         String xml = "";
         xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
         xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
         xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
         xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
+        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()));
+        try {
+            applyChangeSet( kagent,
+                            ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+            fail( "Knowledge should fail to compile" );
+        } catch (Exception e) {
+            
+        }
+        KnowledgePackage knowledgePackage = kbase.getKnowledgePackage( "org.drools.test" );
 
-
-        KnowledgePackage knowledgePackage = kbase.getKnowledgePackage("org.drools.test");
-
         //the resource didn't compile because function1 doesn't exist
-        assertNull(knowledgePackage);
+        assertNull( knowledgePackage );
 
-        // 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
-        System.gc();
-        Thread.sleep(2000);
-
         //we are going to add function1 now
-        String function1 = this.createCommonFunction("function1", "function1");
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(function1);
-        output.write(rule1);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
+        String function1 = this.createCommonFunction( "function1",
+                                                      "function1" );
+        fileManager.write( "rule1.drl",
+                           function1 +
+                           createCustomRule( false, null, new String[] { "rule1" },
+                                             null, "String()\n", "function1 (list, drools.getRule().getName());\n") );
+        scan( kagent );
 
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( "String1" );
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(1, list.size());
-        assertTrue(list.contains("function1 from rule1"));
+        assertEquals( 1,
+                      list.size() );
+        assertTrue( list.contains( "function1 from rule1" ) );
+        list.clear();
 
+        String function2 = this.createCommonFunction( "function1",
+                                                      "function1-V2" );
+        fileManager.write( "rule1.drl",
+                           function2 +
+                           createCustomRule( false, null, new String[] { "rule1" },
+                                             null, "String()\n", "function1 (list, drools.getRule().getName());\n") );        
+        
         //we are going to modify the definition of function1()
-        // 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);
-
         //we are going to modify function1 now
-        String function1V2 = this.createCommonFunction("function1", "function1-V2");
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(function1V2);
-        output.write(rule1);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
+        scan( kagent );
 
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
         ksession.fireAllRules();
-        ksession.dispose();
 
-        assertEquals(1, list.size());
-        assertTrue(list.contains("function1-V2 from rule1"));
-
-        kagent.monitorResourceChangeEvents(false);
-    }
-
-
-    public void testAddModifyQueryIncremental() throws Exception {
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "global java.util.List list\n\n";
-
-
-        String query1 = "";
-        query1 += "query \"all the Strings\"\n";
-        query1 += "     $strings : String()\n";
-        query1 += "end\n";
-
-        String rule1 = this.createCommonRule("rule1");
-
-        File f1 = fileManager.newFile("rule1.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        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'";
-        xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
-        xml += "    <add> ";
-        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();
-
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        KnowledgeAgent kagent = this.createKAgent(kbase);
-
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
-
-        KnowledgePackage knowledgePackage = kbase.getKnowledgePackage("org.drools.test");
-
-        assertNotNull(knowledgePackage);
-
-        Rule allTheStringsQuery = ((KnowledgePackageImp) knowledgePackage).getRule("all the Strings");
-
-        assertNull(allTheStringsQuery);
-
-        // 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
-        System.gc();
-        Thread.sleep(2000);
-
-        //we are going to add the query now
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(query1);
-        output.write(rule1);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-        List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
-        ksession.insert("Some String");
-        ksession.insert("Some Other String");
-
-        QueryResults queryResults = ksession.getQueryResults("all the Strings");
-
-        ksession.dispose();
-
-
-        assertEquals(2, queryResults.size());
-
-        Iterator<QueryResultsRow> iterator = queryResults.iterator();
-        while (iterator.hasNext()){
-            System.out.println("Row= "+iterator.next().get("$strings"));
-        }
-
-        //we are going to modify the query definition
-        // 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
-        System.gc();
-        Thread.sleep(2000);
-
-        //we are going to add function1 now
-        String query1V2 = "";
-        query1V2 += "query \"all the Strings\"\n";
-        query1V2 += "     $strings : String(this == \"Some String\")\n";
-        query1V2 += "end\n";
-
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(query1V2);
-        output.write(rule1);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-        ksession = kbase.newStatefulKnowledgeSession();
-        list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
-        ksession.insert("Some String");
-        ksession.insert("Some Other String");
-
-        queryResults = ksession.getQueryResults("all the Strings");
-
-        ksession.dispose();
-
-
-        assertEquals(1, queryResults.size());
-        assertEquals("Some String",queryResults.iterator().next().get("$strings"));
-
-        kagent.monitorResourceChangeEvents(false);
-    }
-
-    public void testStatefulSessionReuse() throws Exception {
-
-        String header = "";
-        header += "package org.drools.test\n";
-        header += "import org.drools.Person\n";
-        header += "global java.util.List list\n\n";
-
-        Person john = new Person("John");
-        Person peter = new Person("Peter");
-
-        String ruleJohn =  this.createPatternRule("ruleJohn","Person(name==\"John\")\n");
-        String rulePeter =  this.createPatternRule("rulePeter","Person(name==\"Peter\")\n");
-        String ruleJohnPeter =  this.createPatternRule("ruleJohnPeter","Person(name==\"John\")\nPerson(name==\"Peter\")\n");
-        String ruleTmp =  this.createCommonRule("ruleTmp");
-
-        File f1 = fileManager.newFile("rules.drl");
-        Writer output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(ruleJohn);
-        output.write(rulePeter);
-        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'";
-        xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
-        xml += "    <add> ";
-        xml += "        <resource source='http://localhost:"+this.getPort()+"/rules.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();
-
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        KnowledgeAgent kagent = this.createKAgent(kbase);
-
-        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
-
-        StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
-        List<String> list = new ArrayList<String>();
-        ksession.setGlobal("list", list);
-
-        ksession.insert(john);
-
+        // Rule 1 already existed as is, so should not cause data propagation
+        assertEquals( 0,
+                      list.size() );
+        
+        ksession.insert( "String1" );
         ksession.fireAllRules();
+        
+        assertEquals( 1,
+                      list.size() );
+        
+        System.out.println( list );
+        assertTrue( list.contains( "function1-V2 from rule1" ) );
 
-        assertEquals(1, list.size());
-        assertTrue(list.contains("ruleJohn"));
-
-        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
-        System.gc();
-        Thread.sleep(2000);
-
-        output = new BufferedWriter(new FileWriter(f1));
-        output.write(header);
-        output.write(ruleJohn);
-        output.write(rulePeter);
-        output.write(ruleJohnPeter);
-        output.write(ruleTmp);
-        output.close();
-        System.gc();
-        Thread.sleep(3000);
-
-        list.clear();
-
-        // Use the same session for incremental build test
-        // ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
-        //ksession.setGlobal("list", list);
-        ksession.insert(peter);
-
-        ksession.fireAllRules();
         ksession.dispose();
-
-        assertEquals(3, list.size());
-
-        //becuase we inserted a peter
-        assertTrue(list.contains("rulePeter"));
-        //there was already a john. Even after the rule exists in kbase
-        assertTrue(list.contains("ruleJohnPeter"));
-        assertTrue(list.contains("ruleTmp"));
-        kagent.monitorResourceChangeEvents(false);
+        kagent.dispose();
     }
 
-    private static void writePackage(Object pkg, File p1file)
-            throws IOException, FileNotFoundException {
-        FileOutputStream out = new FileOutputStream(p1file);
-        try {
-            DroolsStreamUtils.streamOut(out, pkg);
-        } finally {
-            out.close();
-        }
-    }
+    //    public void testAddModifyQueryIncremental() throws Exception {
+    //        String header = "";
+    //        header += "package org.drools.test\n";
+    //        header += "global java.util.List list\n\n";
+    //
+    //
+    //        String query1 = "";
+    //        query1 += "query \"all the Strings\"\n";
+    //        query1 += "     $strings : String()\n";
+    //        query1 += "end\n";
+    //
+    //        String rule1 = this.createCommonRule("rule1");
+    //
+    //        File f1 = fileManager.newFile("rule1.drl");
+    //        Writer output = new BufferedWriter(new FileWriter(f1));
+    //        output.write(header);
+    //        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'";
+    //        xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
+    //        xml += "    <add> ";
+    //        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();
+    //
+    //        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+    //        KnowledgeAgent kagent = this.createKAgent(kbase);
+    //
+    //        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+    //
+    //
+    //        KnowledgePackage knowledgePackage = kbase.getKnowledgePackage("org.drools.test");
+    //
+    //        assertNotNull(knowledgePackage);
+    //
+    //        Rule allTheStringsQuery = ((KnowledgePackageImp) knowledgePackage).getRule("all the Strings");
+    //
+    //        assertNull(allTheStringsQuery);
+    //
+    //        // 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
+    //        System.gc();
+    //        Thread.sleep(2000);
+    //
+    //        //we are going to add the query now
+    //        output = new BufferedWriter(new FileWriter(f1));
+    //        output.write(header);
+    //        output.write(query1);
+    //        output.write(rule1);
+    //        output.close();
+    //        System.gc();
+    //        Thread.sleep(3000);
+    //
+    //        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+    //        List<String> list = new ArrayList<String>();
+    //        ksession.setGlobal("list", list);
+    //        ksession.insert("Some String");
+    //        ksession.insert("Some Other String");
+    //
+    //        QueryResults queryResults = ksession.getQueryResults("all the Strings");
+    //
+    //        ksession.dispose();
+    //
+    //
+    //        assertEquals(2, queryResults.size());
+    //
+    //        Iterator<QueryResultsRow> iterator = queryResults.iterator();
+    //        while (iterator.hasNext()){
+    //            System.out.println("Row= "+iterator.next().get("$strings"));
+    //        }
+    //
+    //        //we are going to modify the query definition
+    //        // 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
+    //        System.gc();
+    //        Thread.sleep(2000);
+    //
+    //        //we are going to add function1 now
+    //        String query1V2 = "";
+    //        query1V2 += "query \"all the Strings\"\n";
+    //        query1V2 += "     $strings : String(this == \"Some String\")\n";
+    //        query1V2 += "end\n";
+    //
+    //        output = new BufferedWriter(new FileWriter(f1));
+    //        output.write(header);
+    //        output.write(query1V2);
+    //        output.write(rule1);
+    //        output.close();
+    //        System.gc();
+    //        Thread.sleep(3000);
+    //
+    //        ksession = kbase.newStatefulKnowledgeSession();
+    //        list = new ArrayList<String>();
+    //        ksession.setGlobal("list", list);
+    //        ksession.insert("Some String");
+    //        ksession.insert("Some Other String");
+    //
+    //        queryResults = ksession.getQueryResults("all the Strings");
+    //
+    //        ksession.dispose();
+    //
+    //
+    //        assertEquals(1, queryResults.size());
+    //        assertEquals("Some String",queryResults.iterator().next().get("$strings"));
+    //
+    //        kagent.monitorResourceChangeEvents(false);
+    //    }
+    //
+    //    public void testStatefulSessionReuse() throws Exception {
+    //
+    //        String header = "";
+    //        header += "package org.drools.test\n";
+    //        header += "import org.drools.Person\n";
+    //        header += "global java.util.List list\n\n";
+    //
+    //        Person john = new Person("John");
+    //        Person peter = new Person("Peter");
+    //
+    //        String ruleJohn =  this.createPatternRule("ruleJohn","Person(name==\"John\")\n");
+    //        String rulePeter =  this.createPatternRule("rulePeter","Person(name==\"Peter\")\n");
+    //        String ruleJohnPeter =  this.createPatternRule("ruleJohnPeter","Person(name==\"John\")\nPerson(name==\"Peter\")\n");
+    //        String ruleTmp =  this.createCommonRule("ruleTmp");
+    //
+    //        File f1 = fileManager.newFile("rules.drl");
+    //        Writer output = new BufferedWriter(new FileWriter(f1));
+    //        output.write(header);
+    //        output.write(ruleJohn);
+    //        output.write(rulePeter);
+    //        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'";
+    //        xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
+    //        xml += "    <add> ";
+    //        xml += "        <resource source='http://localhost:"+this.getPort()+"/rules.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();
+    //
+    //        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+    //        KnowledgeAgent kagent = this.createKAgent(kbase);
+    //
+    //        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+    //
+    //        StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+    //        List<String> list = new ArrayList<String>();
+    //        ksession.setGlobal("list", list);
+    //
+    //        ksession.insert(john);
+    //
+    //        ksession.fireAllRules();
+    //
+    //        assertEquals(1, list.size());
+    //        assertTrue(list.contains("ruleJohn"));
+    //
+    //        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
+    //        System.gc();
+    //        Thread.sleep(2000);
+    //
+    //        output = new BufferedWriter(new FileWriter(f1));
+    //        output.write(header);
+    //        output.write(ruleJohn);
+    //        output.write(rulePeter);
+    //        output.write(ruleJohnPeter);
+    //        output.write(ruleTmp);
+    //        output.close();
+    //        System.gc();
+    //        Thread.sleep(3000);
+    //
+    //        list.clear();
+    //
+    //        // Use the same session for incremental build test
+    //        // ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+    //        //ksession.setGlobal("list", list);
+    //        ksession.insert(peter);
+    //
+    //        ksession.fireAllRules();
+    //        ksession.dispose();
+    //
+    //        assertEquals(3, list.size());
+    //
+    //        //becuase we inserted a peter
+    //        assertTrue(list.contains("rulePeter"));
+    //        //there was already a john. Even after the rule exists in kbase
+    //        assertTrue(list.contains("ruleJohnPeter"));
+    //        assertTrue(list.contains("ruleTmp"));
+    //        kagent.monitorResourceChangeEvents(false);
+    //    }
 
-
-    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 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 String\n");
-        sb.append("then\n");
-        sb.append("add rule's name to list;\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();
-    }
-
-    private String createPatternRule(String ruleName,String patterns) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("rule ");
-        sb.append(ruleName);
-        sb.append("\n");
-        sb.append("when\n");
-        if (patterns != null){
-            sb.append(patterns);
-        }
-        sb.append("then\n");
-        sb.append("list.add( drools.getRule().getName() );\n");
-        sb.append("end\n");
-
-        return sb.toString();
-    }
-
-    private String createCommonFunction(String functionName, String valueToAdd) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("function void  ");
-        sb.append(functionName);
-        sb.append("(java.util.List myList,String source){\n");
-        sb.append(" myList.add(\"");
-        sb.append(valueToAdd);
-        sb.append(" from \"+source);\n");
-        sb.append("}\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-13 01:57:15 UTC (rev 36383)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java	2010-12-13 02:06:35 UTC (rev 36384)
@@ -1,18 +1,12 @@
 package org.drools.agent;
 
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 
-import junit.framework.TestCase;
-
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.builder.KnowledgeBuilder;
@@ -20,27 +14,10 @@
 import org.drools.builder.ResourceType;
 import org.drools.builder.impl.KnowledgeBuilderImpl;
 import org.drools.command.runtime.rule.InsertObjectCommand;
-import org.drools.core.util.DroolsStreamUtils;
-import org.drools.core.util.FileManager;
-import org.drools.core.util.IoUtils;
 import org.drools.definition.KnowledgePackage;
-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.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.handler.ResourceHandler;
 
 public class KnowledgeAgentTest extends BaseKnowledgeAgentTest {
 
@@ -70,7 +47,7 @@
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         KnowledgeAgent kagent = createKAgent( kbase );
 
-        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+        applyChangeSet( kagent, ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
@@ -145,7 +122,7 @@
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         KnowledgeAgent kagent = this.createKAgent( kbase );
 
-        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxm2.toURI().toURL() ) );
+        applyChangeSet( kagent, ResourceFactory.newUrlResource( fxm2.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
@@ -204,7 +181,7 @@
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         KnowledgeAgent kagent = this.createKAgent( kbase );
 
-        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+        applyChangeSet( kagent, ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatelessKnowledgeSession ksession = kagent.newStatelessKnowledgeSession();
         List<String> list = new ArrayList<String>();
@@ -266,7 +243,7 @@
 
         KnowledgeAgent kagent = this.createKAgent( kbase );
 
-        kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+        applyChangeSet( kagent, ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
 
         StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();
@@ -351,9 +328,9 @@
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
 
-        KnowledgeAgent kagent = this.createKAgent( kbase );
+        KnowledgeAgent kagent = this.createKAgent( kbase, false );
 
-        kagent.applyChangeSet( ResourceFactory.newByteArrayResource( xml.getBytes() ) );
+        applyChangeSet( kagent, ResourceFactory.newByteArrayResource( xml.getBytes() )  );
 
         StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
         List<String> list = new ArrayList<String>();



More information about the jboss-svn-commits mailing list