private RuntimeEnvironment createEnvironment() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .entityManagerFactory(emf) .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-IntermediateCatchEventSignalWithRef.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-UserTask.bpmn2"), ResourceType.BPMN2) .get(); return environment; } }
@Test public void addAssetCsvXlsTest() { doNothing().when(this.kbuilder).add(any(Resource.class), any(ResourceType.class), any(ResourceConfiguration.class)); // This is to verify that 2-argument method is never called doThrow(new IllegalStateException("CSV resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); Resource resource = ResourceFactory.newClassPathResource("/data/resource.csv", getClass()); environment.addAsset(resource, ResourceType.DTABLE); doThrow(new IllegalStateException("XLS resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); resource = ResourceFactory.newClassPathResource("/data/resource.xls", getClass()); environment.addAsset(resource, ResourceType.DTABLE); // control test doThrow(new IllegalStateException("BPMN2 resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class), any(ResourceConfiguration.class)); doNothing().when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); resource = ResourceFactory.newClassPathResource("/data/resource.bpmn2", getClass()); environment.addAsset(resource, ResourceType.BPMN2); }
@Test(expected=UnsupportedOperationException.class) public void testAuditServiceNotAvailable() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultInMemoryBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-ScriptTask.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-UserTask.bpmn2"), ResourceType.BPMN2) .get(); manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); assertNotNull(manager); // ksession for process instance #1 // since there is no process instance yet we need to get new session RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); runtime.getAuditService(); }
@Test public void testExtendsAcrossFiles() throws Exception { KieSession ksession = new KieHelper() .addResource( ResourceFactory.newClassPathResource( "test_Ext1.drl", getClass() ), ResourceType.DRL ) .addResource( ResourceFactory.newClassPathResource( "test_Ext2.drl", getClass() ), ResourceType.DRL ) .addResource( ResourceFactory.newClassPathResource( "test_Ext3.drl", getClass() ), ResourceType.DRL ) .addResource( ResourceFactory.newClassPathResource( "test_Ext4.drl", getClass() ), ResourceType.DRL ) .build().newKieSession(); FactType person = ksession.getKieBase().getFactType("org.drools.compiler.ext.test","Person"); assertNotNull(person); FactType student = ksession.getKieBase().getFactType("org.drools.compiler.ext.test","Student"); assertNotNull(student); FactType worker = ksession.getKieBase().getFactType("org.drools.compiler.anothertest","Worker"); assertNotNull(worker); FactType ltss = ksession.getKieBase().getFactType("defaultpkg","SubLTStudent"); assertNotNull(ltss); Constructor ctor = worker.getFactClass().getConstructor(String.class,int.class,String.class, double.class, int.class); assertNotNull(ctor); Object w = ctor.newInstance("Adam",20,"Carpenter",150.0,40); System.out.println(w); assertEquals("Adam",worker.get(w,"name")); ksession.fireAllRules(); }
@Test public void addAssetCsvXlsReplaceConfigTest() { // config preserved ArgumentCaptor<ResourceConfiguration> resourceConfigCaptor = ArgumentCaptor.forClass(ResourceConfiguration.class); doThrow(new IllegalStateException("XLS resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); Resource resource = ResourceFactory.newClassPathResource("/data/resource.xls", getClass()); DecisionTableConfigurationImpl config = new DecisionTableConfigurationImpl(); config.setInputType(DecisionTableInputType.CSV); String worksheetName = "test-worksheet-name"; config.setWorksheetName(worksheetName); resource.setConfiguration(config); // do method environment.addAsset(resource, ResourceType.DTABLE); verify(this.kbuilder).add(any(Resource.class), any(ResourceType.class), resourceConfigCaptor.capture()); ResourceConfiguration replacedConfig = resourceConfigCaptor.getValue(); assertTrue("Not a DecisionTableConfiguration, but a " + replacedConfig.getClass().getSimpleName(), replacedConfig instanceof DecisionTableConfiguration); assertEquals("Incorrect file type", DecisionTableInputType.XLS, ((DecisionTableConfiguration) replacedConfig).getInputType()); assertEquals("Worksheet name not preserved", worksheetName, ((DecisionTableConfiguration) replacedConfig).getWorksheetName()); }
public KieSession genSession(String[] sources, int numerrors) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); for (String source : sources) kbuilder.add( ResourceFactory.newClassPathResource(source, getClass()), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( kbuilder.getErrors().size() > 0 ) { for ( KnowledgeBuilderError error : kbuilder.getErrors() ) { System.err.println( error ); } } assertEquals(numerrors, errors.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); return createKnowledgeSession(kbase); } }
private RuntimeEnvironment createEnvironment() { RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get() .newEmptyBuilder() .addEnvironmentEntry(EnvironmentName.TRANSACTION_MANAGER, new NoOpTransactionManager()) .addConfiguration("drools.processSignalManagerFactory", DefaultSignalManagerFactory.class.getName()) .addConfiguration("drools.processInstanceManagerFactory", DefaultProcessInstanceManagerFactory.class.getName()) .registerableItemsFactory(new SimpleRegisterableItemsFactory()) .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-ScriptTask.bpmn2"), ResourceType.BPMN2); return builder.get(); }
@Test public void testEventSignalingBetweenProcessesWithPeristence() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("events/throw-an-event.bpmn"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("events/start-on-event.bpmn"), ResourceType.BPMN2) .get(); assertNotNull(manager); assertNotNull(ksession); List<? extends ProcessInstanceLog> catchProcessLogs = auditService.findProcessInstances("com.sample.bpmn.Second"); assertNotNull(throwProcessLogs); assertEquals(1, throwProcessLogs.size()); assertEquals(ProcessInstance.STATE_COMPLETED, throwProcessLogs.get(0).getStatus().intValue()); assertNotNull(catchProcessLogs); assertEquals(1, catchProcessLogs.size()); assertEquals(ProcessInstance.STATE_COMPLETED, catchProcessLogs.get(0).getStatus().intValue());
@Test public void testFireAllRules() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("org/drools/compiler/integrationtests/drl/test_ImportFunctions.drl"), ResourceType.DRL); if (kbuilder.hasErrors()) { fail(kbuilder.getErrors().toString()); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); ksession = createKnowledgeSession(kbase); final Cheese cheese = new Cheese("stilton", 15); ksession.insert(cheese); List<?> list = new ArrayList(); ksession.setGlobal("list", list); List<Command<?>> commands = new ArrayList<Command<?>>(); commands.add(CommandFactory.newFireAllRules("fired")); Command<?> cmds = CommandFactory.newBatchExecution(commands); ExecutionResults result = (ExecutionResults) ksession.execute(cmds); assertNotNull("Batch execution result is null!", result); Object firedObject = result.getValue("fired"); assertTrue("Retrieved object is null or incorrect!", firedObject != null && firedObject instanceof Integer); assertEquals(4, firedObject); list = (List<?>) ksession.getGlobal("list"); assertEquals(4, list.size()); assertEquals("rule1", list.get(0)); assertEquals("rule2", list.get(1)); assertEquals("rule3", list.get(2)); assertEquals("rule4", list.get(3)); }
@Test public void testRuleFlowUpgrade() throws Exception { final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); // Set the system property so that automatic conversion can happen System.setProperty( "drools.ruleflow.port", "true" ); kbuilder.add( ResourceFactory.newClassPathResource("ruleflow.drl", ExecutionFlowControlTest.class), ResourceType.DRL); kbuilder.add( ResourceFactory.newClassPathResource("ruleflow40.rfm", ExecutionFlowControlTest.class), ResourceType.DRF); KieBase kbase = kbuilder.newKieBase(); final KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal("list", list); ksession.fireAllRules(); assertEquals(0, list.size()); final ProcessInstance processInstance = ksession.startProcess("0"); assertEquals( ProcessInstance.STATE_COMPLETED, processInstance.getState() ); assertEquals( 4, list.size() ); assertEquals( "Rule1", list.get( 0 ) ); list.subList(1,2).contains( "Rule2" ); list.subList(1,2).contains( "Rule3" ); assertEquals( "Rule4", list.get( 3 ) ); assertEquals( ProcessInstance.STATE_COMPLETED, processInstance.getState() ); // Reset the system property so that automatic conversion should not happen System.setProperty("drools.ruleflow.port", "false"); }
@Test public void addAssetXLSDtableWithOwnConfigTest() { Resource resource = ResourceFactory.newClassPathResource("/data/resource.xls", getClass()); DecisionTableConfigurationImpl config = new DecisionTableConfigurationImpl(); config.setInputType(DecisionTableInputType.XLS); String worksheetName = "test-worksheet-name"; config.setWorksheetName(worksheetName); resource.setConfiguration(config); environment.addAsset(resource, ResourceType.DTABLE); verify(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); } }
private RuntimeEnvironment createEnvironment() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .entityManagerFactory(emf) .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("adhoc-subprocess.bpmn2"), ResourceType.BPMN2) .get(); return environment; } }
@Test public void testEventSignalingBetweenProcessesWithPeristence() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("events/throw-an-event.bpmn"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("events/start-on-event.bpmn"), ResourceType.BPMN2) .get(); manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); assertNotNull(manager); RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); ksession.startProcess("com.sample.bpmn.hello"); AuditService auditService = runtime.getAuditService(); List<? extends ProcessInstanceLog> throwProcessLogs = auditService.findProcessInstances("com.sample.bpmn.hello"); List<? extends ProcessInstanceLog> catchProcessLogs = auditService.findProcessInstances("com.sample.bpmn.Second"); assertNotNull(throwProcessLogs); assertEquals(1, throwProcessLogs.size()); assertEquals(ProcessInstance.STATE_COMPLETED, throwProcessLogs.get(0).getStatus().intValue()); assertNotNull(catchProcessLogs); assertEquals(1, catchProcessLogs.size()); assertEquals(ProcessInstance.STATE_COMPLETED, catchProcessLogs.get(0).getStatus().intValue()); manager.disposeRuntimeEngine(runtime); manager.close(); }
@Test public void testQuery() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("org/drools/compiler/integrationtests/simple_query_test.drl"), ResourceType.DRL); if (kbuilder.hasErrors()) { fail(kbuilder.getErrors().toString()); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); ksession = createKnowledgeSession(kbase); ksession.insert( new Cheese( "stinky", 5 ) ); ksession.insert( new Cheese( "smelly", 7 ) ); List<Command<?>> commands = new ArrayList<Command<?>>(); commands.add(CommandFactory.newQuery("numStinkyCheeses", "simple query")); Command<?> cmds = CommandFactory.newBatchExecution(commands); ExecutionResults result = (ExecutionResults) ksession.execute(cmds); assertNotNull("Batch execution result is null!", result); Object queryResultsObject = result.getValue("numStinkyCheeses"); assertTrue("Retrieved object is null or incorrect!", queryResultsObject != null && queryResultsObject instanceof QueryResults); assertEquals( 1, ((QueryResults) queryResultsObject).size() ); }
@Test public void testIntegregation() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("changeset1Test.xml", getClass()), ResourceType.CHANGE_SET ); assertFalse( kbuilder.hasErrors() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); KieSession ksession = createKnowledgeSession(kbase); List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.fireAllRules(); ksession.dispose(); assertEquals( 2, list.size() ); assertTrue( list.containsAll( Arrays.asList( new String[]{"rule1", "rule2"} ) ) ); }
@Test public void testCallActivity() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.bpmn2"), ResourceType.BPMN2); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.bpmn2"), ResourceType.BPMN2); if (!kbuilder.getErrors().isEmpty()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { logger.error("{}", error); } throw new IllegalArgumentException("Errors while parsing knowledge base"); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); KieSession ksession = createKnowledgeSession(kbase); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", "oldValue"); ProcessInstance processInstance = ksession.startProcess("ParentProcess", params); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_COMPLETED); assertThat(((WorkflowProcessInstance) processInstance).getVariable("y")).isEqualTo("new value"); }
private RuntimeEnvironment createEnvironment() { countDownListener = new NodeLeftCountDownProcessEventListener("timer", numberOfChildProcesses); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .entityManagerFactory(emf) .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("reusable-subprocess/Parent.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("reusable-subprocess/Child.bpmn2"), ResourceType.BPMN2) .registerableItemsFactory(new DefaultRegisterableItemsFactory(){ @Override public List<ProcessEventListener> getProcessEventListeners( RuntimeEngine runtime) { List<ProcessEventListener> listeners = super.getProcessEventListeners(runtime); listeners.add(countDownListener); return listeners; } }) .get(); return environment; } }
@Test public void testEventSignalingBetweenProcessesWithPeristence() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("events/throw-an-event.bpmn"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("events/start-on-event.bpmn"), ResourceType.BPMN2) .get(); assertNotNull(manager); assertNotNull(ksession); List<? extends ProcessInstanceLog> catchProcessLogs = auditService.findProcessInstances("com.sample.bpmn.Second"); assertNotNull(throwProcessLogs); assertEquals(1, throwProcessLogs.size()); assertEquals(ProcessInstance.STATE_COMPLETED, throwProcessLogs.get(0).getStatus().intValue()); assertNotNull(catchProcessLogs); assertEquals(1, catchProcessLogs.size()); assertEquals(ProcessInstance.STATE_COMPLETED, catchProcessLogs.get(0).getStatus().intValue());
@Test public void testErrorLineNumbers() throws Exception { kbuilder.add(ResourceFactory.newClassPathResource("errors_in_rule.drl", getClass()), ResourceType.DRL); assertEquals(3, errors.length); assertNotNull(stiltonError.getDescr()); assertTrue(stiltonError.getLine() != -1); assertEquals(stiltonError.getLine(), stiltonError.getDescr().getLine()); assertEquals(26, stiltonError.getLine());
private RuntimeEnvironment createEnvironment(NodeLeftCountDownProcessEventListener countDownListener) { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .entityManagerFactory(emf) .userGroupCallback(userGroupCallback) .registerableItemsFactory(new DefaultRegisterableItemsFactory(){ @Override public List<ProcessEventListener> getProcessEventListeners(RuntimeEngine runtime) { List<ProcessEventListener> listeners = super.getProcessEventListeners(runtime); listeners.add(countDownListener); return listeners; } }) .addAsset(ResourceFactory.newClassPathResource("BPMN2-TimerInitFailure.bpmn2"), ResourceType.BPMN2) .get(); return environment; } }