use of org.kie.api.runtime.KieSessionConfiguration in project drools by kiegroup.
the class CepEspTest method testComplexOperator.
@Test(timeout = 10000)
public void testComplexOperator() throws Exception {
// read in the source
KieBaseConfiguration conf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
conf.setOption(EventProcessingOption.STREAM);
final KieBase kbase = loadKnowledgeBase(conf, "test_CEP_ComplexOperator.drl");
KieSessionConfiguration sconf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
sconf.setOption(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
KieSession ksession = createKnowledgeSession(kbase, sconf);
List list = new ArrayList();
ksession.setGlobal("list", list);
final PseudoClockScheduler clock = (PseudoClockScheduler) ksession.<SessionClock>getSessionClock();
clock.setStartupTime(1000);
AgendaEventListener ael = mock(AgendaEventListener.class);
ksession.addEventListener(ael);
StockTickInterface tick1 = new StockTick(1, "DROO", 50, 0, 3);
StockTickInterface tick2 = new StockTick(2, "ACME", 10, 4, 3);
StockTickInterface tick3 = new StockTick(3, "ACME", 10, 8, 3);
StockTickInterface tick4 = new StockTick(4, "DROO", 50, 12, 5);
StockTickInterface tick5 = new StockTick(5, "ACME", 10, 12, 5);
StockTickInterface tick6 = new StockTick(6, "ACME", 10, 13, 3);
StockTickInterface tick7 = new StockTick(7, "ACME", 10, 13, 5);
StockTickInterface tick8 = new StockTick(8, "ACME", 10, 15, 3);
ksession.insert(tick1);
ksession.insert(tick2);
ksession.insert(tick3);
ksession.insert(tick4);
ksession.insert(tick5);
ksession.insert(tick6);
ksession.insert(tick7);
ksession.insert(tick8);
ksession.fireAllRules();
assertEquals(1, list.size());
StockTick[] stocks = (StockTick[]) list.get(0);
assertSame(tick4, stocks[0]);
assertSame(tick2, stocks[1]);
}
use of org.kie.api.runtime.KieSessionConfiguration in project drools by kiegroup.
the class CepEspTest method testIdleTime.
// @Test(timeout=10000) @Ignore
// public void testTransactionCorrelation() throws Exception {
// // read in the source
// final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_TransactionCorrelation.drl" ) );
// final RuleBase ruleBase = loadRuleBase( reader );
//
// final WorkingMemory wm = ruleBase.newStatefulSession();
// final List results = new ArrayList();
//
// wm.setGlobal( "results",
// results );
//
//
// }
@Test(timeout = 10000)
public void testIdleTime() throws Exception {
// read in the source
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newInputStreamResource(getClass().getResourceAsStream("test_CEP_SimpleEventAssertion.drl")), ResourceType.DRL);
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
conf.setOption(ClockTypeOption.get("pseudo"));
StatefulKnowledgeSessionImpl session = (StatefulKnowledgeSessionImpl) createKnowledgeSession(kbase, conf);
SessionPseudoClock clock = (SessionPseudoClock) session.getSessionClock();
final List results = new ArrayList();
session.setGlobal("results", results);
StockTickInterface tick1 = new StockTick(1, "DROO", 50, 10000);
StockTickInterface tick2 = new StockTick(2, "ACME", 10, 10010);
StockTickInterface tick3 = new StockTick(3, "ACME", 10, 10100);
StockTickInterface tick4 = new StockTick(4, "DROO", 50, 11000);
assertEquals(0, session.getIdleTime());
InternalFactHandle handle1 = (InternalFactHandle) session.insert(tick1);
clock.advanceTime(10, TimeUnit.SECONDS);
assertEquals(10000, session.getIdleTime());
InternalFactHandle handle2 = (InternalFactHandle) session.insert(tick2);
assertEquals(0, session.getIdleTime());
clock.advanceTime(15, TimeUnit.SECONDS);
assertEquals(15000, session.getIdleTime());
clock.advanceTime(15, TimeUnit.SECONDS);
assertEquals(30000, session.getIdleTime());
InternalFactHandle handle3 = (InternalFactHandle) session.insert(tick3);
assertEquals(0, session.getIdleTime());
clock.advanceTime(20, TimeUnit.SECONDS);
InternalFactHandle handle4 = (InternalFactHandle) session.insert(tick4);
clock.advanceTime(10, TimeUnit.SECONDS);
assertNotNull(handle1);
assertNotNull(handle2);
assertNotNull(handle3);
assertNotNull(handle4);
assertTrue(handle1.isEvent());
assertTrue(handle2.isEvent());
assertTrue(handle3.isEvent());
assertTrue(handle4.isEvent());
assertEquals(10000, session.getIdleTime());
session.fireAllRules();
assertEquals(0, session.getIdleTime());
assertEquals(2, ((List) session.getGlobal("results")).size());
}
use of org.kie.api.runtime.KieSessionConfiguration in project drools by kiegroup.
the class CepEspTest method testSerializationWithEventInPast.
@Test
public void testSerializationWithEventInPast() {
// DROOLS-749
String drl = "import " + Event1.class.getCanonicalName() + "\n" + "declare Event1\n" + " @role( event )\n" + " @timestamp( timestamp )\n" + " @expires( 3h )\n" + "end\n" + "\n" + "rule R\n" + " when\n" + " $evt: Event1()\n" + " not Event1(this != $evt, this after[0, 1h] $evt)\n" + " then\n" + " System.out.println($evt.getCode());\n" + "end";
KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
sessionConfig.setOption(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
KieHelper helper = new KieHelper();
helper.addContent(drl, ResourceType.DRL);
KieBase kbase = helper.build(EventProcessingOption.STREAM);
KieSession ksession = kbase.newKieSession(sessionConfig, null);
ksession.insert(new Event1("id1", 0));
PseudoClockScheduler clock = ksession.getSessionClock();
clock.advanceTime(2, TimeUnit.HOURS);
ksession.fireAllRules();
ksession = marshallAndUnmarshall(KieServices.Factory.get(), kbase, ksession, sessionConfig);
ksession.insert(new Event1("id2", 0));
ksession.fireAllRules();
}
use of org.kie.api.runtime.KieSessionConfiguration in project drools by kiegroup.
the class CepEspTest method test2TimersWith2Rules.
@Test
public void test2TimersWith2Rules() throws InterruptedException {
String drl = "package org.drools " + "global java.util.List list; " + "declare Msg " + " @role( event ) " + " sender : String @key " + "end " + "rule Init " + "when " + " $s : String() " + "then " + " insert( new Msg( $s ) ); " + "end " + "rule 'Viol1' when " + " $trigger : Msg( 'Alice' ; )\n" + " not Msg( 'Bob' ; this after[0, 100ms] $trigger ) \n" + " not Msg( 'Charles' ; this after[0, 200ms] $trigger )\n" + "then\n" + " list.add( 0 );\n" + "end\n" + "rule 'Viol2' when " + " $trigger : Msg( 'Alice' ; )\n" + " not Msg( 'Bob' ; this after[0, 100ms] $trigger ) \n" + "then\n" + " list.add( 1 );\n" + "end\n";
KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
sessionConfig.setOption(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
KieHelper helper = new KieHelper();
helper.addContent(drl, ResourceType.DRL);
KieSession ksession = helper.build(EventProcessingOption.STREAM).newKieSession(sessionConfig, null);
List<Integer> list = new ArrayList<Integer>();
ksession.setGlobal("list", list);
ksession.insert("Alice");
ksession.fireAllRules();
assertTrue(list.isEmpty());
((PseudoClockScheduler) ksession.getSessionClock()).advanceTime(150, TimeUnit.MILLISECONDS);
ksession.fireAllRules();
assertEquals(1, list.size());
assertEquals(1, (int) list.get(0));
}
use of org.kie.api.runtime.KieSessionConfiguration in project drools by kiegroup.
the class CepEspTest method testExpireUnusedDeclaredTypeEvent.
@Test
public void testExpireUnusedDeclaredTypeEvent() {
// DROOLS-1524
String drl = "declare String @role( event ) @expires( 1s ) end\n" + "\n" + "rule R when\n" + "then\n" + " System.out.println(\"fired\");\n" + "end";
KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
sessionConfig.setOption(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
KieHelper helper = new KieHelper();
helper.addContent(drl, ResourceType.DRL);
KieBase kbase = helper.build(EventProcessingOption.STREAM);
KieSession ksession = kbase.newKieSession(sessionConfig, null);
PseudoClockScheduler sessionClock = ksession.getSessionClock();
ksession.insert("test");
ksession.fireAllRules();
assertEquals(1, ksession.getFactCount());
sessionClock.advanceTime(2, TimeUnit.SECONDS);
ksession.fireAllRules();
assertEquals(0, ksession.getFactCount());
}
Aggregations