[jboss-svn-commits] JBL Code SVN: r25594 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Mar 11 11:50:31 EDT 2009
Author: tirelli
Date: 2009-03-11 11:50:31 -0400 (Wed, 11 Mar 2009)
New Revision: 25594
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
Log:
JBRULES-1991: adding test case
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java 2009-03-11 15:38:28 UTC (rev 25593)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java 2009-03-11 15:50:31 UTC (rev 25594)
@@ -14,7 +14,6 @@
import org.drools.common.InternalFactHandle;
import org.drools.compiler.DialectCompiletimeRegistry;
import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.lang.descr.AttributeDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.reteoo.LeftTuple;
@@ -24,24 +23,30 @@
import org.drools.rule.builder.SalienceBuilder;
import org.drools.spi.ObjectType;
import org.drools.spi.PatternExtractor;
+import org.drools.spi.Salience;
public class MVELSalienceBuilderTest extends TestCase {
-
- public void testSimpleExpression() {
+ private InstrumentedBuildContent context;
+ private RuleBase ruleBase;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
- ruleDescr.addAttribute( new AttributeDescr( "salience", "(p.age + 20)/2" ) );
+ ruleDescr.addAttribute( new AttributeDescr( "salience",
+ "(p.age + 20)/2" ) );
ruleDescr.setConsequence( "" );
PackageBuilder pkgBuilder = new PackageBuilder( pkg );
DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry();
- MVELDialect mvelDialect = ( MVELDialect ) dialectRegistry.getDialect( "mvel" );
+ MVELDialect mvelDialect = (MVELDialect) dialectRegistry.getDialect( "mvel" );
- final InstrumentedBuildContent context = new InstrumentedBuildContent( pkgBuilder,
- ruleDescr,
- dialectRegistry,
- pkg,
- mvelDialect );
+ context = new InstrumentedBuildContent( pkgBuilder,
+ ruleDescr,
+ dialectRegistry,
+ pkg,
+ mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
@@ -55,25 +60,124 @@
final Declaration declaration = new Declaration( "p",
extractor,
pattern );
- final Map map = new HashMap();
+ final Map<String, Declaration> map = new HashMap<String, Declaration>();
map.put( "p",
declaration );
declarationResolver.setDeclarations( map );
context.setDeclarationResolver( declarationResolver );
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- final WorkingMemory wm = ruleBase.newStatefulSession();
+ ruleBase = RuleBaseFactory.newRuleBase();
+ SalienceBuilder salienceBuilder = new MVELSalienceBuilder();
+ salienceBuilder.build( context );
- final Person p = new Person("mark", "", 31);
+ ((MVELSalienceExpression) context.getRule().getSalience()).compile( Thread.currentThread().getContextClassLoader() );
+
+ }
+
+ public void testSimpleExpression() {
+ WorkingMemory wm = ruleBase.newStatefulSession();
+
+ final Person p = new Person( "mark",
+ "",
+ 31 );
final InternalFactHandle f0 = (InternalFactHandle) wm.insert( p );
- final LeftTuple tuple = new LeftTuple( f0, null, true );
+ final LeftTuple tuple = new LeftTuple( f0,
+ null,
+ true );
- SalienceBuilder salienceBuilder = new MVELSalienceBuilder();
- salienceBuilder.build( context );
-
- ((MVELSalienceExpression)context.getRule().getSalience()).compile( Thread.currentThread().getContextClassLoader() );
-
- assertEquals( 25, context.getRule().getSalience().getValue( tuple, wm ) );
-
+ assertEquals( 25,
+ context.getRule().getSalience().getValue( tuple,
+ wm ) );
+
}
+
+ public void testMultithreadSalienceExpression() {
+ final int tcount = 10;
+ final SalienceEvaluator[] evals = new SalienceEvaluator[tcount];
+ final Thread[] threads = new Thread[tcount];
+ for ( int i = 0; i < evals.length; i++ ) {
+ evals[i] = new SalienceEvaluator( ruleBase,
+ context.getRule().getSalience(),
+ new Person( "bob" + i,
+ 30 + (i * 3) ) );
+ threads[i] = new Thread( evals[i] );
+ }
+ for ( int i = 0; i < threads.length; i++ ) {
+ threads[i].start();
+ }
+ for ( int i = 0; i < threads.length; i++ ) {
+ try {
+ threads[i].join();
+ } catch ( InterruptedException e ) {
+ e.printStackTrace();
+ }
+ }
+ int errors = 0;
+ for ( int i = 0; i < evals.length; i++ ) {
+ if ( evals[i].isError() ) {
+ errors++;
+ }
+ }
+ assertEquals( "There shouldn't be any threads in error: ",
+ 0,
+ errors );
+
+ }
+
+ public static class SalienceEvaluator
+ implements
+ Runnable {
+ public static final int iterations = 1000;
+
+ private Salience salience;
+ private LeftTuple tuple;
+ private WorkingMemory wm;
+ private final int result;
+ private transient boolean halt;
+
+ private boolean error;
+
+ public SalienceEvaluator(RuleBase ruleBase,
+ Salience salience,
+ Person person) {
+ wm = ruleBase.newStatefulSession();
+ final InternalFactHandle f0 = (InternalFactHandle) wm.insert( person );
+ tuple = new LeftTuple( f0,
+ null,
+ true );
+ this.salience = salience;
+ this.halt = false;
+ this.error = false;
+ this.result = (person.getAge() + 20) / 2;
+ }
+
+ public void run() {
+ try {
+ Thread.sleep( 1000 );
+ for ( int i = 0; i < iterations && !halt; i++ ) {
+ assertEquals( result,
+ salience.getValue( tuple,
+ wm ) );
+ Thread.currentThread().yield();
+ }
+ } catch ( Throwable e ) {
+ e.printStackTrace();
+ this.error = true;
+ }
+ }
+
+ public void halt() {
+ this.halt = true;
+ }
+
+ public boolean isError() {
+ return error;
+ }
+
+ public void setError(boolean error) {
+ this.error = error;
+ }
+
+ }
+
}
More information about the jboss-svn-commits
mailing list