public KieSession createKieSession(boolean serializeKbase, KiePackage... pkg) throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(Arrays.asList(pkg)); if( serializeKbase ) { kbase = JbpmSerializationHelper.serializeObject( kbase ); } KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(); conf.setOption( ForceEagerActivationOption.YES ); return kbase.newKieSession(conf, null); }
@Test public void testSplitWithProcessInstanceConstraint2() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Reader source = new StringReader( "<process xmlns=\"http://drools.org/drools-5.0/process\"" + Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages(); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kpkgs ); KieSession ksession = kbase.newKieSession(); List<Long> list = new ArrayList<Long>(); ksession.setGlobal("list", list); ksession.startProcess("org.jbpm.process-split", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance1.getState()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance2.getState()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance3.getState()); assertEquals(2, list.size());
@Test public void testAssertObjectWithNoMatchingObjectTypeNode() { StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession(); final Rete rete = kBase.getRete(); assertEquals(1, rete.getObjectTypeNodes().size()); List list = new ArrayList(); ksession.insert(list); ksession.fireAllRules(); assertEquals(1, rete.getObjectTypeNodes().size()); }
@Test public void testPathMemorySizeAfterSegmentMergeNonInitialized() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) B(1;)\n" ); kbase1.addPackages( buildKnowledgePackage("r2", " A(1;)\n") ); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); RuleTerminalNode rtn1 = getRtn( "org.kie.r1", kbase1 ); RuleTerminalNode rtn2 = getRtn( "org.kie.r2", kbase1 ); assertEquals( 2, wm.getNodeMemory(rtn1).getSegmentMemories().length ); assertEquals( 2, wm.getNodeMemory(rtn2).getSegmentMemories().length ); kbase1.removeRule("org.kie", "r2"); assertEquals( 1, wm.getNodeMemory(rtn1).getSegmentMemories().length ); }
@Test public void testAdd() { /* * create a RuleBase with a single ObjectTypeNode we attach a * MockObjectSink so we can detect assertions and retractions */ InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(); BuildContext context = new BuildContext(kBase); NodeFactory nFacotry = kBase.getConfiguration().getComponentFactory().getNodeFactoryService(); EntryPointNode entryPoint = context.getKnowledgeBase().getRete().getEntryPointNodes().values().iterator().next(); final ObjectTypeNode objectTypeNode = nFacotry.buildObjectTypeNode( 0, entryPoint, new ClassObjectType( Object.class ), context ); objectTypeNode.attach(context); final MockObjectSink sink = new MockObjectSink(); objectTypeNode.addObjectSink( sink ); kBase.newKieSession(); // objectTypeNode. }
@Before public void setUp() { InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(); ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession(); tms = ((NamedEntryPoint)ksession.getWorkingMemoryEntryPoint( EntryPointId.DEFAULT.getEntryPointId() ) ).getTruthMaintenanceSystem(); }
@Test public void testWorkItemImmediateCompletion() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + kbuilder.add( ResourceFactory.newReaderResource( source ), ResourceType.DRF ); Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages(); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kpkgs ); KieSession ksession = kbase.newKieSession(); WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess("org.drools.actions", parameters); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
@Test public void test1() { StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession(); final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1, this.entryPoint, new ClassObjectType( State.class ), buildContext ); objectTypeNode.attach(buildContext); final MockObjectSink sink = new MockObjectSink(); objectTypeNode.addObjectSink( sink ); final State a = new State( "go" ); ksession.insert( a, true ); ksession.fireAllRules(); assertEquals( 1, sink.getAsserted().size() ); a.setState( "stop" ); }
@Test public void testPopulatedSharedLiaNodeNoBeta() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A()\n"); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); List list = new ArrayList(); wm.setGlobal("list", list); A a1 = new A(1); InternalFactHandle fh1 = (InternalFactHandle) wm.insert(a1); A a2 = new A(2); InternalFactHandle fh2 = (InternalFactHandle) wm.insert(a2); wm.fireAllRules(); assertEquals( 2, list.size() ); kbase1.addPackages( buildKnowledgePackage("r2", " a : A()\n") ); wm.fireAllRules(); assertEquals( 4, list.size() ); kbase1.removeRule("org.kie", "r1"); kbase1.removeRule("org.kie", "r2"); list.clear(); assertNull( fh1.getFirstLeftTuple() ); assertNull( fh2.getFirstLeftTuple() ); wm.update( fh1,a1 ); wm.update( fh2,a2 ); wm.fireAllRules(); assertEquals( 0, list.size() ); }
@Test public void testObjectIterator() { InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(); KieSession ksession = kBase.newKieSession(); ksession.insert( new Person( "bob", 35) ); ksession.insert( new Cheese( "stilton", 35) ); ksession.insert( new Cheese( "brie", 35) ); ksession.insert( new Person( "steve", 55) ); ksession.insert( new Person( "tom", 100) ); int i = 0; for ( FactHandle fh : ksession.getFactHandles()) { if ( i++ > 5 ) { fail( "should not iterate for than 3 times" ); } } i = 0; for ( FactHandle fh : ksession.getFactHandles()) { if ( i++ > 5 ) { fail( "should not iterate for than 3 times" ); } } }
@Before public void setup() { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); ksession = kbase.newKieSession(); runner = ExecutableRunner.create(); context = ( (RegistryContext) runner.createContext() ).register( KieSession.class, ksession ); }
@Test public void testMappingUpgrade() throws Exception { String rule = "package org.test;\n"; rule += "end"; KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); builder.add( new ReaderResource( new StringReader( rule )), ResourceType.DRL ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( builder.getKnowledgePackages() ); KieSession session = kbase.newKieSession(); TestWorkItemHandler handler = new TestWorkItemHandler(); session.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.test.ruleflow"); assertEquals(1, session.getProcessInstances().size()); assertEquals("org.test.ruleflow2", processInstance.getProcessId()); assertEquals(1, list.size()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
@Test public void testSimpleExpression() { StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession(); final Person p = new Person( "mark", "", 31 ); final InternalFactHandle f0 = (InternalFactHandle) ksession.insert( p ); final LeftTupleImpl tuple = new LeftTupleImpl( f0, null, true ); RuleTerminalNode rtn = new RuleTerminalNode(); rtn.setSalienceDeclarations( context.getDeclarationResolver().getDeclarations( context.getRule() ).values().toArray( new Declaration[1] ) ); AgendaItem item = new AgendaItemImpl(0, tuple, 0, null, rtn, null); assertEquals( 25, context.getRule().getSalience().getValue( new DefaultKnowledgeHelper( item, ksession ), context.getRule(), ksession ) ); }
@Test public void testPathMemorySizeAfterSegmentMerge() throws Exception { InternalKnowledgeBase kbase1 = buildKnowledgeBase("r1", " A(1;) B(1;)\n" ); kbase1.addPackages( buildKnowledgePackage("r2", " A(1;)\n") ); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase1.newKieSession()); List list = new ArrayList(); wm.setGlobal("list", list); // trigger segment initialization wm.insert(new A(1)); wm.insert(new B(1)); wm.fireAllRules(); RuleTerminalNode rtn1 = getRtn( "org.kie.r1", kbase1 ); RuleTerminalNode rtn2 = getRtn( "org.kie.r2", kbase1 ); assertEquals( 2, wm.getNodeMemory(rtn1).getSegmentMemories().length ); assertEquals( 2, wm.getNodeMemory(rtn2).getSegmentMemories().length ); kbase1.removeRule("org.kie", "r2"); assertEquals( 1, wm.getNodeMemory(rtn1).getSegmentMemories().length ); }
@Test public void testMultipleTimers() throws Exception { Reader source = new StringReader( InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(Arrays.asList(builder.getPackages())); session = kbase.newKieSession(conf, null); assertEquals(0, myList.size()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(2, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
@Test public void testDefaultUpgrade() throws Exception { String rule = "package org.test;\n"; rule += "end"; KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); builder.add( new ReaderResource( new StringReader( rule )), ResourceType.DRL ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( builder.getKnowledgePackages() ); KieSession session = kbase.newKieSession(); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.test.ruleflow"); assertEquals(1, session.getProcessInstances().size()); assertEquals("org.test.ruleflow2", processInstance.getProcessId()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); assertEquals(1, list.size());
@Test public void testCompositeMappingUpgrade() throws Exception { String rule = "package org.test;\n"; rule += "end"; KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); builder.add(new ByteArrayResource(rule.getBytes()), ResourceType.DRL); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( builder.getKnowledgePackages() ); KieSession session = kbase.newKieSession(); TestWorkItemHandler handler = new TestWorkItemHandler(); session.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.test.ruleflow"); assertEquals(1, session.getProcessInstances().size()); assertEquals("org.test.ruleflow2", processInstance.getProcessId()); assertEquals(1, list.size()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
@Test public void testWorkItem() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "</process>"); kbuilder.add( ResourceFactory.newReaderResource( source ), ResourceType.DRF ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); KieSession ksession = kbase.newKieSession(); WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess("org.drools.actions", parameters); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); WorkItem workItem = handler.getWorkItem(); assertNotNull(workItem); assertEquals("John Doe", workItem.getParameter("ActorId")); assertEquals("John Doe", workItem.getParameter("Content")); assertEquals("John Doe", workItem.getParameter("Comment")); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
@Test public void testProcessEventListenerProcessState() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); List<KiePackage> pkgs = new ArrayList<KiePackage>(); pkgs.add(pkg); kbase.addPackages(pkgs); KieSession session = kbase.newKieSession(); final List<Integer> processEventStatusList = new ArrayList<Integer>(); final ProcessEventListener processEventListener = new ProcessEventListener() { assertEquals(2, processEventStatusList.size()); assertEquals(new Integer(ProcessInstance.STATE_ACTIVE), processEventStatusList.get(0)); assertEquals(new Integer(ProcessInstance.STATE_COMPLETED), processEventStatusList.get(1));
@Test public void testProcessEventListener() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); List<KiePackage> pkgs = new ArrayList<KiePackage>(); pkgs.add( pkg ); kbase.addPackages( pkgs ); KieSession session = kbase.newKieSession(); final List<ProcessEvent> processEventList = new ArrayList<ProcessEvent>(); final ProcessEventListener processEventListener = new ProcessEventListener() { assertEquals( 16, processEventList.size() ); assertEquals( "org.drools.core.process.event", ((ProcessStartedEvent) processEventList.get(0)).getProcessInstance().getProcessId()); assertEquals( "Start", ((ProcessNodeTriggeredEvent) processEventList.get(1)).getNodeInstance().getNodeName()); assertEquals( "Start", ((ProcessNodeLeftEvent) processEventList.get(2)).getNodeInstance().getNodeName()); assertEquals( "Print", ((ProcessNodeTriggeredEvent) processEventList.get(3)).getNodeInstance().getNodeName());