/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.integration.testcoverage.instrumentation;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.builder.ReleaseId;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.integration.testcoverage.model.instrumentation.Dog;
import org.kie.integration.testcoverage.model.instrumentation.Person;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests using a KJAR built previously by kie-maven-plugin with instrumentation enabled.
*/
public class InstrumentationTest {
private static final KieServices KIE_SERVICES = KieServices.get();
private static final ReleaseId RELEASE_ID = KIE_SERVICES.newReleaseId("org.drools.testcoverage", "kjar-with-instrumentation", TestUtil.getProjectVersion());
private static KieContainer kieContainer;
private KieSession kieSession;
private List<String> results;
@BeforeClass
public static void loadKieContainer() {
kieContainer = KIE_SERVICES.newKieContainer(RELEASE_ID);
}
@Before
public void prepareSession() {
kieSession = kieContainer.newKieSession();
results = new ArrayList<>();
kieSession.setGlobal("results", results);
}
@After
public void disposeSession() {
if (kieSession != null) {
kieSession.dispose();
}
results = null;
}
@Test
public void testLoadingKJarAndFiringRules() {
final String dogName = "Azor";
final Person person = new Person("Bruno", 17);
person.addPet(new Dog(dogName, 2));
kieSession.insert(person);
kieSession.fireAllRules();
assertThat(results).containsExactlyInAnyOrder(dogName);
}
@Test
public void testOOPathReactivityWithInstrumentedModel() {
final Person person = new Person("Bruno", 17);
FactHandle fh = kieSession.insert(person);
kieSession.fireAllRules();
assertThat(results).isEmpty();
person.setAge(18);
kieSession.update(fh, person);
kieSession.fireAllRules();
assertThat(results).containsExactlyInAnyOrder("Lassie", "The Cat");
}
}