[jboss-svn-commits] JBL Code SVN: r33842 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/compiler and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 12 12:59:19 EDT 2010
Author: tirelli
Date: 2010-07-12 12:59:18 -0400 (Mon, 12 Jul 2010)
New Revision: 33842
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_StreamMode.drl
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Activation.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/SerializableActivation.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/BaseQueueable.java
Log:
JBRULES-2150: adding test case for checking streammed kbases behave the same as non-streammed ones. Adding methods to Activation to provide additional information on data that caused the activation.
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Activation.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Activation.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/Activation.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -1,6 +1,6 @@
package org.drools.runtime.rule;
-import java.util.Collection;
+import java.util.List;
import org.drools.definition.rule.Rule;
@@ -24,5 +24,30 @@
* @return
* The matched FactHandles for this activation
*/
- Collection< ? extends FactHandle> getFactHandles();
+ List< ? extends FactHandle> getFactHandles();
+
+ /**
+ * Returns the list of objects that make the tuple that created
+ * this activation. The objects are in the proper tuple order.
+ *
+ * @return
+ */
+ List< Object > getObjects();
+
+ /**
+ * Returns the list of declaration identifiers that are bound to the
+ * tuple that created this activation.
+ *
+ * @return
+ */
+ List< String > getDeclarationIDs();
+
+ /**
+ * Returns the bound declaration value for the given declaration identifier.
+ *
+ * @param declarationId
+ * @return
+ */
+ Object getDeclarationValue( String declarationId );
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -20,7 +20,6 @@
import java.io.InputStreamReader;
import java.io.StringReader;
import java.lang.reflect.Field;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -29,18 +28,16 @@
import org.drools.DroolsTestCase;
import org.drools.FactHandle;
import org.drools.Primitives;
-import org.drools.QueryResults;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
import org.drools.StockTick;
import org.drools.WorkingMemory;
import org.drools.base.ClassObjectType;
import org.drools.base.DefaultKnowledgeHelper;
import org.drools.common.ActivationGroupNode;
+import org.drools.common.ActivationNode;
import org.drools.common.InternalFactHandle;
import org.drools.common.LogicalDependency;
-import org.drools.common.ActivationNode;
import org.drools.commons.jci.compilers.EclipseJavaCompiler;
import org.drools.commons.jci.compilers.JaninoJavaCompiler;
import org.drools.commons.jci.compilers.JavaCompiler;
@@ -65,19 +62,17 @@
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.QueryDescr;
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.lang.descr.SlidingWindowDescr;
import org.drools.lang.descr.TypeDeclarationDescr;
import org.drools.lang.descr.TypeFieldDescr;
-import org.drools.lang.descr.VariableRestrictionDescr;
import org.drools.process.core.Context;
import org.drools.process.core.Process;
import org.drools.reteoo.ReteooRuleBase;
import org.drools.rule.Behavior;
+import org.drools.rule.Declaration;
import org.drools.rule.DroolsCompositeClassLoader;
-import org.drools.rule.Declaration;
import org.drools.rule.EvalCondition;
import org.drools.rule.GroupElement;
import org.drools.rule.JavaDialectRuntimeData;
@@ -1579,10 +1574,25 @@
}
- public Collection<FactHandle> getFactHandles() {
+ public List<FactHandle> getFactHandles() {
// TODO Auto-generated method stub
return null;
}
+
+ public List<Object> getObjects() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getDeclarationValue(String variableName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List<String> getDeclarationIDs() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
class MockTuple
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -5,6 +5,7 @@
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.times;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -26,6 +27,7 @@
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
+import org.drools.Sensor;
import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.StockTick;
@@ -642,10 +644,10 @@
final PseudoClockScheduler clock = (PseudoClockScheduler) ksession.getSessionClock();
clock.setStartupTime( 1000 );
-
+
AgendaEventListener ael = mock( AgendaEventListener.class );
ksession.addEventListener( ael );
-
+
StockTick tick1 = new StockTick( 1,
"DROO",
50,
@@ -705,13 +707,14 @@
clock.advanceTime( 2,
TimeUnit.MILLISECONDS );
ksession.insert( tick8 );
-
+
ArgumentCaptor<ActivationCreatedEvent> arg = ArgumentCaptor.forClass( ActivationCreatedEvent.class );
verify( ael ).activationCreated( arg.capture() );
- assertThat( arg.getValue().getActivation().getRule().getName(), is( "before" ) );
+ assertThat( arg.getValue().getActivation().getRule().getName(),
+ is( "before" ) );
ksession.fireAllRules();
-
+
verify( ael ).afterActivationFired( any( AfterActivationFiredEvent.class ) );
}
@@ -730,10 +733,10 @@
final PseudoClockScheduler clock = (PseudoClockScheduler) ksession.getSessionClock();
clock.setStartupTime( 1000 );
-
+
AgendaEventListener ael = mock( AgendaEventListener.class );
ksession.addEventListener( ael );
-
+
StockTick tick1 = new StockTick( 1,
"DROO",
50,
@@ -793,17 +796,19 @@
clock.advanceTime( 2,
TimeUnit.MILLISECONDS );
ksession.insert( tick8 );
-
+
ArgumentCaptor<ActivationCreatedEvent> arg = ArgumentCaptor.forClass( ActivationCreatedEvent.class );
verify( ael ).activationCreated( arg.capture() );
- Activation activation = arg.getValue().getActivation();
- assertThat( activation.getRule().getName(), is( "metby" ) );
+ Activation activation = arg.getValue().getActivation();
+ assertThat( activation.getRule().getName(),
+ is( "metby" ) );
ksession.fireAllRules();
-
+
ArgumentCaptor<AfterActivationFiredEvent> aaf = ArgumentCaptor.forClass( AfterActivationFiredEvent.class );
verify( ael ).afterActivationFired( aaf.capture() );
- assertThat( (InternalFactHandle) aaf.getValue().getActivation().getFactHandles().toArray()[0], is( fh2 ));
+ assertThat( (InternalFactHandle) aaf.getValue().getActivation().getFactHandles().toArray()[0],
+ is( fh2 ) );
}
public void testAfterOnArbitraryDates() throws Exception {
@@ -1208,11 +1213,11 @@
clock.advanceTime( 10,
TimeUnit.SECONDS );
-
+
StockTick st1O = new StockTick( 1,
- "DROO",
- 100,
- clock.getCurrentTime() );
+ "DROO",
+ 100,
+ clock.getCurrentTime() );
EventFactHandle st1 = (EventFactHandle) wm.insert( st1O );
@@ -1633,4 +1638,81 @@
implements
Serializable {
}
+
+ public void testStreamModeNoSerialization() throws IOException,
+ ClassNotFoundException {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_CEP_StreamMode.drl",
+ CepEspTest.class ),
+ ResourceType.DRL );
+ if ( kbuilder.getErrors().size() > 0 ) {
+ throw new IllegalArgumentException( "Could not parse knowledge." );
+ }
+
+ KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ kbaseConfig.setOption( EventProcessingOption.STREAM );
+ KnowledgeBase kbase1 = KnowledgeBaseFactory.newKnowledgeBase( kbaseConfig );
+ kbase1.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeBase kbase2 = (KnowledgeBase) DroolsStreamUtils.streamIn( DroolsStreamUtils.streamOut( kbase1 ),
+ null );
+
+ final StatefulKnowledgeSession ksession1 = kbase1.newStatefulKnowledgeSession();
+ AgendaEventListener ael1 = mock( AgendaEventListener.class );
+ ksession1.addEventListener( ael1 );
+
+ final StatefulKnowledgeSession ksession2 = kbase2.newStatefulKnowledgeSession();
+ AgendaEventListener ael2 = mock( AgendaEventListener.class );
+ ksession2.addEventListener( ael2 );
+
+ // -------------
+ // first, check the non-serialized session
+ // -------------
+ ksession1.insert( new Sensor( 10,
+ 10 ) );
+ ksession1.fireAllRules();
+
+ ArgumentCaptor<AfterActivationFiredEvent> aafe1 = ArgumentCaptor.forClass(AfterActivationFiredEvent.class);
+ verify( ael1, times(1) ).afterActivationFired( aafe1.capture() );
+ List<AfterActivationFiredEvent> events1 = aafe1.getAllValues();
+ assertThat( events1.get( 0 ).getActivation().getDeclarationValue( "$avg" ), is( (Object) 10 ) );
+
+ ksession1.insert( new Sensor( 20,
+ 20 ) );
+ ksession1.fireAllRules();
+ verify( ael1, times(2) ).afterActivationFired( aafe1.capture() );
+ assertThat( events1.get( 1 ).getActivation().getDeclarationValue( "$avg" ), is( (Object) 15 ) );
+ ksession1.insert( new Sensor( 30,
+ 30 ) );
+ ksession1.fireAllRules();
+ verify( ael1, times(3) ).afterActivationFired( aafe1.capture() );
+ assertThat( events1.get( 2 ).getActivation().getDeclarationValue( "$avg" ), is( (Object) 25 ) );
+
+ ksession1.dispose();
+
+ // -------------
+ // now we check the serialized session
+ // -------------
+ ArgumentCaptor<AfterActivationFiredEvent> aafe2 = ArgumentCaptor.forClass(AfterActivationFiredEvent.class);
+
+ ksession2.insert( new Sensor( 10,
+ 10 ) );
+ ksession2.fireAllRules();
+ verify( ael2, times(1) ).afterActivationFired( aafe2.capture() );
+ List<AfterActivationFiredEvent> events2 = aafe2.getAllValues();
+ assertThat( events2.get( 0 ).getActivation().getDeclarationValue( "$avg" ), is( (Object) 10 ) );
+
+ ksession2.insert( new Sensor( 20,
+ 20 ) );
+ ksession2.fireAllRules();
+ verify( ael2, times(2) ).afterActivationFired( aafe2.capture() );
+ assertThat( events2.get( 1 ).getActivation().getDeclarationValue( "$avg" ), is( (Object) 15 ) );
+
+ ksession2.insert( new Sensor( 30,
+ 30 ) );
+ ksession2.fireAllRules();
+ verify( ael2, times(3) ).afterActivationFired( aafe2.capture() );
+ assertThat( events2.get( 2 ).getActivation().getDeclarationValue( "$avg" ), is( (Object) 25 ) );
+ ksession2.dispose();
+ }
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/RuleCoverageListenerTest.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -1,14 +1,14 @@
package org.drools.testframework;
-import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import junit.framework.TestCase;
import org.drools.FactHandle;
import org.drools.common.ActivationGroupNode;
+import org.drools.common.ActivationNode;
import org.drools.common.LogicalDependency;
-import org.drools.common.ActivationNode;
import org.drools.core.util.LinkedList;
import org.drools.event.AfterActivationFiredEvent;
import org.drools.rule.GroupElement;
@@ -68,6 +68,7 @@
}
+ at SuppressWarnings("serial")
class MockActivation
implements
Activation {
@@ -139,9 +140,24 @@
public void setActivationNode(ActivationNode ruleFlowGroupNode) {
}
- public Collection<FactHandle> getFactHandles() {
+ public List<FactHandle> getFactHandles() {
// TODO Auto-generated method stub
return null;
}
+ public List<Object> getObjects() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getDeclarationValue(String variableName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List<String> getDeclarationIDs() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_StreamMode.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_StreamMode.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_StreamMode.drl 2010-07-12 16:59:18 UTC (rev 33842)
@@ -0,0 +1,15 @@
+package org.drools;
+
+declare Sensor
+ @role (event)
+end
+
+rule 'dupa2'
+when
+Number( $avg : intValue ) from accumulate(
+ Sensor( $v : temperature ) over window:length( 2 ),
+ average( $v ) )
+then
+ // noop
+end
+
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -21,16 +21,16 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import org.drools.FactHandle;
import org.drools.core.util.LinkedList;
import org.drools.core.util.Queue;
import org.drools.core.util.Queueable;
+import org.drools.rule.Declaration;
import org.drools.rule.GroupElement;
import org.drools.rule.Rule;
-import org.drools.FactHandle;
import org.drools.spi.Activation;
import org.drools.spi.AgendaGroup;
import org.drools.spi.PropagationContext;
@@ -314,16 +314,41 @@
return this.subrule;
}
- public Collection<FactHandle> getFactHandles() {
+ public List<FactHandle> getFactHandles() {
FactHandle[] factHandles = this.tuple.getFactHandles();
List<FactHandle> list = new ArrayList<FactHandle>( factHandles.length );
for ( FactHandle factHandle : factHandles ) {
list.add( factHandle );
}
- return Collections.unmodifiableCollection( list );
+ return Collections.unmodifiableList( list );
}
public String toExternalForm() {
return "[ "+this.getRule().getName()+" active="+this.activated+ " ]";
}
+
+ public List<Object> getObjects() {
+ FactHandle[] factHandles = this.tuple.getFactHandles();
+ List<Object> list = new ArrayList<Object>( factHandles.length );
+ for ( FactHandle factHandle : factHandles ) {
+ list.add( ((InternalFactHandle) factHandle).getObject() );
+ }
+ return Collections.unmodifiableList( list );
+ }
+
+ public Object getDeclarationValue(String variableName) {
+ Declaration decl = this.getRule().getDeclaration( variableName );
+ InternalFactHandle handle = this.tuple.get( decl );
+ // need to double check, but the working memory reference is only used for resolving globals, right?
+ return decl.getValue( null, handle.getObject() );
+ }
+
+ public List<String> getDeclarationIDs() {
+ Declaration[] declArray = this.getRule().getDeclarations();
+ List<String> declarations = new ArrayList<String>();
+ for( Declaration decl : declArray ) {
+ declarations.add( decl.getIdentifier() );
+ }
+ return Collections.unmodifiableList( declarations );
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/SerializableActivation.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/SerializableActivation.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/SerializableActivation.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -4,9 +4,13 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.util.Collection;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.drools.common.InternalFactHandle;
import org.drools.definition.rule.Rule;
+import org.drools.rule.Declaration;
import org.drools.runtime.rule.Activation;
import org.drools.runtime.rule.FactHandle;
import org.drools.runtime.rule.PropagationContext;
@@ -16,7 +20,7 @@
Activation,
Externalizable {
private Rule rule;
- private Collection< ? extends FactHandle> factHandles;
+ private List< ? extends FactHandle> factHandles;
private PropagationContext propgationContext;
public SerializableActivation() {
@@ -40,11 +44,33 @@
return this.rule;
}
- public Collection< ? extends FactHandle> getFactHandles() {
+ public List< ? extends FactHandle> getFactHandles() {
return this.factHandles;
}
public PropagationContext getPropagationContext() {
return this.propgationContext;
}
+
+ public List<Object> getObjects() {
+ List<Object> objects = new ArrayList<Object>( this.factHandles.size() );
+ for( FactHandle handle : this.factHandles ) {
+ objects.add( ((InternalFactHandle)handle).getObject() );
+ }
+ return Collections.unmodifiableList( objects );
+ }
+
+ public Object getDeclarationValue(String variableName) {
+ Declaration decl = ((org.drools.rule.Rule)this.rule).getDeclaration( variableName );
+ return decl.getValue( null, ((InternalFactHandle)factHandles.get(decl.getPattern().getOffset())).getObject() );
+ }
+
+ public List<String> getDeclarationIDs() {
+ Declaration[] declArray = ((org.drools.rule.Rule)this.rule).getDeclarations();
+ List<String> declarations = new ArrayList<String>();
+ for( Declaration decl : declArray ) {
+ declarations.add( decl.getIdentifier() );
+ }
+ return Collections.unmodifiableList( declarations );
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/BaseQueueable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/BaseQueueable.java 2010-07-12 14:50:44 UTC (rev 33841)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/BaseQueueable.java 2010-07-12 16:59:18 UTC (rev 33842)
@@ -1,16 +1,16 @@
package org.drools.util;
-import java.util.Collection;
+import java.util.List;
+import org.drools.FactHandle;
import org.drools.common.ActivationGroupNode;
+import org.drools.common.ActivationNode;
import org.drools.common.LogicalDependency;
-import org.drools.common.ActivationNode;
import org.drools.core.util.LinkedList;
import org.drools.core.util.Queue;
import org.drools.core.util.Queueable;
import org.drools.rule.GroupElement;
import org.drools.rule.Rule;
-import org.drools.FactHandle;
import org.drools.spi.AgendaGroup;
import org.drools.spi.PropagationContext;
import org.drools.spi.Tuple;
@@ -134,8 +134,23 @@
}
- public Collection<FactHandle> getFactHandles() {
+ public List<FactHandle> getFactHandles() {
// TODO Auto-generated method stub
return null;
}
+
+ public List<Object> getObjects() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getDeclarationValue(String variableName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List<String> getDeclarationIDs() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list