aboutsummaryrefslogtreecommitdiffstats
path: root/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java')
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java610
1 files changed, 291 insertions, 319 deletions
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
index 1da6e011..d2d0dec2 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
@@ -26,330 +26,302 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.nio.file.Paths;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import org.junit.BeforeClass;
import org.junit.Test;
import org.onap.policy.drools.util.KieUtils;
/**
- * These tests focus on the following classes:
- * PolicyContainer
- * PolicySession
- * PolicySessionFeatureAPI
+ * These tests focus on the following classes.
+ * PolicyContainer
+ * PolicySession
+ * PolicySessionFeatureAPI
*/
-public class DroolsContainerTest
-{
- /**
- * This test is centered around the creation of a 'PolicyContainer'
- * and 'PolicySession', and the updating of that container to a new
- * version.
- */
- @BeforeClass
- public static void setUp() throws Exception
- {
- KieUtils.installArtifact
- (Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/META-INF/kmodule.xml").toFile(),
- Paths.get("src/test/resources/drools-artifact-1.1/pom.xml").toFile(),
- "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
- Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/rules.drl").toFile());
-
- KieUtils.installArtifact
- (Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/META-INF/kmodule.xml").toFile(),
- Paths.get("src/test/resources/drools-artifact-1.2/pom.xml").toFile(),
- "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
- Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/rules.drl").toFile());
- }
-
- /**
- * This test is centered around the creation of a 'PolicyContainer'
- * and 'PolicySession', and the updating of that container to a new
- * version.
- */
- @Test
- public void createAndUpdate() throws Exception
- {
- // make sure feature log starts out clean
- TestPolicySessionFeatureAPI.getLog();
-
- // run 'globalInit', and verify expected feature hook fired
- PolicyContainer.globalInit(new String[0]);
- assertEquals(buildArrayList("globalInit"),
- TestPolicySessionFeatureAPI.getLog());
-
- // initial conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
-
- // create the container, and start it
- PolicyContainer container =
- new PolicyContainer("org.onap.policy.drools-pdp",
- "drools-artifact1", "17.1.0-SNAPSHOT");
- container.start();
- assertTrue(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("activatePolicySession",
- "newPolicySession",
- "selectThreadModel"),
- TestPolicySessionFeatureAPI.getLog());
-
- // this container should be on the list
- {
- Collection<PolicyContainer> containers =
- PolicyContainer.getPolicyContainers();
- assertEquals(1, containers.size());
- assertTrue(containers.contains(container));
- }
-
- // verify initial container attributes
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
- container.getName());
- assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
- assertEquals("drools-artifact1", container.getArtifactId());
- assertEquals("17.1.0-SNAPSHOT", container.getVersion());
-
- try
- {
- // fetch the session, and verify that it exists
- PolicySession session = container.getPolicySession("session1");
- assertTrue(session != null);
-
- // get all sessions, and verify that this one is the only one
- {
- Collection<PolicySession> sessions = container.getPolicySessions();
- assertEquals(1, sessions.size());
- assertTrue(sessions.contains(session));
- }
-
- // verify session attributes
- assertEquals(container, session.getPolicyContainer());
- assertEquals("session1", session.getName());
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
- session.getFullName());
-
- // insert a new fact
- int[] a = new int[]{0, 3, 8, 2};
- session.getKieSession().insert(a);
-
- // the Drools rules should add 3 + 8 + 2, and store 13 in a[0]
- assertTrue(waitForChange(a) == 13);
-
- // update the container to a new version --
- // the rules will then multiply values rather than add them
- assertEquals("[]",
- container.updateToVersion("17.2.0-SNAPSHOT").toString());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("selectThreadModel"),
- TestPolicySessionFeatureAPI.getLog());
-
- // verify new container attributes
- assertEquals
- ("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT",
- container.getName());
- assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
- assertEquals("drools-artifact1", container.getArtifactId());
- assertEquals("17.2.0-SNAPSHOT", container.getVersion());
-
- // verify new session attributes
- assertEquals(container, session.getPolicyContainer());
- assertEquals("session1", session.getName());
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT:session1",
- session.getFullName());
-
- // the updated rules should now multiply 3 * 8 * 2, and return 48
-
- a[0] = 0;
- container.insert("session1", a);
- assertTrue(waitForChange(a) == 48);
- }
- finally
- {
- container.shutdown();
- assertFalse(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("disposeKieSession"),
- TestPolicySessionFeatureAPI.getLog());
- }
-
- // final conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
- }
-
- /**
- * This test create a 'PolicyContainer' and 'PolicySession', and verifies
- * their behavior, but uses alternate interfaces to increase code coverage.
- * In addition, feature hook invocations will trigger exceptions in this
- * test, also to increase code coverage.
- */
- @Test
- public void versionList() throws Exception
- {
- // make sure feature log starts out clean
- TestPolicySessionFeatureAPI.getLog();
-
- // trigger exceptions in all feature hooks
- TestPolicySessionFeatureAPI.setExceptionTrigger(true);
-
- // run 'globalInit', and verify expected feature hook fired
- PolicyContainer.globalInit(new String[0]);
- assertEquals(buildArrayList("globalInit-exception"),
- TestPolicySessionFeatureAPI.getLog());
-
- // initial conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
-
- String versionList =
- "17.3.0-SNAPSHOT,17.1.0-SNAPSHOT,17.2.0-SNAPSHOT";
-
- // versions should be tried in order -- the 17.1.0-SNAPSHOT should "win",
- // given the fact that '17.3.0-SNAPSHOT' doesn't exist
- PolicyContainer container =
- new PolicyContainer("org.onap.policy.drools-pdp",
- "drools-artifact1", versionList);
- // the following should be equivalent to 'container.start()'
- PolicyContainer.activate();
- assertTrue(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("activatePolicySession-exception",
- "newPolicySession-exception",
- "selectThreadModel-exception"),
- TestPolicySessionFeatureAPI.getLog());
-
- // this container should be on the list
- {
- Collection<PolicyContainer> containers =
- PolicyContainer.getPolicyContainers();
- assertEquals(1, containers.size());
- assertTrue(containers.contains(container));
- }
-
- // verify initial container attributes
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
- container.getName());
- assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
- assertEquals("drools-artifact1", container.getArtifactId());
- assertEquals("17.1.0-SNAPSHOT", container.getVersion());
-
- // some container adjunct tests
- {
- Object bogusAdjunct = new Object();
-
- // initially, no adjunct
- assertSame(null, container.getAdjunct(this));
-
- // set and verify adjunct
- container.setAdjunct(this, bogusAdjunct);
- assertSame(bogusAdjunct, container.getAdjunct(this));
-
- // clear and verify adjunct
- container.setAdjunct(this, null);
- assertSame(null, container.getAdjunct(this));
- }
-
- try
- {
- // fetch the session, and verify that it exists
- PolicySession session = container.getPolicySession("session1");
- assertTrue(session != null);
-
- // get all sessions, and verify that this one is the only one
- {
- Collection<PolicySession> sessions = container.getPolicySessions();
- assertEquals(1, sessions.size());
- assertTrue(sessions.contains(session));
- }
-
- // verify session attributes
- assertEquals(container, session.getPolicyContainer());
- assertEquals("session1", session.getName());
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
- session.getFullName());
-
- // some session adjunct tests
- {
- Object bogusAdjunct = new Object();
-
- // initially, no adjunct
- assertSame(null, session.getAdjunct(this));
-
- // set and verify adjunct
- session.setAdjunct(this, bogusAdjunct);
- assertSame(bogusAdjunct, session.getAdjunct(this));
-
- // clear and verify adjunct
- session.setAdjunct(this, null);
- assertSame(null, session.getAdjunct(this));
- }
-
- // insert a new fact (using 'insertAll')
- int[] a = new int[]{0, 7, 3, 4};
- container.insertAll(a);
-
- // the Drools rules should add 7 + 3 + 4, and store 14 in a[0]
- assertTrue(waitForChange(a) == 14);
-
- // exercise some more API methods
- assertEquals(container.getClassLoader(),
- container.getKieContainer().getClassLoader());
- }
- finally
- {
- // should be equivalent to 'shutdown' without persistence
- container.destroy();
- assertFalse(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("destroyKieSession-exception"),
- TestPolicySessionFeatureAPI.getLog());
-
- // clear exception trigger
- TestPolicySessionFeatureAPI.setExceptionTrigger(false);
- }
-
- // final conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
- }
-
- /**
- * This method is tied to the expected behavior of the drools sessions.
- * Initially, the value of 'array[0]' should be 0. The Drools rules
- * will either add or multiply 'array[1]' through 'array[n-1]', depending
- * upon the version. It waits up to 30 seconds for a non-zero value
- * to appear.
- */
- private int waitForChange(int[] array) throws InterruptedException
- {
- int rval = -1;
-
- // the value is tested every 1/100 of a second, and it waits up to
- // 3000 iterations (= 30 seconds) for a non-zero value
- for (int i = 0 ; i < 3000 ; i += 1)
- {
- // wait for 10 milliseconds = 1/100 of a second
- Thread.sleep(10);
- if ((rval = array[0]) != 0)
- {
- // a non-zero value has been stored
- break;
- }
- }
- return(rval);
- }
-
- /**
- * @param args an array of string arguments
- * @return an ArrayList constructed from the provided arguments
- */
- private ArrayList<String> buildArrayList(String... args)
- {
- ArrayList<String> rval = new ArrayList<>();
- for (String arg : args)
- {
- rval.add(arg);
- }
- return(rval);
- }
+public class DroolsContainerTest {
+ /**
+ * This test is centered around the creation of a 'PolicyContainer'
+ * and 'PolicySession', and the updating of that container to a new
+ * version.
+ */
+ @BeforeClass
+ public static void setUp() throws Exception {
+ KieUtils.installArtifact(
+ Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/META-INF/kmodule.xml").toFile(),
+ Paths.get("src/test/resources/drools-artifact-1.1/pom.xml").toFile(),
+ "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
+ Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/rules.drl").toFile());
+
+ KieUtils.installArtifact(
+ Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/META-INF/kmodule.xml").toFile(),
+ Paths.get("src/test/resources/drools-artifact-1.2/pom.xml").toFile(),
+ "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
+ Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/rules.drl").toFile());
+ }
+
+ /**
+ * This test is centered around the creation of a 'PolicyContainer'
+ * and 'PolicySession', and the updating of that container to a new
+ * version.
+ */
+ @Test
+ public void createAndUpdate() throws Exception {
+ // make sure feature log starts out clean
+ PolicySessionFeatureApiTest.getLog();
+
+ // run 'globalInit', and verify expected feature hook fired
+ PolicyContainer.globalInit(new String[0]);
+ assertEquals(Arrays.asList("globalInit"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // initial conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+
+ // create the container, and start it
+ PolicyContainer container =
+ new PolicyContainer("org.onap.policy.drools-pdp",
+ "drools-artifact1", "17.1.0-SNAPSHOT");
+ container.start();
+ assertTrue(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("activatePolicySession",
+ "newPolicySession",
+ "selectThreadModel"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // this container should be on the list
+ {
+ Collection<PolicyContainer> containers =
+ PolicyContainer.getPolicyContainers();
+ assertEquals(1, containers.size());
+ assertTrue(containers.contains(container));
+ }
+
+ // verify initial container attributes
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
+ container.getName());
+ assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
+ assertEquals("drools-artifact1", container.getArtifactId());
+ assertEquals("17.1.0-SNAPSHOT", container.getVersion());
+
+ try {
+ // fetch the session, and verify that it exists
+ PolicySession session = container.getPolicySession("session1");
+ assertTrue(session != null);
+
+ // get all sessions, and verify that this one is the only one
+ {
+ Collection<PolicySession> sessions = container.getPolicySessions();
+ assertEquals(1, sessions.size());
+ assertTrue(sessions.contains(session));
+ }
+
+ // verify session attributes
+ assertEquals(container, session.getPolicyContainer());
+ assertEquals("session1", session.getName());
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
+ session.getFullName());
+
+ // insert a new fact
+ int[] facts = new int[]{0, 3, 8, 2};
+ session.getKieSession().insert(facts);
+
+ // the Drools rules should add 3 + 8 + 2, and store 13 in a[0]
+ assertTrue(waitForChange(facts) == 13);
+
+ // update the container to a new version --
+ // the rules will then multiply values rather than add them
+ assertEquals("[]",
+ container.updateToVersion("17.2.0-SNAPSHOT").toString());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("selectThreadModel"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // verify new container attributes
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT",
+ container.getName());
+ assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
+ assertEquals("drools-artifact1", container.getArtifactId());
+ assertEquals("17.2.0-SNAPSHOT", container.getVersion());
+
+ // verify new session attributes
+ assertEquals(container, session.getPolicyContainer());
+ assertEquals("session1", session.getName());
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT:session1",
+ session.getFullName());
+
+ // the updated rules should now multiply 3 * 8 * 2, and return 48
+
+ facts[0] = 0;
+ container.insert("session1", facts);
+ assertTrue(waitForChange(facts) == 48);
+ } finally {
+ container.shutdown();
+ assertFalse(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("disposeKieSession"),
+ PolicySessionFeatureApiTest.getLog());
+ }
+
+ // final conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+ }
+
+ /**
+ * This test create a 'PolicyContainer' and 'PolicySession', and verifies
+ * their behavior, but uses alternate interfaces to increase code coverage.
+ * In addition, feature hook invocations will trigger exceptions in this
+ * test, also to increase code coverage.
+ */
+ @Test
+ public void versionList() throws Exception {
+ // make sure feature log starts out clean
+ PolicySessionFeatureApiTest.getLog();
+
+ // trigger exceptions in all feature hooks
+ PolicySessionFeatureApiTest.setExceptionTrigger(true);
+
+ // run 'globalInit', and verify expected feature hook fired
+ PolicyContainer.globalInit(new String[0]);
+ assertEquals(Arrays.asList("globalInit-exception"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // initial conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+
+ String versionList =
+ "17.3.0-SNAPSHOT,17.1.0-SNAPSHOT,17.2.0-SNAPSHOT";
+
+ // versions should be tried in order -- the 17.1.0-SNAPSHOT should "win",
+ // given the fact that '17.3.0-SNAPSHOT' doesn't exist
+ PolicyContainer container =
+ new PolicyContainer("org.onap.policy.drools-pdp",
+ "drools-artifact1", versionList);
+ // the following should be equivalent to 'container.start()'
+ PolicyContainer.activate();
+ assertTrue(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("activatePolicySession-exception",
+ "newPolicySession-exception",
+ "selectThreadModel-exception"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // this container should be on the list
+ {
+ Collection<PolicyContainer> containers =
+ PolicyContainer.getPolicyContainers();
+ assertEquals(1, containers.size());
+ assertTrue(containers.contains(container));
+ }
+
+ // verify initial container attributes
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
+ container.getName());
+ assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
+ assertEquals("drools-artifact1", container.getArtifactId());
+ assertEquals("17.1.0-SNAPSHOT", container.getVersion());
+
+ // some container adjunct tests
+ {
+ Object bogusAdjunct = new Object();
+
+ // initially, no adjunct
+ assertSame(null, container.getAdjunct(this));
+
+ // set and verify adjunct
+ container.setAdjunct(this, bogusAdjunct);
+ assertSame(bogusAdjunct, container.getAdjunct(this));
+
+ // clear and verify adjunct
+ container.setAdjunct(this, null);
+ assertSame(null, container.getAdjunct(this));
+ }
+
+ try {
+ // fetch the session, and verify that it exists
+ PolicySession session = container.getPolicySession("session1");
+ assertTrue(session != null);
+
+ // get all sessions, and verify that this one is the only one
+ {
+ Collection<PolicySession> sessions = container.getPolicySessions();
+ assertEquals(1, sessions.size());
+ assertTrue(sessions.contains(session));
+ }
+
+ // verify session attributes
+ assertEquals(container, session.getPolicyContainer());
+ assertEquals("session1", session.getName());
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
+ session.getFullName());
+
+ // some session adjunct tests
+ {
+ Object bogusAdjunct = new Object();
+
+ // initially, no adjunct
+ assertSame(null, session.getAdjunct(this));
+
+ // set and verify adjunct
+ session.setAdjunct(this, bogusAdjunct);
+ assertSame(bogusAdjunct, session.getAdjunct(this));
+
+ // clear and verify adjunct
+ session.setAdjunct(this, null);
+ assertSame(null, session.getAdjunct(this));
+ }
+
+ // insert a new fact (using 'insertAll')
+ int[] facts = new int[]{0, 7, 3, 4};
+ container.insertAll(facts);
+
+ // the Drools rules should add 7 + 3 + 4, and store 14 in a[0]
+ assertTrue(waitForChange(facts) == 14);
+
+ // exercise some more API methods
+ assertEquals(container.getClassLoader(),
+ container.getKieContainer().getClassLoader());
+ } finally {
+ // should be equivalent to 'shutdown' without persistence
+ container.destroy();
+ assertFalse(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("destroyKieSession-exception"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // clear exception trigger
+ PolicySessionFeatureApiTest.setExceptionTrigger(false);
+ }
+
+ // final conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+ }
+
+ /**
+ * This method is tied to the expected behavior of the drools sessions.
+ * Initially, the value of 'array[0]' should be 0. The Drools rules
+ * will either add or multiply 'array[1]' through 'array[n-1]', depending
+ * upon the version. It waits up to 30 seconds for a non-zero value
+ * to appear.
+ */
+ private int waitForChange(int[] array) throws InterruptedException {
+ int rval = -1;
+
+ // the value is tested every 1/100 of a second, and it waits up to
+ // 3000 iterations (= 30 seconds) for a non-zero value
+ for (int i = 0 ; i < 3000 ; i += 1) {
+ // wait for 10 milliseconds = 1/100 of a second
+ Thread.sleep(10);
+ if ((rval = array[0]) != 0) {
+ // a non-zero value has been stored
+ break;
+ }
+ }
+ return (rval);
+ }
}