[jboss-svn-commits] JBL Code SVN: r18324 - in labs/jbossrules/trunk/drools-compiler/src/test: resources/org/drools/integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 5 15:03:04 EST 2008


Author: tirelli
Date: 2008-02-05 15:03:03 -0500 (Tue, 05 Feb 2008)
New Revision: 18324

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultithreadFiringCheck.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java
Log:
JBRULES-1392: adding multithread test case

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java	2008-02-05 19:37:03 UTC (rev 18323)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java	2008-02-05 20:03:03 UTC (rev 18324)
@@ -19,6 +19,12 @@
 package org.drools.integrationtests;
 
 import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Queue;
+import java.util.concurrent.ConcurrentLinkedQueue;
 
 import junit.framework.TestCase;
 
@@ -26,9 +32,11 @@
 import org.drools.GrandParent;
 import org.drools.Parent;
 import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
 import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
 
 /**
  * This is a test case for multi-thred issues
@@ -150,4 +158,53 @@
 
     }
 
+    public void testExpectedFires() {
+        try {
+            final PackageBuilder packageBuilder = new PackageBuilder();
+            packageBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadFiringCheck.drl" ) ) );
+            final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+            ruleBase.addPackage( packageBuilder.getPackage() );
+            final Queue errorList = new ConcurrentLinkedQueue();
+            final Thread t[] = new Thread[50];
+            for ( int i = 0; i < t.length; i++ ) {
+                final int count = i;
+                t[i] = new Thread( new Runnable() {
+                    public void run() {
+                        try {
+                            final int iterations = count * 15 + 3000;
+                            final List results = new ArrayList();
+                            final StatefulSession session2 = ruleBase.newStatefulSession();
+                            session2.setGlobal( "results",
+                                                results );
+                            session2.insert( new Integer( -1 ) );
+                            for ( int k = 0; k < iterations; k++ ) {
+                                session2.insert( new Integer( k ) );
+                                if ( k + 1 != session2.getAgenda().agendaSize() ) {
+                                    errorList.add( "THREAD-" + count + " ERROR: expected agenda size=" + (k + 1) + " but was " + session2.getAgenda().agendaSize() );
+                                }
+                            }
+                            session2.fireAllRules();
+                            session2.dispose();
+                            if ( results.size() != iterations ) {
+                                errorList.add( "THREAD-" + count + " ERROR: expected fire count=" + iterations + " but was " + results.size() );
+                            }
+                        } catch ( Exception e ) {
+                            errorList.add( "THREAD-" + count + " EXCEPTION: " + e.getMessage() );
+                            e.printStackTrace();
+                        }
+                    }
+                } );
+                t[i].start();
+            }
+            for ( int i = 0; i < t.length; i++ ) {
+                t[i].join();
+            }
+            assertTrue( "Errors during execution: " + errorList.toString(),
+                        errorList.isEmpty() );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            fail( "No exception should have been raised: "+e.getMessage());
+        }
+    }
+
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultithreadFiringCheck.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultithreadFiringCheck.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultithreadFiringCheck.drl	2008-02-05 20:03:03 UTC (rev 18324)
@@ -0,0 +1,11 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "Should fire"
+when
+    $i1 : Integer( intValue == -1 )
+    $i2 : Integer( intValue > $i1 )
+then
+    results.add( $i2 );
+end




More information about the jboss-svn-commits mailing list