[jboss-svn-commits] JBL Code SVN: r19843 - in labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools: integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 2 22:56:27 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-05-02 22:56:27 -0400 (Fri, 02 May 2008)
New Revision: 19843

Modified:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Alarm.java
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
Log:
JBRULES-1583 Heap and scheduled Activations
-ScheduledActivations should remove themselves from the linkedlist after firing.
-Added Unit test

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Alarm.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Alarm.java	2008-05-03 02:56:20 UTC (rev 19842)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Alarm.java	2008-05-03 02:56:27 UTC (rev 19843)
@@ -2,6 +2,8 @@
 
 public class Alarm {
     private String message;
+    
+    private int number;
 
     public Alarm() {
 
@@ -63,4 +65,15 @@
         this.message = message;
     }
 
+    public int getNumber() {
+        return number;
+    }
+
+    public void setNumber(int number) {
+        this.number = number;
+    }
+    
+    public void incrementNumber() {
+        this.number++;;
+    }    
 }

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2008-05-03 02:56:20 UTC (rev 19842)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2008-05-03 02:56:27 UTC (rev 19843)
@@ -3,12 +3,14 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
+import org.drools.Alarm;
 import org.drools.Cheese;
 import org.drools.FactHandle;
 import org.drools.Person;
@@ -16,6 +18,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
 import org.drools.common.DefaultAgenda;
 import org.drools.common.InternalWorkingMemoryActions;
@@ -450,9 +453,41 @@
 
         // now check for update
         assertEquals( 2,
-                      list.size() );
-
+                      list.size() );       
     }
+    
+    public void testDurationMemoryLeakonRepeatedUpdate() throws Exception {
+        String str = "package org.drools.test\n" +
+        "import org.drools.Alarm\n" +
+        "global java.util.List list;" +
+        "rule \"COMPTEUR\"\n" +
+        "  duration 50\n" +
+        "  when\n" +        
+        "    $alarm : Alarm( number < 5 )\n" +
+        "  then\n" +
+        "    $alarm.incrementNumber();\n" +
+        "    list.add( $alarm );\n" +
+        "    update($alarm);\n" +
+        "end\n";
+        
+        PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new StringReader( str ) );
+        
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( builder.getPackage() );
+        
+        StatefulSession session = ruleBase.newStatefulSession();
+        List list = new ArrayList();
+        session.setGlobal( "list", list );
+        session.insert( new Alarm() );
+        
+        session.fireAllRules();
+        
+        Thread.sleep( 1000 );
+        
+        assertEquals( 5, list.size() );
+        assertEquals(0, session.getAgenda().getScheduledActivations().length );                        
+    }    
 
     public void testUpdateNoLoop() throws Exception {
         // JBRULES-780, throws a NullPointer or infinite loop if there is an issue




More information about the jboss-svn-commits mailing list