Package org.kie.scanner

Source Code of org.kie.scanner.KieScannerIncrementalCompilationTest

package org.kie.scanner;

import static org.junit.Assert.assertTrue;
import static org.kie.scanner.MavenRepository.getMavenRepository;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.drools.compiler.kie.builder.impl.InternalKieModule;
import org.drools.core.util.FileManager;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieScanner;
import org.kie.api.builder.ReleaseId;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class KieScannerIncrementalCompilationTest extends AbstractKieCiTest {

    private final int FIRST_VALUE = 5;
    private final int SECOND_VALUE = 10;

    private FileManager fileManager;
    private File kPom;
    private ReleaseId releaseId;

    @Before
    public void setUp() throws Exception {
        this.fileManager = new FileManager();
        this.fileManager.setUp();
        releaseId = KieServices.Factory.get().newReleaseId("org.kie", "scanner-test", "1.0-SNAPSHOT");
        kPom = createKPom(releaseId);
    }

    @Test
    public void testChangeJavaClassButNotDrl() throws IOException {
        checkIncrementalCompilation(true);
    }

    @Test
    public void testChangeDrlNotUsingJava() throws IOException {
        checkIncrementalCompilation(false);
    }

    private void checkIncrementalCompilation(boolean useJavaInDrl) throws IOException {
        KieServices ks = KieServices.Factory.get();
        MavenRepository repository = getMavenRepository();

        InternalKieModule kJar1 = createKieJarWithClass(ks, releaseId, FIRST_VALUE, useJavaInDrl);
        repository.deployArtifact(releaseId, kJar1, kPom);

        KieContainer kieContainer = ks.newKieContainer(releaseId);
        KieScanner scanner = ks.newKieScanner(kieContainer);

        checkValue(kieContainer, FIRST_VALUE);

        InternalKieModule kJar2 = createKieJarWithClass(ks, releaseId, SECOND_VALUE, useJavaInDrl);
        repository.deployArtifact(releaseId, kJar2, kPom);

        scanner.scanNow();

        checkValue(kieContainer, SECOND_VALUE);

        ks.getRepository().removeKieModule(releaseId);
    }

    private void checkValue(KieContainer kieContainer, int value) {
        List<Integer> list = new ArrayList<Integer>();
        KieSession ksession = kieContainer.newKieSession("KSession1");

        ksession.setGlobal( "list", list );
        ksession.fireAllRules();
        ksession.dispose();
        assertTrue("Expected:<" + value + "> but was:<" + list.get(0+ ">", list.get(0) == value);
    }

    private InternalKieModule createKieJarWithClass(KieServices ks, ReleaseId releaseId, int value, boolean useJavaInDrl) throws IOException {
        KieFileSystem kfs = createKieFileSystemWithKProject(ks, false);
        kfs.writePomXML(getPom(releaseId));

        if (useJavaInDrl) {
            kfs.write("src/main/resources/KBase1/rule1.drl", createDRLForJavaSource());
        } else {
            kfs.write("src/main/resources/KBase1/rule1.drl", createDRLNotUsingJava(value));
        }
        kfs.write("src/main/java/org/kie/test/Value.java", createJavaSource(value));

        KieBuilder kieBuilder = ks.newKieBuilder(kfs);
        assertTrue("", kieBuilder.buildAll().getResults().getMessages().isEmpty());
        return (InternalKieModule) kieBuilder.getKieModule();
    }

    private String createDRLForJavaSource() {
        return "package org.kie.test\n" +
               "global java.util.List list\n" +
               "rule simple\n" +
               "when\n" +
               "then\n" +
               "   list.add(Value.getValue());\n" +
               "end\n";
    }

    private String createDRLNotUsingJava(int value) {
        return "package org.kie.test\n" +
               "global java.util.List list\n" +
               "rule simple\n" +
               "when\n" +
               "then\n" +
               "   list.add(" + value + ");\n" +
               "end\n";
    }

    private String createJavaSource(int value) {
        return "package org.kie.test;\n" +
               "public class Value {\n" +
               "   public static int getValue() {\n" +
               "      return " + value + ";\n" +
               "   }\n" +
               "}";
    }

    private File createKPom(ReleaseId releaseId) throws IOException {
        File pomFile = fileManager.newFile("pom.xml");
        fileManager.write(pomFile, getPom(releaseId));
        return pomFile;
    }
}
TOP

Related Classes of org.kie.scanner.KieScannerIncrementalCompilationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.