@Test(timeout = 10000) public void testEvenFirePseudoClockRuleA() throws Exception { AgendaEventListener ael = mock(AgendaEventListener.class); processStocks(evalFirePseudoClockStockCount, ael, evalFirePseudoClockDeclaration + evalFirePseudoClockRuleA); verify(ael, times(evalFirePseudoClockStockCount * (evalFirePseudoClockStockCount - 1) / 2)).afterMatchFired( any(AfterMatchFiredEvent.class)); }
verify(ael, times(2)).afterMatchFired(any(org.kie.api.event.rule.AfterMatchFiredEvent.class)); verify(ael, never()).matchCancelled(any(org.kie.api.event.rule.MatchCancelledEvent.class));
ksession.fireAllRules(); verify( alistener, never() ).matchCreated(any(org.kie.api.event.rule.MatchCreatedEvent.class)); ksession.fireAllRules(); verify( alistener, times( 1 ) ).matchCreated(any(org.kie.api.event.rule.MatchCreatedEvent.class)); ksession.fireAllRules(); verify( alistener, times( 1 ) ).matchCreated(any(org.kie.api.event.rule.MatchCreatedEvent.class)); times( 2 ) ).matchCreated(any(org.kie.api.event.rule.MatchCreatedEvent.class));
@Test(timeout = 10000) public void testEvenFirePseudoClockRuleB() throws Exception { AgendaEventListener ael = mock(AgendaEventListener.class); processStocks(evalFirePseudoClockStockCount, ael, evalFirePseudoClockDeclaration + evalFirePseudoClockRuleB); verify(ael, times(evalFirePseudoClockStockCount - 1)).afterMatchFired( any(AfterMatchFiredEvent.class)); }
verify( ael, times( 2 ) ).afterMatchFired(any(org.kie.api.event.rule.AfterMatchFiredEvent.class)); verify( ael, never() ).matchCancelled(any(org.kie.api.event.rule.MatchCancelledEvent.class));
@Test(timeout=10000) public void testJBRULES_2206() { KieBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); ((RuleBaseConfiguration) config).setRuleBaseUpdateHandler( null ); InternalKnowledgeBase kbase = (InternalKnowledgeBase) getKnowledgeBase( config ); KieSession session = createKnowledgeSession( kbase ); AgendaEventListener ael = mock( AgendaEventListener.class ); session.addEventListener( ael ); for ( int i = 0; i < 5; i++ ) { session.insert( new Cheese() ); } kbase.addPackages( loadKnowledgePackages( "test_JBRULES_2206_1.drl" )); ((InternalAgenda) session.getAgenda()).evaluateEagerList(); // two matching rules were added, so 2 activations should have been created verify( ael, times( 2 ) ).matchCreated(any(MatchCreatedEvent.class)); int fireCount = session.fireAllRules(); // both should have fired assertEquals( 2, fireCount ); kbase.addPackages( loadKnowledgePackages( "test_JBRULES_2206_2.drl" )); ((InternalAgenda) session.getAgenda()).evaluateEagerList(); // one rule was overridden and should activate verify( ael, times( 3 ) ).matchCreated(any(MatchCreatedEvent.class)); fireCount = session.fireAllRules(); // that rule should fire again assertEquals( 1, fireCount ); session.dispose(); }
@Test(timeout = 60000) public void testEvenFirePseudoClockRulesAB() throws Exception { AgendaEventListener ael = mock(AgendaEventListener.class); processStocks(evalFirePseudoClockStockCount, ael, evalFirePseudoClockDeclaration + evalFirePseudoClockRuleA + evalFirePseudoClockRuleB); final int expectedActivationCount = evalFirePseudoClockStockCount * (evalFirePseudoClockStockCount - 1) / 2 + evalFirePseudoClockStockCount - 1; verify(ael, times(expectedActivationCount)).afterMatchFired( any(AfterMatchFiredEvent.class)); }
@Test public void testRuleChainingWithLogicalInserts() throws Exception { KnowledgeBase kbase = loadKnowledgeBase( "test_RuleChaining.drl" ); StatefulKnowledgeSession ksession = createKnowledgeSession( kbase ); // create working memory mock listener RuleRuntimeEventListener wml = Mockito.mock( RuleRuntimeEventListener.class ); org.kie.api.event.rule.AgendaEventListener ael = Mockito.mock( org.kie.api.event.rule.AgendaEventListener.class ); ksession.addEventListener( wml ); ksession.addEventListener( ael ); int fired = ksession.fireAllRules(); assertEquals( 3, fired ); // capture the arguments and check that the rules fired in the proper sequence ArgumentCaptor<org.kie.api.event.rule.AfterMatchFiredEvent> actvs = ArgumentCaptor.forClass( org.kie.api.event.rule.AfterMatchFiredEvent.class ); verify( ael, times( 3 ) ).afterMatchFired(actvs.capture()); List<org.kie.api.event.rule.AfterMatchFiredEvent> values = actvs.getAllValues(); assertThat( values.get( 0 ).getMatch().getRule().getName(), is( "init" ) ); assertThat( values.get( 1 ).getMatch().getRule().getName(), is( "r1" ) ); assertThat( values.get( 2 ).getMatch().getRule().getName(), is( "r2" ) ); verify( ael, never() ).matchCancelled(any(org.kie.api.event.rule.MatchCancelledEvent.class)); verify( wml, times( 2 ) ).objectInserted( any( org.kie.api.event.rule.ObjectInsertedEvent.class ) ); verify( wml, never() ).objectDeleted(any(ObjectDeletedEvent.class)); }
ksession.fireAllRules(); verify( alistener, never() ).matchCreated(any(MatchCreatedEvent.class)); ksession.fireAllRules(); verify( alistener, times( 1 ) ).matchCreated(any(MatchCreatedEvent.class)); ksession.fireAllRules(); verify( alistener, times( 1 ) ).matchCreated(any(MatchCreatedEvent.class)); times( 2 ) ).matchCreated(any(MatchCreatedEvent.class));
private void testAgendaFilter(final AgendaFilter agendaFilter, final String expectedMatchingRuleName) { final String str = "package org.drools.compiler\n" + "rule Aaa when then end\n" + "rule Bbb when then end\n"; final KieBase kbase = loadKnowledgeBaseFromString(str); final KieSession ksession = createKnowledgeSession(kbase); final org.kie.api.event.rule.AgendaEventListener ael = mock(org.kie.api.event.rule.AgendaEventListener.class); ksession.addEventListener(ael); final int rules = ksession.fireAllRules(agendaFilter); assertEquals(1, rules); final ArgumentCaptor<org.kie.api.event.rule.AfterMatchFiredEvent> arg = ArgumentCaptor.forClass(org.kie.api.event.rule.AfterMatchFiredEvent.class); verify(ael).afterMatchFired(arg.capture()); assertThat(arg.getValue().getMatch().getRule().getName(), is(expectedMatchingRuleName)); } }
@Test(timeout=10000) @Ignore public void testJBRULES_2206() { KieBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); ((RuleBaseConfiguration) config).setRuleBaseUpdateHandler( null ); KnowledgeBase kbase = getKnowledgeBase(config); StatefulKnowledgeSession session = createKnowledgeSession( kbase ); AgendaEventListener ael = mock( AgendaEventListener.class ); session.addEventListener( ael ); for ( int i = 0; i < 5; i++ ) { session.insert( new Cheese() ); } kbase.addKnowledgePackages( loadKnowledgePackages( "test_JBRULES_2206_1.drl" )); ((InternalAgenda) session.getAgenda()).evaluateEagerList(); // two matching rules were added, so 2 activations should have been created verify( ael, times( 2 ) ).matchCreated(any(MatchCreatedEvent.class)); int fireCount = session.fireAllRules(); // both should have fired assertEquals( 2, fireCount ); kbase.addKnowledgePackages( loadKnowledgePackages( "test_JBRULES_2206_2.drl" )); ((InternalAgenda) session.getAgenda()).evaluateEagerList(); // one rule was overridden and should activate verify( ael, times( 3 ) ).matchCreated(any(MatchCreatedEvent.class)); fireCount = session.fireAllRules(); // that rule should fire again assertEquals( 1, fireCount ); session.dispose(); }
@Test(timeout=10000) public void testIsAOperator() { String source = "org/drools/compiler/factmodel/traits/testTraitIsA2.drl"; KieSession ksession = getSession( source ); TraitFactory.setMode( mode, ksession.getKieBase() ); AgendaEventListener ael = mock( AgendaEventListener.class ); ksession.addEventListener( ael ); Person student = new Person( "student", 18 ); ksession.insert( student ); ksession.fireAllRules(); ArgumentCaptor<AfterMatchFiredEvent> cap = ArgumentCaptor.forClass( AfterMatchFiredEvent.class ); verify( ael, times( 3 ) ).afterMatchFired( cap.capture() ); List<AfterMatchFiredEvent> values = cap.getAllValues(); assertThat( values.get( 0 ).getMatch().getRule().getName(), is( "create student" ) ); assertThat( values.get( 1 ).getMatch().getRule().getName(), is( "print student" ) ); assertThat( values.get( 2 ).getMatch().getRule().getName(), is( "print school" ) ); }
@Test public void testMapNullConstraint() throws Exception { final KieBase kbase = loadKnowledgeBase("test_mapNullConstraints.drl"); final KieSession ksession = createKnowledgeSession(kbase); final org.kie.api.event.rule.AgendaEventListener ael = mock(org.kie.api.event.rule.AgendaEventListener.class); ksession.addEventListener(ael); new WorkingMemoryConsoleLogger((WorkingMemory) ksession); final Map addresses = new HashMap(); addresses.put("home", new Address("home street")); final Person bob = new Person("Bob"); bob.setNamedAddresses(addresses); ksession.insert(bob); ksession.fireAllRules(); final ArgumentCaptor<AfterMatchFiredEvent> arg = ArgumentCaptor.forClass(org.kie.api.event.rule.AfterMatchFiredEvent.class); verify(ael, times(4)).afterMatchFired(arg.capture()); org.kie.api.event.rule.AfterMatchFiredEvent aaf = arg.getAllValues().get(0); assertThat(aaf.getMatch().getRule().getName(), is("1. home != null")); aaf = arg.getAllValues().get(1); assertThat(aaf.getMatch().getRule().getName(), is("2. not home == null")); aaf = arg.getAllValues().get(2); assertThat(aaf.getMatch().getRule().getName(), is("7. work == null")); aaf = arg.getAllValues().get(3); assertThat(aaf.getMatch().getRule().getName(), is("8. not work != null")); }
@Test public void testKieConsoleLoggerStateless() throws Exception { String drl = "package org.drools.integrationtests\n" + "import org.drools.compiler.Message;\n" + "rule \"Hello World\"\n" + " when\n" + " m : Message( myMessage : message )\n" + " then\n" + "end"; // get the resource Resource dt = ResourceFactory.newByteArrayResource( drl.getBytes() ).setTargetPath("org/drools/integrationtests/hello.drl"); // create the builder StatelessKieSession ksession = getStatelessKieSession(dt); KieRuntimeLogger logger = KieServices.Factory.get().getLoggers().newConsoleLogger( ksession ); AgendaEventListener ael = mock( AgendaEventListener.class ); ksession.addEventListener( ael ); ksession.execute( new Message("Hello World") ); verify( ael ).afterMatchFired( any(AfterMatchFiredEvent.class) ); logger.close(); }
verify( ael, never() ).afterMatchFired( any( AfterMatchFiredEvent.class ) ); verify( ael, times(1) ).afterMatchFired( capt.capture() ); assertThat( "R1", is( capt.getValue().getMatch().getRule().getName() ) ); verify( ael, times(2) ).afterMatchFired( capt.capture() ); assertThat( "R2", is( capt.getAllValues().get( 2 ).getMatch().getRule().getName() ) );
verify(ael, times(2)).afterMatchFired(captor.capture()); final List<org.kie.api.event.rule.AfterMatchFiredEvent> aafe = captor.getAllValues();
verify(ael, times(2)).afterMatchFired(captor.capture());
@Test public void testOrWithVariableResolution() throws Exception { // KieBase kbase = loadKnowledgeBase( "test_OrCEFollowedByMultipleEval.drl"); // KieSession workingMemory = createKnowledgeSession(kbase); final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "test_OrCEFollowedByMultipleEval.drl", FirstOrderLogicTest.class ), ResourceType.DRL ); assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() ); final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); final KieSession ksession = createKnowledgeSession(kbase); final AgendaEventListener al = mock( AgendaEventListener.class ); ksession.addEventListener( al ); ksession.insert( new FactA( "a" ) ); ksession.insert( new FactB( "b" ) ); ksession.insert( new FactC( "c" ) ); ksession.fireAllRules(); verify( al, times( 6 ) ).afterMatchFired(any(AfterMatchFiredEvent.class)); }
@Test public void testOrWithVariableResolution2() throws Exception { // KieBase kbase = loadKnowledgeBase( "test_OrCEFollowedByMultipleEval.drl"); // KieSession workingMemory = createKnowledgeSession(kbase); final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "test_OrCEFollowedByMultipleEval2.drl", FirstOrderLogicTest.class ), ResourceType.DRL ); assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() ); final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); final KieSession ksession = createKnowledgeSession(kbase); final AgendaEventListener al = mock( AgendaEventListener.class ); ksession.addEventListener( al ); ksession.insert( new FactA( "a" ) ); ksession.insert( new FactB( "b" ) ); ksession.insert( new FactC( "c" ) ); ksession.fireAllRules(); verify( al, times( 8 ) ).afterMatchFired(any(AfterMatchFiredEvent.class)); }
verify( ael ).afterMatchFired(cap.capture());