Search in sources :

Example 51 with Match

use of org.kie.api.runtime.rule.Match in project drools by kiegroup.

the class RemoveRuleTest method testPopulatedSingleRuleNoSharingWithSubnetworkAtStart.

@Test
public void testPopulatedSingleRuleNoSharingWithSubnetworkAtStart() throws Exception {
    InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    InternalWorkingMemory wm = ((InternalWorkingMemory) kbase.newKieSession());
    wm.insert(new A(1));
    wm.insert(new A(2));
    wm.insert(new D(1));
    wm.insert(new E(1));
    wm.insert(new C(2));
    wm.fireAllRules();
    kbase.addPackages(buildKnowledgePackage("r1", "   A() not( B() and C() ) D() E()\n"));
    List list = new ArrayList();
    wm.setGlobal("list", list);
    wm.fireAllRules();
    assertEquals(2, list.size());
    assertEquals("r1", ((Match) list.get(0)).getRule().getName());
    assertEquals("r1", ((Match) list.get(1)).getRule().getName());
    kbase.removeRule("org.kie", "r1");
    wm.insert(new A(1));
    wm.fireAllRules();
    assertEquals(2, list.size());
}
Also used : InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) Match(org.kie.api.runtime.rule.Match) Test(org.junit.Test)

Example 52 with Match

use of org.kie.api.runtime.rule.Match in project drools by kiegroup.

the class AccumulateTest method execTestAccumulateMultipleFunctions.

private void execTestAccumulateMultipleFunctions(final String fileName) {
    final KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources("accumulate-test", kieBaseTestConfiguration, fileName);
    final KieSession ksession = kbase.newKieSession();
    try {
        final AgendaEventListener ael = mock(AgendaEventListener.class);
        ksession.addEventListener(ael);
        final Cheese[] cheese = new Cheese[] { new Cheese("stilton", 10), new Cheese("stilton", 3), new Cheese("stilton", 5), new Cheese("brie", 15), new Cheese("brie", 17), new Cheese("provolone", 8) };
        final Person bob = new Person("Bob", "stilton");
        final FactHandle[] cheeseHandles = new FactHandle[cheese.length];
        for (int i = 0; i < cheese.length; i++) {
            cheeseHandles[i] = ksession.insert(cheese[i]);
        }
        final FactHandle bobHandle = ksession.insert(bob);
        // ---------------- 1st scenario
        ksession.fireAllRules();
        final ArgumentCaptor<AfterMatchFiredEvent> cap = ArgumentCaptor.forClass(AfterMatchFiredEvent.class);
        Mockito.verify(ael).afterMatchFired(cap.capture());
        Match activation = cap.getValue().getMatch();
        assertThat(((Number) activation.getDeclarationValue("$sum")).intValue(), is(18));
        assertThat(((Number) activation.getDeclarationValue("$min")).intValue(), is(3));
        assertThat(((Number) activation.getDeclarationValue("$avg")).intValue(), is(6));
        Mockito.reset(ael);
        // ---------------- 2nd scenario
        final int index = 1;
        cheese[index].setPrice(9);
        ksession.update(cheeseHandles[index], cheese[index]);
        ksession.fireAllRules();
        Mockito.verify(ael).afterMatchFired(cap.capture());
        activation = cap.getValue().getMatch();
        assertThat(((Number) activation.getDeclarationValue("$sum")).intValue(), is(24));
        assertThat(((Number) activation.getDeclarationValue("$min")).intValue(), is(5));
        assertThat(((Number) activation.getDeclarationValue("$avg")).intValue(), is(8));
        Mockito.reset(ael);
        // ---------------- 3rd scenario
        bob.setLikes("brie");
        ksession.update(bobHandle, bob);
        ksession.fireAllRules();
        Mockito.verify(ael).afterMatchFired(cap.capture());
        activation = cap.getValue().getMatch();
        assertThat(((Number) activation.getDeclarationValue("$sum")).intValue(), is(32));
        assertThat(((Number) activation.getDeclarationValue("$min")).intValue(), is(15));
        assertThat(((Number) activation.getDeclarationValue("$avg")).intValue(), is(16));
        Mockito.reset(ael);
        // ---------------- 4th scenario
        ksession.delete(cheeseHandles[3]);
        ksession.fireAllRules();
        Mockito.verify(ael).afterMatchFired(cap.capture());
        activation = cap.getValue().getMatch();
        assertThat(((Number) activation.getDeclarationValue("$sum")).intValue(), is(17));
        assertThat(((Number) activation.getDeclarationValue("$min")).intValue(), is(17));
        assertThat(((Number) activation.getDeclarationValue("$avg")).intValue(), is(17));
    } finally {
        ksession.dispose();
    }
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.testcoverage.common.model.Cheese) Person(org.drools.testcoverage.common.model.Person) AfterMatchFiredEvent(org.kie.api.event.rule.AfterMatchFiredEvent) Match(org.kie.api.runtime.rule.Match)

