[jboss-svn-commits] JBL Code SVN: r33501 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jun 14 18:16:55 EDT 2010
Author: tirelli
Date: 2010-06-14 18:16:55 -0400 (Mon, 14 Jun 2010)
New Revision: 33501
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java
Log:
JBRULES-2375: fixing deadlock on queued actions
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 2010-06-14 22:16:16 UTC (rev 33500)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java 2010-06-14 22:16:55 UTC (rev 33501)
@@ -32,16 +32,33 @@
import org.drools.Cheese;
import org.drools.Child;
import org.drools.GrandParent;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
import org.drools.Order;
import org.drools.Parent;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.StatelessSession;
+import org.drools.StockTick;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
+import org.drools.conf.EventProcessingOption;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.ObjectRetractedEvent;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
import org.drools.rule.Package;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.mockito.Mockito;
+import static org.mockito.Mockito.*;
+
/**
* This is a test case for multi-thred issues
*
@@ -278,7 +295,7 @@
}
public void run() {
- System.out.println( Thread.currentThread().getName() + " starting..." );
+ //System.out.println( Thread.currentThread().getName() + " starting..." );
try {
count.incrementAndGet();
long time = System.currentTimeMillis();
@@ -297,7 +314,7 @@
MultithreadTest.this.notifyAll();
}
}
- System.out.println( Thread.currentThread().getName() + " exiting..." );
+ //System.out.println( Thread.currentThread().getName() + " exiting..." );
}
private Cheese[] getFacts() {
@@ -378,5 +395,64 @@
}
return pkgBuilder.getPackage();
}
+
+ public void testEventExpiration() {
+ String rule =
+ "package org.drools\n" +
+ "declare StockTick @role(event) @expires(0s) end\n" +
+ "rule test no-loop true\n" +
+ "when\n" +
+ " $f : StockTick() from entry-point EntryPoint\n" +
+ "then\n" +
+ " //System.out.println($f);\n" +
+ "end";
+ final StatefulKnowledgeSession session;
+ final WorkingMemoryEntryPoint entryPoint;
+
+ KnowledgeBaseConfiguration kbaseConf = KnowledgeBaseFactory
+ .newKnowledgeBaseConfiguration();
+ kbaseConf.setOption(EventProcessingOption.STREAM);
+
+ KnowledgeBuilder builder = KnowledgeBuilderFactory
+ .newKnowledgeBuilder();
+
+ builder.add(ResourceFactory.newReaderResource(new StringReader(rule)),
+ ResourceType.DRL);
+
+ if (builder.hasErrors()) {
+ throw new RuntimeException(builder.getErrors().toString());
+ }
+
+ final KnowledgeBase knowledgeBase = KnowledgeBaseFactory
+ .newKnowledgeBase(kbaseConf);
+
+ knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());
+
+ session = knowledgeBase.newStatefulKnowledgeSession();
+ WorkingMemoryEventListener wmel = Mockito.mock( WorkingMemoryEventListener.class );
+ session.addEventListener( wmel );
+
+ entryPoint = session
+ .getWorkingMemoryEntryPoint("EntryPoint");
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
+ for (int x = 0; x < 10000; x++) {
+ entryPoint.insert(new StockTick(x, "RHT", 10, 10+x));
+ Thread.yield();
+ }
+
+ session.halt();
+ session.fireAllRules();
+
+ // facts are being expired
+ verify( wmel, atLeastOnce() ).objectRetracted( any( ObjectRetractedEvent.class ) );
+ }
+
+
}
More information about the jboss-svn-commits
mailing list