KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem(); FileInputStream fis = new FileInputStream( pathToSomeDrl ); kfs.write( "src/main/resources/simple.drl", kieServices.getResources().newInputStreamResource( fis ) ); KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll(); Results results = kieBuilder.getResults(); if( results.hasMessages( Message.Level.ERROR ) ){ System.out.println( results.getMessages() ); throw new IllegalStateException( "### errors ###" ); } KieContainer kieContainer = kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() ); KieBase kieBase = kieContainer.getKieBase(); KieSession kieSession = kieContainer.newKieSession();
@Test public void testIncrementalProcessCompilation() throws Exception { String invalidProcessDefinition = getResource( "/BPMN2-Incremental-Build-Invalid.bpmn2" ); String validProcessDefinition = getResource( "/BPMN2-Incremental-Build-Valid.bpmn2" ); KieServices ks = KieServices.Factory.get(); //This process file contains 4 errors KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/p1.bpmn2", invalidProcessDefinition ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); Results results = kieBuilder.getResults(); assertEquals( 3, results.getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); //This process file has the errors fixed kfs.write("src/main/resources/p1.bpmn2", validProcessDefinition); IncrementalResults addResults = ((InternalKieBuilder)kieBuilder).createFileSet("src/main/resources/p1.bpmn2").build(); //I'd expect the 4 previous errors to be cleared assertEquals( 0, addResults.getAddedMessages().size() ); assertEquals( 3, addResults.getRemovedMessages().size() ); }
private void testInvalid(final String drl) { final KieServices ks = KieServices.Factory.get(); final KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); final Results results = ks.newKieBuilder( kfs ).buildAll().getResults(); assertTrue( results.hasMessages( Message.Level.ERROR ) ); }
kieFileSystem.write(kieResources.newClassPathResource(scoreDrl, "UTF-8", actualClassLoader)); + ") does not exist."); kieFileSystem.write(kieResources.newFileSystemResource(scoreDrlFile, "UTF-8")); KieModuleModel kmodel = kieServices.newKieModuleModel() .setConfigurationProperty(PropertySpecificOption.PROPERTY_NAME, PropertySpecificOption.ALLOWED.toString()); kieFileSystem.writeKModuleXML(kmodel.toXML()); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); Results results = kieBuilder.getResults(); if (results.hasMessages(Message.Level.ERROR)) { throw new IllegalStateException("There are errors in a score DRL:\n" + results.toString()); } else if (results.hasMessages(Message.Level.WARNING)) { logger.warn("There are warning in a score DRL:\n{}", results); kieContainer = kieServices.newKieContainer(kieBuilder.getKieModule().getReleaseId()); KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration(); KieBase kieBase = kieContainer.newKieBase(kieBaseConfiguration); if (BooleanUtils.isTrue(generateDroolsTestOnError)) { return new TestGenLegacyDroolsScoreDirectorFactory<>(solutionDescriptor, kieBase, scoreDrlList, scoreDrlFileList);
KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.generateAndWritePomXML( ks.newReleaseId( "test", "foo", "1.0" ) ); KieModuleModel km = ks.newKieModuleModel(); km.newKieBaseModel( "rules" ) .addPackage( "org.drools.compiler.test2" ) .addPackage( "org.drools.compiler.test1" ); kfs.writeKModuleXML( km.toXML() ); KieResources kr = ks.getResources(); .setSourcePath( "org/drools/compiler/test2/p2.drl" ); kfs.write( r1 ); kfs.write( r2 ); KieBuilder builder = ks.newKieBuilder( kfs ); builder.buildAll(); assertEquals( Collections.emptyList(), builder.getResults().getMessages( Message.Level.ERROR ) ); KieContainer kc = ks.newKieContainer(builder.getKieModule().getReleaseId()); FactType ft = kc.getKieBase( "rules" ).getFactType( "org.drools.compiler.test2", "Child" );
@Test(timeout = 10000L) public void testSequentialWithNoLoop() throws Exception { // BZ-1228098 String str = "package org.drools.compiler.test\n" + "import \n" + Message.class.getCanonicalName() + ";" + "rule R1 no-loop when\n" + " $s : String( )" + " $m : Message( )\n" + "then\n" + " modify($m) { setMessage($s) };\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write("src/main/resources/r0.drl", str); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); Results results = kieBuilder.getResults(); if (results.hasMessages( org.kie.api.builder.Message.Level.ERROR)) { throw new RuntimeException(results.getMessages().toString()); } KieContainer kieContainer = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ); KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration(); kieBaseConf.setOption( SequentialOption.YES ); StatelessKieSession sequentialKsession = kieContainer.newKieBase( kieBaseConf ).newStatelessKieSession(); List result = (List) sequentialKsession.execute( CommandFactory.newInsertElements(Arrays.asList("test", new Message()))); assertEquals( 2, result.size() ); StatelessKieSession ksession = kieContainer.getKieBase().newStatelessKieSession(); result = (List) ksession.execute( CommandFactory.newInsertElements(Arrays.asList("test", new Message()))); assertEquals( 2, result.size() ); }
protected InternalKieModule createKieJar(KieServices ks, ReleaseId releaseId, List<String> resources ) { KieFileSystem kfs = createKieFileSystemWithKProject(ks); kfs.writePomXML( getPom(releaseId) ); for (String resource : resources) { kfs.write("src/main/resources/rules/" + resource, ResourceFactory.newClassPathResource(resource)); } KieBuilder kieBuilder = ks.newKieBuilder(kfs); if (!kieBuilder.buildAll().getResults().getMessages().isEmpty()) { for (Message message : kieBuilder.buildAll().getResults().getMessages()) { logger.error("Error Message: ({}) {}", message.getPath(), message.getText()); } throw new RuntimeException( "There are errors builing the package, please check your knowledge assets!"); } return ( InternalKieModule ) kieBuilder.getKieModule(); }
@Test(expected = IllegalStateException.class) public void testAPIUsageSnippetForDocumentation() { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.kie", "dmn-test-" + UUID.randomUUID(), "1.0"); Resource dmnResource = ks.getResources().newClassPathResource("incomplete_expression.dmn", this.getClass()); KieFileSystem kfs = ks.newKieFileSystem() .generateAndWritePomXML(releaseId) .write(dmnResource); KieBuilder kieBuilder = ks.newKieBuilder(kfs) .buildAll(); Results results = kieBuilder.getResults(); if (results.hasMessages(Message.Level.ERROR)) { throw new IllegalStateException(results.getMessages(Message.Level.ERROR).toString()); } } }
@Test( expected = UnsupportedOperationException.class ) public void testPreventReflectionAPIsOnJavaClasses() { String drl = "package org.test; " + // existing java class "declare org.drools.compiler.Person " + " @role(event) " + "end \n" + ""; KieBuilder kieBuilder = build(drl); assertFalse( kieBuilder.getResults().hasMessages( Message.Level.ERROR ) ); KieBase kieBase = KieServices.Factory.get().newKieContainer( kieBuilder.getKieModule().getReleaseId() ).getKieBase(); FactType type = kieBase.getFactType( "org.drools.compiler", "Person" ); }
@Test public void testKieModuleDependencies() throws ClassNotFoundException, InterruptedException, IOException { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId(namespace1, "memory", "1.0"); KieModuleModel kProj1 = createKieProject(namespace1); KieFileSystem kfs1 = KieServices.Factory.get().newKieFileSystem(); generateAll(kfs1, namespace1, releaseId1, kProj1); kb1.buildAll(); if ( kb1.getResults().hasMessages(Level.ERROR) ) { fail("Unable to build KieJar\n" + kb1.getResults( ).toString() ); KieRepository kr = ks.getRepository(); KieModule kModule1 = kr.getKieModule(releaseId1); assertNotNull( kModule1 ); kb2.setDependencies( kModule1 ); kb2.buildAll(); if ( kb2.getResults().hasMessages(Level.ERROR) ) { fail("Unable to build KieJar\n" + kb2.getResults( ).toString() ); KieContainer kContainer = ks.newKieContainer(releaseId2); KieBase kBase = kContainer.getKieBase( namespace2 );
private void checkKModule( final String kmodule, final int expectedErrors ) { final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML( releaseId ).writeKModuleXML( kmodule ); final KieBuilder kieBuilder = ks.newKieBuilder( kfs ); kieBuilder.buildAll(); final Results results = kieBuilder.getResults(); assertEquals( expectedErrors, results.getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); assertNotNull(((InternalKieBuilder) kieBuilder ).getKieModuleIgnoringErrors()); }
public static byte[] buildKJar(KieServices ks, KieFileSystem kfs, ReleaseId releaseId) { KieBuilder kb = ks.newKieBuilder(kfs).buildAll(); if (kb.getResults().hasMessages(Message.Level.ERROR)) { for (Message result : kb.getResults().getMessages()) { System.out.println(result.getText()); } return null; } InternalKieModule kieModule = (InternalKieModule) ks.getRepository() .getKieModule(releaseId); byte[] jar = kieModule.getBytes(); return jar; }
public void createAndTestKieContainer(ReleaseId releaseId, KieBuilder kb, String kBaseName) throws IOException, ClassNotFoundException, InterruptedException { KieServices ks = KieServices.Factory.get(); kb.buildAll(); if ( kb.getResults().hasMessages(Level.ERROR) ) { fail("Unable to build KieModule\n" + kb.getResults( ).toString() ); } KieRepository kr = ks.getRepository(); KieModule kJar = kr.getKieModule(releaseId); assertNotNull( kJar ); KieContainer kContainer = ks.newKieContainer(releaseId); KieBase kBase = kBaseName != null ? kContainer.getKieBase( kBaseName ) : kContainer.getKieBase(); KieSession kSession = kBase.newKieSession(); List list = new ArrayList(); kSession.setGlobal( "list", list ); kSession.fireAllRules(); assertEquals( 1, list.size() ); assertEquals( "org.kie.test.Message", list.get(0).getClass().getName() ); }
@Test public void testInvalidPomXmlContent() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject(namespace); ReleaseId releaseId = KieServices.Factory.get().newReleaseId(namespace, "memory", "1.0"); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); kfs.write( "pom.xml", "xxxx" ); generateKProjectXML( kfs, namespace, kProj ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); KieBuilder kieBuilder = createKieBuilder(kfs); kieBuilder.buildAll(); assertTrue ( kieBuilder.getResults().hasMessages(Level.ERROR) ); }
@Test public void testInvalidProjectXml() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject( namespace ); ReleaseId releaseId = KieServices.Factory.get().newReleaseId( namespace, "memory", "1.0" ); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generatePomXML( kfs, releaseId ); kfs.writeKModuleXML( "xxxx" ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); KieBuilder kieBuilder = createKieBuilder(kfs); kieBuilder.buildAll(); assertTrue( kieBuilder.getResults().hasMessages( Level.ERROR ) ); }
@Test public void testInvalidPomXmlGAV() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject(namespace); ReleaseId releaseId = new ReleaseIdImpl( "", "", "" ); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generatePomXML( kfs, releaseId ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); MemoryFileSystem mfs = ((KieFileSystemImpl)kfs).asMemoryFileSystem(); KieBuilder kieBuilder = createKieBuilder( kfs ); kieBuilder.buildAll(); assertTrue( kieBuilder.getResults().hasMessages( Level.ERROR ) ); }
@Test public void testUpdateToNonExistingRelease() { // DROOLS-1562 KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.kie", "test-release", "1.0.0"); createAndDeployJar( ks, releaseId, createDRL("ruleA") ); KieContainer kieContainer = ks.newKieContainer(releaseId); Results results = kieContainer.updateToVersion( ks.newReleaseId( "org.kie", "test-release", "1.0.1" ) ); assertEquals( 1, results.getMessages( Level.ERROR ).size() ); assertEquals( "1.0.0", ( (InternalKieContainer) kieContainer ).getContainerReleaseId().getVersion() ); }
@Test public void testOutOfRangePositions() throws InstantiationException, IllegalAccessException { // DROOLS-559 String drl = "package org.test;\n" + "global java.util.List names;\n" + "declare Person\n" + " name : String @position(3)\n" + " age : int @position(1)\n" + "end\n" + "rule R when \n" + " $p : Person( 37, \"Mark\"; )\n" + "then\n" + " names.add( $p.getName() );\n" + "end\n"; KieBuilder kieBuilder = build(drl); assertTrue( kieBuilder.getResults().hasMessages( Message.Level.ERROR ) ); }
@Test public void testQueryWithIncompatibleArgs() { String drl = "global java.util.List list; " + "" + "query foo( String $s, String $s, String $s ) end " + "" + "rule React \n" + "when\n" + " $i : Integer() " + " foo( $i, $x, $i ; ) " + "then\n" + "end"; KieHelper helper = new KieHelper(); helper.addContent( drl, ResourceType.DRL ); Results results = helper.verify(); assertTrue( results.hasMessages( Message.Level.ERROR ) ); assertEquals( 2, results.getMessages( Message.Level.ERROR ).size() ); }
@Test public void testKieBaseCompilation() { KieServices ks = KieServices.Factory.get(); Results rs = ks.getKieClasspathContainer().verify(); System.out.println( rs.getMessages() ); assertFalse( rs.hasMessages( Message.Level.ERROR ) ); }