Example 53 with Match

use of org.kie.api.runtime.rule.Match in project drools by kiegroup.

the class AccumulateTest method testAccumulateMultipleFunctionsConstraint.

@Test(timeout = 10000)
public void testAccumulateMultipleFunctionsConstraint() {
    final KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources("accumulate-test", kieBaseTestConfiguration, "org/drools/compiler/integrationtests/test_AccumulateMultipleFunctionsConstraint.drl");
    final KieSession ksession = kbase.newKieSession();
    try {
        final AgendaEventListener ael = mock(AgendaEventListener.class);
        ksession.addEventListener(ael);
        final Cheese[] cheese = new Cheese[] { new Cheese("stilton", 10), new Cheese("stilton", 3), new Cheese("stilton", 5), new Cheese("brie", 3), new Cheese("brie", 17), new Cheese("provolone", 8) };
        final Person bob = new Person("Bob", "stilton");
        final FactHandle[] cheeseHandles = new FactHandle[cheese.length];
        for (int i = 0; i < cheese.length; i++) {
            cheeseHandles[i] = ksession.insert(cheese[i]);
        }
        final FactHandle bobHandle = ksession.insert(bob);
        // ---------------- 1st scenario
        ksession.fireAllRules();
        final ArgumentCaptor<AfterMatchFiredEvent> cap = ArgumentCaptor.forClass(AfterMatchFiredEvent.class);
        Mockito.verify(ael).afterMatchFired(cap.capture());
        Match activation = cap.getValue().getMatch();
        assertThat(((Number) activation.getDeclarationValue("$sum")).intValue(), is(18));
        assertThat(((Number) activation.getDeclarationValue("$min")).intValue(), is(3));
        assertThat(((Number) activation.getDeclarationValue("$avg")).intValue(), is(6));
        Mockito.reset(ael);
        // ---------------- 2nd scenario
        final int index = 1;
        cheese[index].setPrice(9);
        ksession.update(cheeseHandles[index], cheese[index]);
        ksession.fireAllRules();
        Mockito.verify(ael, Mockito.never()).afterMatchFired(Mockito.any(AfterMatchFiredEvent.class));
        Mockito.reset(ael);
        // ---------------- 3rd scenario
        bob.setLikes("brie");
        ksession.update(bobHandle, bob);
        ksession.fireAllRules();
        Mockito.verify(ael).afterMatchFired(cap.capture());
        activation = cap.getValue().getMatch();
        assertThat(((Number) activation.getDeclarationValue("$sum")).intValue(), is(20));
        assertThat(((Number) activation.getDeclarationValue("$min")).intValue(), is(3));
        assertThat(((Number) activation.getDeclarationValue("$avg")).intValue(), is(10));
    } finally {
        ksession.dispose();
    }
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.testcoverage.common.model.Cheese) Person(org.drools.testcoverage.common.model.Person) AfterMatchFiredEvent(org.kie.api.event.rule.AfterMatchFiredEvent) Match(org.kie.api.runtime.rule.Match) Test(org.junit.Test)

