protected KieBase createKnowledgeBaseFromResources(Resource... process) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); if (process.length > 0) { KieFileSystem kfs = ks.newKieFileSystem(); for (Resource p : process) { kfs.write(p); } KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository // if successfully built. if (kb.getResults().hasMessages(Level.ERROR)) { throw new RuntimeException("Build Errors:\n" + kb.getResults().toString()); } } KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); return kContainer.getKieBase(); }
@Test public void testSignalStartDynamic() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SignalStart.bpmn2"); ksession = createKnowledgeSession(kbase); // create KieContainer after session was created to make sure no runtime data // will be used during serialization (deep clone) KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); kContainer.getKieBase(); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { logger.info("{}", event.getProcessInstance().getId()); list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("MySignal", "NewValue"); assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); // now remove the process from kbase to make sure runtime based listeners are removed from signal manager kbase.removeProcess("Minimal"); assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> { ksession.signalEvent("MySignal", "NewValue"); }) .withMessageContaining("Unknown process ID: Minimal"); // must be still one as the process was removed assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); }
@Test public void testNoPomAndProjectXml() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; ReleaseId releaseId = KieServices.Factory.get().getRepository().getDefaultReleaseId(); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); MemoryFileSystem mfs = ((KieFileSystemImpl)kfs).asMemoryFileSystem(); createAndTestKieContainer( releaseId, createKieBuilder( kfs ), null ); }
private void createOsgiKieModule() { configFileURL = getConfigFileURL(); if (releaseId == null) { releaseId = KieRepositoryImpl.INSTANCE.getDefaultReleaseId(); } KieModuleModel kieModuleModel = getKieModuleModel(); KieBuilderImpl.setDefaultsforEmptyKieModule(kieModuleModel); injectKieModule(kieModuleModel); InternalKieModule internalKieModule = createOsgiKModule(kieModuleModel); if ( internalKieModule != null ) { KieServices ks = KieServices.Factory.get(); ks.getRepository().addKieModule(internalKieModule); log.info(" :: Added KieModule From KieObjectsInjector ::"); } }
protected KieBase createKnowledgeBaseFromResources(Resource... cases) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); if (cases.length > 0) { KieFileSystem kfs = ks.newKieFileSystem(); for (Resource c : cases) { kfs.write(c); } KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository // if successfully built. if (kb.getResults().hasMessages(Level.ERROR)) { throw new RuntimeException("Build Errors:\n" + kb.getResults().toString()); } } KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); return kContainer.getKieBase(); } }
private KieSession getKieSession(Resource dt) { KieServices ks = populateKieFileSystem( dt ); // get the session KieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); return ksession; }
@Test public void testNoPomXml() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject( namespace ); ReleaseId releaseId = KieServices.Factory.get().getRepository().getDefaultReleaseId(); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generateKProjectXML( kfs, namespace, kProj ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); MemoryFileSystem mfs = ((KieFileSystemImpl)kfs).asMemoryFileSystem(); createAndTestKieContainer( releaseId, createKieBuilder( kfs ), namespace ); }
private void createOsgiKieModule() { configFileURL = getConfigFileURL(); if (releaseId == null) { releaseId = KieRepositoryImpl.INSTANCE.getDefaultReleaseId(); } KieModuleModel kieModuleModel = getKieModuleModel(); KieBuilderImpl.setDefaultsforEmptyKieModule(kieModuleModel); injectKieModule(kieModuleModel); InternalKieModule internalKieModule = createOsgiKModule(kieModuleModel); if ( internalKieModule != null ) { KieServices ks = KieServices.Factory.get(); ks.getRepository().addKieModule(internalKieModule); log.info(" :: Added KieModule From KieObjectsInjector ::"); } }
protected KieBase createKnowledgeBaseFromDisc(String process) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write(res); KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); KieBase kbase = kContainer.getKieBase(); kfs.write(ResourceFactory.newFileResource(packageFile)); kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); kbase = kContainer.getKieBase();
private StatelessKieSession getStatelessKieSession(Resource dt) { KieServices ks = populateKieFileSystem( dt ); // get the session StatelessKieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newStatelessKieSession(); return ksession; }
@Test public void testWildcardImportForTypeField() throws Exception { // DROOLS-348 String drl = "import java.util.*\n" + "declare MyType\n" + " l : List\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); }
@Test public void testDurationAnnotationOnKie() { // DROOLS-94 String str = "package org.drools.compiler.integrationtests;\n" + "import org.drools.compiler.integrationtests.Misc2Test.SimpleEvent\n" + "declare SimpleEvent\n" + " @role(event)\n" + " @duration(duration)\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", str ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); }
@Test public void testVeyifyNotExistingKieBase() throws Exception { // DROOLS-2757 KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", createDrl( "R1" ) ); ks.newKieBuilder( kfs ).buildAll(); KieContainer kieContainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()); try { kieContainer.verify( "notexistingKB" ); fail("Verifying a not existing KieBase should throw a RuntimeException"); } catch (RuntimeException e) { assertTrue( e.getMessage().contains( "notexistingKB" ) ); } }
@Test public void testNestedNots3() { // DROOLS-444 String str = "package org.test; " + "rule negation_distributed_partially_no_sharing " + "when " + " (not String()) " + " and " + " (not (Double() and Integer())) " + "then " + " System.out.println(\"firing\"); " + "end"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", str ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); int n = ksession.fireAllRules(); assertEquals( 1, n ); }
@Test public void testHelloWorld() throws Exception { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", createDrl( "R1" ) ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); ksession.insert(new Message("Hello World")); int count = ksession.fireAllRules(); assertEquals( 1, count ); }
@Test public void testHelloWorldWithEmptyFile() throws Exception { String drl = createDrl("R1"); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem() .write("src/main/resources/r1.drl", drl) .write( "src/main/resources/empty.drl", ks.getResources().newInputStreamResource( new ByteArrayInputStream( new byte[0] ) ) ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); ksession.insert(new Message("Hello World")); int count = ksession.fireAllRules(); assertEquals( 1, count ); }
@Test public void testSerializationUntrustedMvelConsequence() { String drl = "package org.foo.bar\n" + "rule R1 dialect \"mvel\" when\n" + "then\n" + " System.exit(0);" + "end\n"; try { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write(ResourceFactory.newByteArrayResource(drl.getBytes()) .setSourcePath("org/foo/bar/r1.drl")); ks.newKieBuilder(kfs).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); KieContainer kc = ks.newKieContainer(releaseId); KieBase kbase = kc.getKieBase(); kbase = SerializationHelper.serializeObject( kbase ); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.toString()); // test succeeded. the policy in place prevented the rule from executing the System.exit(). } }
@Test public void testUntrustedEnabled() { String drl = "package org.foo.bar\n" + "import "+MaliciousExitHelper.class.getName().replace('$', '.')+" \n" + "rule R1 enabled( MaliciousExitHelper.isEnabled() ) \n" + "when\n" + "then\n" + "end\n"; try { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write(ResourceFactory.newByteArrayResource(drl.getBytes()) .setSourcePath("org/foo/bar/r1.drl")); ks.newKieBuilder(kfs).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); KieContainer kc = ks.newKieContainer(releaseId); KieSession ksession = kc.newKieSession(); ksession.fireAllRules(); Assert.fail("The security policy for the rule should have prevented this from executing..."); } catch (ShouldHavePrevented e) { Assert.fail("The security policy for the rule should have prevented this from executing..."); } catch (Exception e) { // test succeeded. the policy in place prevented the rule from executing the System.exit(). } }
@Test public void testClassLoaderStore() throws Exception { // DROOLS-1766 String drl = "package org; declare Person name : String end"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); ks.newKieBuilder( kfs ).buildAll(); KieContainer kcontainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()); KieProject kieProject = (( KieContainerImpl ) kcontainer).getKieProject(); ResultsImpl messages = kieProject.verify(); assertSame( kieProject.getClassLoader(), kcontainer.getClassLoader() ); ProjectClassLoader pcl = (( ProjectClassLoader ) kieProject.getClassLoader()); assertNotNull( pcl.getStore().get("org/Person.class") ); }
@Test public void testUntrustedJavaSalience() { String drl = "package org.foo.bar\n" + "import "+MaliciousExitHelper.class.getName().replace('$', '.')+" \n" + "rule R1 dialect \"java\" salience( MaliciousExitHelper.exit() ) \n" + "when\n" + "then\n" + "end\n"; try { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write(ResourceFactory.newByteArrayResource(drl.getBytes()) .setSourcePath("org/foo/bar/r1.drl")); ks.newKieBuilder(kfs).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); KieContainer kc = ks.newKieContainer(releaseId); KieSession ksession = kc.newKieSession(); ksession.fireAllRules(); Assert.fail("The security policy for the rule should have prevented this from executing..."); } catch (ShouldHavePrevented e) { Assert.fail("The security policy for the rule should have prevented this from executing..."); } catch (Exception e) { // test succeeded. the policy in place prevented the rule from executing the System.exit(). } }