private void evaluateEagerList(KieSession ksession) { ((InternalWorkingMemory) ksession).flushPropagations(); ((InternalAgenda) ksession.getAgenda()).evaluateEagerList(); }
@Test public void testRuleFlowGroupDeactivate() throws Exception { // need to make eager, for cancel to work, (mdp) KieBase kbase = loadKnowledgeBase("ruleflowgroup2.drl"); KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.insert( "Test" ); ksession.fireAllRules(); assertEquals( 0, list.size() ); assertEquals(2, ((InternalAgenda) ksession.getAgenda()).getRuleFlowGroup("Group1").size()); ((InternalAgenda)ksession.getAgenda()).activateRuleFlowGroup("Group1"); ksession.fireAllRules(); assertEquals( 0, list.size() ); }
assertEquals( 0, list.size() ); ((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("Group1");
@Test public void testRuleFlowGroup() throws Exception { KieBase kbase = loadKnowledgeBase("ruleflowgroup.drl"); KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.insert( "Test" ); ksession.fireAllRules(); assertEquals( 0, list.size() ); ((InternalAgenda)ksession.getAgenda()).activateRuleFlowGroup("Group1"); ksession.fireAllRules(); assertEquals( 1, list.size() ); }
@Test public void testAgendaGroups() throws Exception { KieBase kbase = loadKnowledgeBase("test_AgendaGroups.drl"); KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal( "list", list ); final Cheese brie = new Cheese( "brie", 12 ); ksession.insert( brie ); ksession.fireAllRules(); assertEquals( 7, list.size() ); assertEquals( "group3", list.get( 0 ) ); assertEquals( "group4", list.get( 1 ) ); assertEquals( "group3", list.get( 2 ) ); assertEquals( "MAIN", list.get( 3 ) ); assertEquals( "group1", list.get( 4 ) ); assertEquals( "group1", list.get( 5 ) ); assertEquals( "MAIN", list.get( 6 ) ); ksession.getAgenda().getAgendaGroup( "group2" ).setFocus(); ksession.fireAllRules(); assertEquals( 8, list.size() ); assertEquals( "group2", list.get( 7 ) ); }
ksession.insert(new String("r4")); ksession.insert(new String("r4")); ksession.getAgenda().getAgendaGroup("g1").setFocus();
@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 public void testClearActivationGroupCommand() { // DROOLS-828 String drl = "package org.kie.test\n" + "global java.util.List list\n" + "rule \"Rule in first agenda group\" @Propagation(IMMEDIATE)\n" + "agenda-group \"first-agenda\"\n" + "salience 10\n" + "when\n" + "then\n" + "list.add(\"Rule in first agenda group executed\");\n" + "end\n" + "rule \"Rule without agenda group\" @Propagation(IMMEDIATE)\n" + "salience 100\n" + "when\n" + "then\n" + "list.add(\"Rule without agenda group executed\");\n" + "end\n"; KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL ) .build() .newKieSession(); ksession.setGlobal( "list", new ArrayList<String>() ); ksession.getAgenda().getAgendaGroup( "first-agenda" ).setFocus(); ksession.getAgenda().getAgendaGroup( "first-agenda" ).clear(); ksession.fireAllRules(); ArrayList<String> list = (ArrayList<String>) ksession.getGlobal( "list" ); assertEquals( 1, list.size() ); assertEquals( "Rule without agenda group executed", list.get( 0 ) ); }
@Test public void testClearActivationGroupCommandNoImmediatePropagation() { // DROOLS-865 String drl = "package org.kie.test\n" + "global java.util.List list\n" + "rule \"Rule in first agenda group\"\n" + "agenda-group \"first-agenda\"\n" + "salience 10\n" + "when\n" + "then\n" + "list.add(\"Rule in first agenda group executed\");\n" + "end\n" + "rule \"Rule without agenda group\"\n" + "salience 100\n" + "when\n" + "then\n" + "list.add(\"Rule without agenda group executed\");\n" + "end\n"; KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL ) .build() .newKieSession(); ksession.setGlobal( "list", new ArrayList<String>() ); ksession.getAgenda().getAgendaGroup( "first-agenda" ).setFocus(); ksession.getAgenda().getAgendaGroup( "first-agenda" ).clear(); ksession.fireAllRules(); ArrayList<String> list = (ArrayList<String>) ksession.getGlobal( "list" ); assertEquals( 1, list.size() ); assertEquals( "Rule without agenda group executed", list.get( 0 ) ); }
((InternalAgenda) session.getAgenda()).agendaSize() );
((InternalAgenda) session.getAgenda()).agendaSize());
@Test public void testModifyWithLockOnActive() throws Exception { final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_ModifyWithLockOnActive.drl")); final KieSession session = createKnowledgeSession(kbase); final List results = new ArrayList(); session.setGlobal("results", results); final Person bob = new Person("Bob", 15); final Person mark = new Person("Mark", 16); final Person michael = new Person("Michael", 14); session.insert(bob); session.insert(mark); session.insert(michael); session.getAgenda().getAgendaGroup("feeding").setFocus(); session.fireAllRules(5); assertEquals(2, ((List) session.getGlobal("results")).size()); }
((InternalAgenda) ksession.getAgenda()).agendaSize() ); ksession.fireAllRules(); assertEquals( 5,
Agenda agenda = kieSession.getAgenda(); agenda.getAgendaGroup( "two" ).setFocus(); agenda.getAgendaGroup( "one" ).setFocus();
@Test public void testLockOnActive() throws Exception { KieBase kbase = loadKnowledgeBase("test_LockOnActive.drl"); KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal( "list", list ); // AgendaGroup "group1" is not active, so should receive activation final Cheese brie12 = new Cheese( "brie", 12 ); ksession.insert( brie12 ); ((InternalWorkingMemory)ksession).flushPropagations(); InternalAgenda agenda = ((InternalAgenda) ksession.getAgenda()); final AgendaGroup group1 = agenda.getAgendaGroup( "group1" ); assertEquals( 1, group1.size() ); ksession.getAgenda().getAgendaGroup("group1").setFocus( ); // AgendaqGroup "group1" is now active, so should not receive activations final Cheese brie10 = new Cheese( "brie", 10 ); ksession.insert( brie10 ); assertEquals( 1, group1.size() ); final Cheese cheddar20 = new Cheese( "cheddar", 20 ); ksession.insert( cheddar20 ); final AgendaGroup group2 = agenda.getAgendaGroup( "group1" ); assertEquals( 1, group2.size() ); agenda.setFocus(group2); final Cheese cheddar17 = new Cheese( "cheddar", 17 ); ksession.insert( cheddar17 ); assertEquals( 1, group2.size() ); }
@Test public void testNullPointerOnModifyWithLockOnActive() { // JBRULES-3234 String str = "package org.kie.test \n" + "import org.drools.compiler.Person; \n" + "rule 'Rule 1' agenda-group 'g1' lock-on-active when \n" + " $p : Person( age != 35 ) \n" + " then \n" + " modify( $p ) { setAge( 35 ) }; \n" + "end \n" + "rule 'Rule 2' agenda-group 'g1' no-loop when \n" + " $p: Person( age == 35) \n" + " then \n" + " modify( $p ) { setAge( 36 ) }; \n" + "end \n"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); Person p = new Person( "darth", 36 ); FactHandle fh = (FactHandle) ksession.insert( p ); ksession.getAgenda().getAgendaGroup( "g1" ).setFocus(); ksession.fireAllRules(); ksession.update( fh, p ); // normally NPE thrown here, for BUG assertEquals( 36, p.getAge() ); }
@Test public void testAccumulate2() throws Exception { String str = "package org.drools\n" + "\n" + "import org.drools.compiler.Message\n" + "\n" + "rule MyRule\n" + " when\n" + " Number( intValue >= 5 ) from accumulate ( m: Message( ), count( m ) )\n" + " then\n" + " System.out.println(\"Found messages\");\n" + "end\n"; KieBase kBase = loadKnowledgeBaseFromString(str); KieSession ksession = kBase.newKieSession(); ksession = getSerialisedStatefulKnowledgeSession( ksession, true ); ksession.insert( new Message() ); ksession.insert( new Message() ); ksession.insert( new Message() ); ksession.insert( new Message() ); ksession.insert( new Message() ); ((InternalWorkingMemory)ksession).flushPropagations(); assertEquals( 1, ((InternalAgenda) ksession.getAgenda()).agendaSize() ); }
wm.flushPropagations(); final InternalAgenda agenda = (InternalAgenda) ksession.getAgenda(); final AgendaGroup group1 = agenda.getAgendaGroup( "group1" ); agenda.setFocus( group1 );