Example 54 with Match

use of org.kie.api.runtime.rule.Match in project drools by kiegroup.

the class RemoveRuleTest method testPopulatedRuleMidwayShare.

@Test
public void testPopulatedRuleMidwayShare() throws Exception {
    InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", "   A() B() C(1;) X() E()\n");
    InternalWorkingMemory wm = ((InternalWorkingMemory) kbase1.newKieSession());
    List list = new ArrayList();
    wm.setGlobal("list", list);
    wm.insert(new A(1));
    wm.insert(new A(2));
    wm.insert(new A(3));
    wm.insert(new B(1));
    wm.insert(new C(1));
    wm.insert(new C(2));
    wm.insert(new X(1));
    wm.insert(new E(1));
    wm.fireAllRules();
    assertEquals(7, countNodeMemories(wm.getNodeMemories()));
    kbase1.addPackages(buildKnowledgePackage("r2", "   a : A() B() C(2;) X() E()\n"));
    wm.fireAllRules();
    ObjectTypeNode aotn = getObjectTypeNode(kbase1, A.class);
    LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0];
    JoinNode bNode = (JoinNode) liaNode.getSinkPropagator().getFirstLeftTupleSink();
    JoinNode c1Node = (JoinNode) bNode.getSinkPropagator().getFirstLeftTupleSink();
    JoinNode c2Node = (JoinNode) bNode.getSinkPropagator().getLastLeftTupleSink();
    LiaNodeMemory lm = (LiaNodeMemory) wm.getNodeMemory(liaNode);
    SegmentMemory sm = lm.getSegmentMemory();
    BetaMemory c1Mem = (BetaMemory) wm.getNodeMemory(c1Node);
    assertSame(sm.getFirst(), c1Mem.getSegmentMemory());
    assertEquals(3, c1Mem.getLeftTupleMemory().size());
    assertEquals(1, c1Mem.getRightTupleMemory().size());
    BetaMemory c2Mem = (BetaMemory) wm.getNodeMemory(c2Node);
    SegmentMemory c2Smem = sm.getFirst().getNext();
    assertSame(c2Smem, c2Mem.getSegmentMemory());
    assertEquals(3, c2Mem.getLeftTupleMemory().size());
    assertEquals(1, c2Mem.getRightTupleMemory().size());
    assertEquals(6, list.size());
    kbase1.removeRule("org.kie", "r2");
    assertEquals(10, countNodeMemories(wm.getNodeMemories()));
    assertNull(sm.getFirst());
    // c1SMem repoints back to original Smem
    assertSame(sm, c1Mem.getSegmentMemory());
    wm.insert(new A(1));
    wm.fireAllRules();
    assertEquals("r1", ((Match) list.get(6)).getRule().getName());
    // only one more added, as second rule as removed
    assertEquals(7, list.size());
}
Also used : SegmentMemory(org.drools.core.reteoo.SegmentMemory) JoinNode(org.drools.core.reteoo.JoinNode) ArrayList(java.util.ArrayList) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) BetaMemory(org.drools.core.reteoo.BetaMemory) LiaNodeMemory(org.drools.core.reteoo.LeftInputAdapterNode.LiaNodeMemory) Match(org.kie.api.runtime.rule.Match) InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) ArrayList(java.util.ArrayList) List(java.util.List) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) LeftInputAdapterNode(org.drools.core.reteoo.LeftInputAdapterNode) Test(org.junit.Test)

Example 55 with Match

use of org.kie.api.runtime.rule.Match in project drools by kiegroup.

the class RemoveRuleTest method testPopulatedSharedToRtn.

