[jboss-svn-commits] JBL Code SVN: r30589 - 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
Fri Dec 11 02:07:28 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-12-11 02:07:28 -0500 (Fri, 11 Dec 2009)
New Revision: 30589
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TimerAndCalendarTest.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
Log:
JBRULES-1944 Timer support
-moved tests out to own file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2009-12-11 07:01:49 UTC (rev 30588)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2009-12-11 07:07:28 UTC (rev 30589)
@@ -748,902 +748,19 @@
}
- public void testDuration() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration.drl" ) ) );
- final Package pkg = builder.getPackage();
-
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- final List list = new ArrayList();
- workingMemory.setGlobal( "list",
- list );
-
- final Cheese brie = new Cheese( "brie",
- 12 );
- final FactHandle brieHandle = workingMemory.insert( brie );
-
- workingMemory.fireAllRules();
-
- // now check for update
- assertEquals( 0,
- list.size() );
-
- // sleep for 300ms
- Thread.sleep( 300 );
-
- // now check for update
- assertEquals( 1,
- list.size() );
-
- }
-
public void testInsertRetractNoloop() throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Insert_Retract_Noloop.drl" ) );
RuleBase ruleBase = loadRuleBase( reader );
-
+
ruleBase = SerializationHelper.serializeObject( ruleBase );
final WorkingMemory wm = ruleBase.newStatefulSession();
wm.insert( new Cheese( "stilton",
15 ) );
-
+
wm.fireAllRules();
}
- public void testDurationWithNoLoop() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration_with_NoLoop.drl" ) ) );
- final Package pkg = builder.getPackage();
-
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- final List list = new ArrayList();
- workingMemory.setGlobal( "list",
- list );
-
- final Cheese brie = new Cheese( "brie",
- 12 );
- final FactHandle brieHandle = workingMemory.insert( brie );
-
- workingMemory.fireAllRules();
-
- // now check for update
- assertEquals( 0,
- list.size() );
-
- // sleep for 300ms
- Thread.sleep( 300 );
-
- // now check for update
- assertEquals( 1,
- list.size() );
- }
-
- public void testDurationMemoryLeakonRepeatedUpdate() throws Exception {
- String str = "";
- str += "package org.drools.test\n";
- str += "import org.drools.Alarm\n";
- str += "global java.util.List list;";
- str += "rule \"COMPTEUR\"\n";
- str += " timer 50\n";
- str += " when\n";
- str += " $alarm : Alarm( number < 5 )\n";
- str += " then\n";
- str += " $alarm.incrementNumber();\n";
- str += " list.add( $alarm );\n";
- str += " update($alarm);\n";
- str += "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 testNoProtocolIntervalTimer() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " duration (30s 10s) ";
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- timeService.advanceTime( new Date().getTime(), TimeUnit.MILLISECONDS );
-
- ksession.setGlobal( "list", list );
-
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( 20, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( 15, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 3, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 2, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 3, list.size() );
- }
-
- public void testIntervalTimer() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " timer (int:30s 10s) ";
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
-
- List list = new ArrayList();
-
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- timeService.advanceTime( new Date().getTime(), TimeUnit.MILLISECONDS );
-
- ksession.setGlobal( "list", list );
-
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( 20, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( 15, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 3, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 2, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 3, list.size() );
- }
-
- public void testCronTimer() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " timer (cron:15 * * * * ?) ";
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
- Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
-
- ksession.setGlobal( "list", list );
-
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 30, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 30, TimeUnit.SECONDS );
- ksession.fireAllRules();
- assertEquals( 2, list.size() );
- }
-
- public void testCalendarNormalRuleSingleCalendar() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\"\n";
- str += "when \n";
- str += " String()\n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- Calendar calFalse = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return false;
- }
- };
-
- Calendar calTrue = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return true;
- }
- };
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
- Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
-
- ksession.getCalendars().set( "cal1", calTrue );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
- ksession.setGlobal( "list", list );
- ksession.insert( "o1" );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.insert( "o2" );
- ksession.fireAllRules();
- assertEquals( 2, list.size() );
-
- ksession.getCalendars().set( "cal1", calFalse );
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.insert( "o3" );
- ksession.fireAllRules();
- assertEquals( 2, list.size() );
-
- ksession.getCalendars().set( "cal1", calTrue );
- timeService.advanceTime( 30, TimeUnit.SECONDS );
- ksession.insert( "o4" );
- ksession.fireAllRules();
- assertEquals( 3, list.size() );
- }
-
- public void testCalendarNormalRuleMultipleCalendars() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\", \"cal2\"\n";
- str += "when \n";
- str += " String()\n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- Calendar calFalse = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return false;
- }
- };
-
- Calendar calTrue = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return true;
- }
- };
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
- Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
-
- ksession.getCalendars().set( "cal1", calTrue );
- ksession.getCalendars().set( "cal2", calTrue );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
- ksession.setGlobal( "list", list );
- ksession.insert( "o1" );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- ksession.getCalendars().set( "cal2", calFalse );
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.insert( "o2" );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- ksession.getCalendars().set( "cal1", calFalse );
- timeService.advanceTime( 10, TimeUnit.SECONDS );
- ksession.insert( "o3" );
- ksession.fireAllRules();
- assertEquals( 1, list.size() );
-
- ksession.getCalendars().set( "cal1", calTrue );
- ksession.getCalendars().set( "cal2", calTrue );
- timeService.advanceTime( 30, TimeUnit.SECONDS );
- ksession.insert( "o4" );
- ksession.fireAllRules();
- assertEquals( 2, list.size() );
- }
-
- public void testCalendarsWithCron() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\", \"cal2\"\n";
- str += " timer (cron:15 * * * * ?) ";
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
- Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
-
- final Date date1 = new Date( date.getTime() + (15 * 1000) );
- final Date date2 = new Date( date1.getTime() + (60 * 1000) );
- final Date date3 = new Date( date2.getTime() + (60 * 1000) );
- final Date date4 = new Date( date3.getTime() + (60 * 1000) );
-
- Calendar cal1 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- if ( timestamp == date1.getTime() ) {
- return true;
- } else if ( timestamp == date4.getTime() ) {
- return false;
- } else {
- return true;
- }
- }
- };
-
- Calendar cal2 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- if ( timestamp == date2.getTime() ) {
- return false;
- } else if ( timestamp == date3.getTime() ) {
- return true;
- } else {
- return true;
- }
- }
- };
-
- ksession.getCalendars().set( "cal1", cal1 );
- ksession.getCalendars().set( "cal2", cal2 );
-
- ksession.setGlobal( "list", list );
-
- ksession.fireAllRules();
- timeService.advanceTime( 20, TimeUnit.SECONDS );
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 3, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 4, list.size() );
- }
-
- public void testCalendarsWithIntervals() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\", \"cal2\"\n";
- str += " timer (15s 60s) "; //int: protocol is assumed
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
- Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
-
- final Date date1 = new Date( date.getTime() + (15 * 1000) );
- final Date date2 = new Date( date1.getTime() + (60 * 1000) );
- final Date date3 = new Date( date2.getTime() + (60 * 1000) );
- final Date date4 = new Date( date3.getTime() + (60 * 1000) );
-
- Calendar cal1 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- if ( timestamp == date1.getTime() ) {
- return true;
- } else if ( timestamp == date4.getTime() ) {
- return false;
- } else {
- return true;
- }
- }
- };
-
- Calendar cal2 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- if ( timestamp == date2.getTime() ) {
- return false;
- } else if ( timestamp == date3.getTime() ) {
- return true;
- } else {
- return true;
- }
- }
- };
-
- ksession.getCalendars().set( "cal1", cal1 );
- ksession.getCalendars().set( "cal2", cal2 );
-
- ksession.setGlobal( "list", list );
-
- ksession.fireAllRules();
- timeService.advanceTime( 20, TimeUnit.SECONDS );
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 3, list.size() );
-
- timeService.advanceTime( 60, TimeUnit.SECONDS );
- assertEquals( 4, list.size() );
- }
-
- public void testCalendarsWithIntervalsAndStartAndEnd() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\"\n";
- str += " timer (0d 1d start=3-JAN-2010 end=5-JAN-2010) "; //int: protocol is assumed
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
- Date date = df.parse( "1-JAN-2010" );
-
- Calendar cal1 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return true;
- }
- };
-
- long oneDay = 60 * 60 * 24;
- ksession.getCalendars().set( "cal1", cal1 );
- ksession.setGlobal( "list", list );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
- assertEquals( 3, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 3, list.size() );
- }
-
- public void testCalendarsWithIntervalsAndStartAndLimit() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\"\n";
- str += " timer (0d 1d start=3-JAN-2010 repeat-limit=4) "; //int: protocol is assumed
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
- Date date = df.parse( "1-JAN-2010" );
-
- Calendar cal1 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return true;
- }
- };
-
- long oneDay = 60 * 60 * 24;
- ksession.getCalendars().set( "cal1", cal1 );
- ksession.setGlobal( "list", list );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
- assertEquals( 3, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 3, list.size() );
- }
-
- public void testCalendarsWithCronAndStartAndEnd() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\"\n";
- str += " timer (cron: 0 0 0 * * ? start=3-JAN-2010 end=5-JAN-2010) ";
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
- Date date = df.parse( "1-JAN-2010" );
-
- Calendar cal1 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return true;
- }
- };
-
- long oneDay = 60 * 60 * 24;
- ksession.getCalendars().set( "cal1", cal1 );
- ksession.setGlobal( "list", list );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
- assertEquals( 3, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 3, list.size() );
- }
-
- public void testCalendarsWithCronAndStartAndLimit() throws Exception {
- String str = "";
- str += "package org.simple \n";
- str += "global java.util.List list \n";
- str += "rule xxx \n";
- str += " calendars \"cal1\"\n";
- str += " timer (cron: 0 0 0 * * ? start=3-JAN-2010 repeat-limit=4) ";
- str += "when \n";
- str += "then \n";
- str += " list.add(\"fired\"); \n";
- str += "end \n";
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
- ResourceType.DRL );
-
- if ( kbuilder.hasErrors() ) {
- System.out.println( kbuilder.getErrors() );
- assertTrue( kbuilder.hasErrors() );
- }
-
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
- conf.setOption( ClockTypeOption.get( "pseudo" ) );
-
- List list = new ArrayList();
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
- DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
- Date date = df.parse( "1-JAN-2010" );
-
- Calendar cal1 = new Calendar() {
- public boolean isTimeIncluded(long timestamp) {
- return true;
- }
- };
-
- long oneDay = 60 * 60 * 24;
- ksession.getCalendars().set( "cal1", cal1 );
- ksession.setGlobal( "list", list );
-
- timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
- ksession.fireAllRules();
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 0, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
- assertEquals( 1, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 2, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
- assertEquals( 3, list.size() );
-
- timeService.advanceTime( oneDay, TimeUnit.SECONDS );
- assertEquals( 3, list.size() );
- }
-
- public void testFireRuleAfterDuration() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FireRuleAfterDuration.drl" ) ) );
- final Package pkg = builder.getPackage();
-
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- final List list = new ArrayList();
- workingMemory.setGlobal( "list",
- list );
-
- final Cheese brie = new Cheese( "brie",
- 12 );
- final FactHandle brieHandle = workingMemory.insert( brie );
-
- workingMemory.fireAllRules();
-
- // now check for update
- assertEquals( 0,
- list.size() );
-
- // sleep for 300ms
- Thread.sleep( 300 );
-
- workingMemory.fireAllRules();
-
- // now check for update
- assertEquals( 2,
- list.size() );
-
- }
-
public void testUpdateNoLoop() throws Exception {
// JBRULES-780, throws a NullPointer or infinite loop if there is an issue
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_UpdateNoloop.drl" ) );
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TimerAndCalendarTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TimerAndCalendarTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TimerAndCalendarTest.java 2009-12-11 07:07:28 UTC (rev 30589)
@@ -0,0 +1,932 @@
+package org.drools.integrationtests;
+
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import junit.framework.TestCase;
+
+import org.drools.Alarm;
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.PackageBuilder;
+import org.drools.io.ResourceFactory;
+import org.drools.rule.Package;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.conf.ClockTypeOption;
+import org.drools.time.Calendar;
+import org.drools.time.impl.PseudoClockScheduler;
+
+public class TimerAndCalendarTest extends TestCase {
+ protected RuleBase getRuleBase() throws Exception {
+
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ null );
+ }
+
+ protected RuleBase getRuleBase(final RuleBaseConfiguration config) throws Exception {
+
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ config );
+ }
+
+ public void testDuration() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "list",
+ list );
+
+ final Cheese brie = new Cheese( "brie",
+ 12 );
+ final FactHandle brieHandle = workingMemory.insert( brie );
+
+ workingMemory.fireAllRules();
+
+ // now check for update
+ assertEquals( 0,
+ list.size() );
+
+ // sleep for 300ms
+ Thread.sleep( 300 );
+
+ // now check for update
+ assertEquals( 1,
+ list.size() );
+
+ }
+
+ public void testDurationWithNoLoop() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration_with_NoLoop.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "list",
+ list );
+
+ final Cheese brie = new Cheese( "brie",
+ 12 );
+ final FactHandle brieHandle = workingMemory.insert( brie );
+
+ workingMemory.fireAllRules();
+
+ // now check for update
+ assertEquals( 0,
+ list.size() );
+
+ // sleep for 300ms
+ Thread.sleep( 300 );
+
+ // now check for update
+ assertEquals( 1,
+ list.size() );
+ }
+
+ public void testDurationMemoryLeakonRepeatedUpdate() throws Exception {
+ String str = "";
+ str += "package org.drools.test\n";
+ str += "import org.drools.Alarm\n";
+ str += "global java.util.List list;";
+ str += "rule \"COMPTEUR\"\n";
+ str += " timer 50\n";
+ str += " when\n";
+ str += " $alarm : Alarm( number < 5 )\n";
+ str += " then\n";
+ str += " $alarm.incrementNumber();\n";
+ str += " list.add( $alarm );\n";
+ str += " update($alarm);\n";
+ str += "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 testFireRuleAfterDuration() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FireRuleAfterDuration.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "list",
+ list );
+
+ final Cheese brie = new Cheese( "brie",
+ 12 );
+ final FactHandle brieHandle = workingMemory.insert( brie );
+
+ workingMemory.fireAllRules();
+
+ // now check for update
+ assertEquals( 0,
+ list.size() );
+
+ // sleep for 300ms
+ Thread.sleep( 300 );
+
+ workingMemory.fireAllRules();
+
+ // now check for update
+ assertEquals( 2,
+ list.size() );
+
+ }
+
+ public void testNoProtocolIntervalTimer() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " duration (30s 10s) ";
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ timeService.advanceTime( new Date().getTime(), TimeUnit.MILLISECONDS );
+
+ ksession.setGlobal( "list", list );
+
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( 20, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( 15, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 3, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 2, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 3, list.size() );
+ }
+
+ public void testIntervalTimer() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " timer (int:30s 10s) ";
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+
+ List list = new ArrayList();
+
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ timeService.advanceTime( new Date().getTime(), TimeUnit.MILLISECONDS );
+
+ ksession.setGlobal( "list", list );
+
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( 20, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( 15, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 3, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 2, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 3, list.size() );
+ }
+
+ public void testCronTimer() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " timer (cron:15 * * * * ?) ";
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
+ Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+
+ ksession.setGlobal( "list", list );
+
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 30, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 30, TimeUnit.SECONDS );
+ ksession.fireAllRules();
+ assertEquals( 2, list.size() );
+ }
+
+ public void testCalendarNormalRuleSingleCalendar() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\"\n";
+ str += "when \n";
+ str += " String()\n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ Calendar calFalse = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return false;
+ }
+ };
+
+ Calendar calTrue = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return true;
+ }
+ };
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
+ Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
+
+ ksession.getCalendars().set( "cal1", calTrue );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+ ksession.setGlobal( "list", list );
+ ksession.insert( "o1" );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.insert( "o2" );
+ ksession.fireAllRules();
+ assertEquals( 2, list.size() );
+
+ ksession.getCalendars().set( "cal1", calFalse );
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.insert( "o3" );
+ ksession.fireAllRules();
+ assertEquals( 2, list.size() );
+
+ ksession.getCalendars().set( "cal1", calTrue );
+ timeService.advanceTime( 30, TimeUnit.SECONDS );
+ ksession.insert( "o4" );
+ ksession.fireAllRules();
+ assertEquals( 3, list.size() );
+ }
+
+ public void testCalendarNormalRuleMultipleCalendars() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\", \"cal2\"\n";
+ str += "when \n";
+ str += " String()\n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ Calendar calFalse = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return false;
+ }
+ };
+
+ Calendar calTrue = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return true;
+ }
+ };
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
+ Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
+
+ ksession.getCalendars().set( "cal1", calTrue );
+ ksession.getCalendars().set( "cal2", calTrue );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+ ksession.setGlobal( "list", list );
+ ksession.insert( "o1" );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ ksession.getCalendars().set( "cal2", calFalse );
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.insert( "o2" );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ ksession.getCalendars().set( "cal1", calFalse );
+ timeService.advanceTime( 10, TimeUnit.SECONDS );
+ ksession.insert( "o3" );
+ ksession.fireAllRules();
+ assertEquals( 1, list.size() );
+
+ ksession.getCalendars().set( "cal1", calTrue );
+ ksession.getCalendars().set( "cal2", calTrue );
+ timeService.advanceTime( 30, TimeUnit.SECONDS );
+ ksession.insert( "o4" );
+ ksession.fireAllRules();
+ assertEquals( 2, list.size() );
+ }
+
+ public void testCalendarsWithCron() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\", \"cal2\"\n";
+ str += " timer (cron:15 * * * * ?) ";
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
+ Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+
+ final Date date1 = new Date( date.getTime() + (15 * 1000) );
+ final Date date2 = new Date( date1.getTime() + (60 * 1000) );
+ final Date date3 = new Date( date2.getTime() + (60 * 1000) );
+ final Date date4 = new Date( date3.getTime() + (60 * 1000) );
+
+ Calendar cal1 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ if ( timestamp == date1.getTime() ) {
+ return true;
+ } else if ( timestamp == date4.getTime() ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ };
+
+ Calendar cal2 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ if ( timestamp == date2.getTime() ) {
+ return false;
+ } else if ( timestamp == date3.getTime() ) {
+ return true;
+ } else {
+ return true;
+ }
+ }
+ };
+
+ ksession.getCalendars().set( "cal1", cal1 );
+ ksession.getCalendars().set( "cal2", cal2 );
+
+ ksession.setGlobal( "list", list );
+
+ ksession.fireAllRules();
+ timeService.advanceTime( 20, TimeUnit.SECONDS );
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 3, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 4, list.size() );
+ }
+
+ public void testCalendarsWithIntervals() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\", \"cal2\"\n";
+ str += " timer (15s 60s) "; //int: protocol is assumed
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
+ Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+
+ final Date date1 = new Date( date.getTime() + (15 * 1000) );
+ final Date date2 = new Date( date1.getTime() + (60 * 1000) );
+ final Date date3 = new Date( date2.getTime() + (60 * 1000) );
+ final Date date4 = new Date( date3.getTime() + (60 * 1000) );
+
+ Calendar cal1 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ if ( timestamp == date1.getTime() ) {
+ return true;
+ } else if ( timestamp == date4.getTime() ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ };
+
+ Calendar cal2 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ if ( timestamp == date2.getTime() ) {
+ return false;
+ } else if ( timestamp == date3.getTime() ) {
+ return true;
+ } else {
+ return true;
+ }
+ }
+ };
+
+ ksession.getCalendars().set( "cal1", cal1 );
+ ksession.getCalendars().set( "cal2", cal2 );
+
+ ksession.setGlobal( "list", list );
+
+ ksession.fireAllRules();
+ timeService.advanceTime( 20, TimeUnit.SECONDS );
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 3, list.size() );
+
+ timeService.advanceTime( 60, TimeUnit.SECONDS );
+ assertEquals( 4, list.size() );
+ }
+
+ public void testCalendarsWithIntervalsAndStartAndEnd() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\"\n";
+ str += " timer (0d 1d start=3-JAN-2010 end=5-JAN-2010) "; //int: protocol is assumed
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
+ Date date = df.parse( "1-JAN-2010" );
+
+ Calendar cal1 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return true;
+ }
+ };
+
+ long oneDay = 60 * 60 * 24;
+ ksession.getCalendars().set( "cal1", cal1 );
+ ksession.setGlobal( "list", list );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
+ assertEquals( 3, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 3, list.size() );
+ }
+
+ public void testCalendarsWithIntervalsAndStartAndLimit() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\"\n";
+ str += " timer (0d 1d start=3-JAN-2010 repeat-limit=4) "; //int: protocol is assumed
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
+ Date date = df.parse( "1-JAN-2010" );
+
+ Calendar cal1 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return true;
+ }
+ };
+
+ long oneDay = 60 * 60 * 24;
+ ksession.getCalendars().set( "cal1", cal1 );
+ ksession.setGlobal( "list", list );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
+ assertEquals( 3, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 3, list.size() );
+ }
+
+ public void testCalendarsWithCronAndStartAndEnd() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\"\n";
+ str += " timer (cron: 0 0 0 * * ? start=3-JAN-2010 end=5-JAN-2010) ";
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
+ Date date = df.parse( "1-JAN-2010" );
+
+ Calendar cal1 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return true;
+ }
+ };
+
+ long oneDay = 60 * 60 * 24;
+ ksession.getCalendars().set( "cal1", cal1 );
+ ksession.setGlobal( "list", list );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
+ assertEquals( 3, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 3, list.size() );
+ }
+
+ public void testCalendarsWithCronAndStartAndLimit() throws Exception {
+ String str = "";
+ str += "package org.simple \n";
+ str += "global java.util.List list \n";
+ str += "rule xxx \n";
+ str += " calendars \"cal1\"\n";
+ str += " timer (cron: 0 0 0 * * ? start=3-JAN-2010 repeat-limit=4) ";
+ str += "when \n";
+ str += "then \n";
+ str += " list.add(\"fired\"); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ assertTrue( kbuilder.hasErrors() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ conf.setOption( ClockTypeOption.get( "pseudo" ) );
+
+ List list = new ArrayList();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( conf, null );
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
+ DateFormat df = new SimpleDateFormat( "dd-MMM-yyyy" );
+ Date date = df.parse( "1-JAN-2010" );
+
+ Calendar cal1 = new Calendar() {
+ public boolean isTimeIncluded(long timestamp) {
+ return true;
+ }
+ };
+
+ long oneDay = 60 * 60 * 24;
+ ksession.getCalendars().set( "cal1", cal1 );
+ ksession.setGlobal( "list", list );
+
+ timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
+ ksession.fireAllRules();
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 0, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 3
+ assertEquals( 1, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 2, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS ); // day 5
+ assertEquals( 3, list.size() );
+
+ timeService.advanceTime( oneDay, TimeUnit.SECONDS );
+ assertEquals( 3, list.size() );
+ }
+
+}
More information about the jboss-svn-commits
mailing list