@Test
public void testPopulatedSharedToRtn() throws Exception {
    InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", "   A() B() C() X() E()\n");
    InternalWorkingMemory wm = ((InternalWorkingMemory) kbase1.newKieSession());
    List list = new ArrayList();
    wm.setGlobal("list", list);
    wm.insert(new A(1));
    wm.insert(new A(2));
    wm.insert(new B(1));
    wm.insert(new C(1));
    wm.insert(new X(1));
    wm.insert(new E(1));
    wm.fireAllRules();
    assertEquals(2, list.size());
    assertEquals(7, countNodeMemories(wm.getNodeMemories()));
    kbase1.addPackages(buildKnowledgePackage("r2", "   A() B() C() X() E()\n"));
    wm.fireAllRules();
    assertEquals(8, countNodeMemories(wm.getNodeMemories()));
    assertEquals(4, list.size());
    RuleTerminalNode rtn1 = getRtn("org.kie.r1", kbase1);
    RuleTerminalNode rtn2 = getRtn("org.kie.r2", kbase1);
    PathMemory pmem1 = (PathMemory) wm.getNodeMemory(rtn1);
    PathMemory pmem2 = (PathMemory) wm.getNodeMemory(rtn2);
    SegmentMemory[] smems1 = pmem1.getSegmentMemories();
    SegmentMemory[] smems2 = pmem2.getSegmentMemories();
    assertEquals(2, smems1.length);
    assertEquals(2, smems2.length);
    assertSame(smems1[0], smems2[0]);
    assertNotSame(smems1[1], smems2[1]);
    SegmentMemory sm = smems1[0];
    assertEquals(smems1[1], sm.getFirst());
    JoinNode eNode1 = (JoinNode) rtn1.getLeftTupleSource();
    JoinNode eNode2 = (JoinNode) rtn2.getLeftTupleSource();
    assertSame(eNode1, eNode2);
    pmem1 = (PathMemory) wm.getNodeMemory(rtn1);
    kbase1.removeRule("org.kie", "r2");
    System.out.println("---");
    assertEquals(7, countNodeMemories(wm.getNodeMemories()));
    assertNull(sm.getFirst());
    pmem1 = (PathMemory) wm.getNodeMemory(rtn1);
    smems1 = pmem1.getSegmentMemories();
    assertEquals(1, smems1.length);
    assertSame(sm, smems1[0]);
    wm.insert(new A(1));
    wm.fireAllRules();
    assertEquals("r1", ((Match) list.get(4)).getRule().getName());
    // only one more added, as second rule as removed
    assertEquals(5, list.size());
}
Also used : SegmentMemory(org.drools.core.reteoo.SegmentMemory) JoinNode(org.drools.core.reteoo.JoinNode) ArrayList(java.util.ArrayList) Match(org.kie.api.runtime.rule.Match) InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) ArrayList(java.util.ArrayList) List(java.util.List) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) RuleTerminalNode(org.drools.core.reteoo.RuleTerminalNode) PathMemory(org.drools.core.reteoo.PathMemory) Test(org.junit.Test)

Aggregations

Match (org.kie.api.runtime.rule.Match)68 Test (org.junit.Test)60 ArrayList (java.util.ArrayList)57 List (java.util.List)52 KieSession (org.kie.api.runtime.KieSession)37 InternalWorkingMemory (org.drools.core.common.InternalWorkingMemory)26 KieBase (org.kie.api.KieBase)26 FactHandle (org.kie.api.runtime.rule.FactHandle)24 SegmentMemory (org.drools.core.reteoo.SegmentMemory)22 ObjectTypeNode (org.drools.core.reteoo.ObjectTypeNode)20 LeftInputAdapterNode (org.drools.core.reteoo.LeftInputAdapterNode)18 JoinNode (org.drools.core.reteoo.JoinNode)16 LiaNodeMemory (org.drools.core.reteoo.LeftInputAdapterNode.LiaNodeMemory)16 Arrays.asList (java.util.Arrays.asList)15 BetaMemory (org.drools.core.reteoo.BetaMemory)14 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)13 InternalKnowledgeBase (org.drools.kiesession.rulebase.InternalKnowledgeBase)11 RuleEventListener (org.kie.internal.event.rule.RuleEventListener)11 RuleEventManager (org.kie.internal.event.rule.RuleEventManager)11 KieBaseConfiguration (org.kie.api.KieBaseConfiguration)10