Adding executor integration tests 75/56075/5
authorwaqas.ikram <waqas.ikram@ericsson.com>
Tue, 10 Jul 2018 10:52:12 +0000 (11:52 +0100)
committerwaqas.ikram <waqas.ikram@ericsson.com>
Tue, 10 Jul 2018 12:49:59 +0000 (13:49 +0100)
Change-Id: I292315164fbfb3650f6d21ede6edb264a7fd8ee3
Issue-ID: POLICY-865
Signed-off-by: waqas.ikram <waqas.ikram@ericsson.com>
26 files changed:
context/context-test-utils/src/main/java/org/onap/policy/apex/context/test/locking/ConcurrentContext.java
context/context-test-utils/src/main/java/org/onap/policy/apex/context/test/locking/ConcurrentContextJVM.java
context/context-test-utils/src/main/java/org/onap/policy/apex/context/test/utils/Constants.java
plugins/plugins-executor/plugins-executor-jruby/pom.xml
plugins/plugins-executor/plugins-executor-jython/src/main/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskExecutor.java
plugins/plugins-executor/plugins-executor-jython/src/main/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskSelectExecutor.java
testsuites/integration/integration-executor-test/pom.xml [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexActionListener.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngine.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJRuby.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJava.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJavascript.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJython.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineMVEL.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/event/TestEventInstantiation.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexModelExport.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexPolicyModelAnalysis.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyCreateModelFiles.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyDBWrite.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModel.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModelCreator.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateDifferentModels.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateModel.java [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/resources/META-INF/persistence.xml [new file with mode: 0644]
testsuites/integration/integration-executor-test/src/test/resources/logback-test.xml [new file with mode: 0644]
testsuites/integration/pom.xml

index a400bc7..b62364e 100644 (file)
@@ -113,6 +113,8 @@ public class ConcurrentContext {
             executorService.awaitTermination(10, TimeUnit.MINUTES);
         } catch (final InterruptedException interruptedException) {
             LOGGER.error("Exception while waiting for threads to finish", interruptedException);
+            // restore the interrupt status
+            Thread.currentThread().interrupt();
         }
 
         LOGGER.info("Shutting down now ...");
index b76b008..e2a6b0d 100644 (file)
@@ -119,6 +119,8 @@ public final class ConcurrentContextJVM {
             executorService.awaitTermination(10, TimeUnit.MINUTES);
         } catch (final InterruptedException interruptedException) {
             LOGGER.error("Exception while waiting for threads to finish", interruptedException);
+            // restore the interrupt status
+            Thread.currentThread().interrupt();
         }
 
         LOGGER.debug("threads finished, end value is {}", lTypeAlbum.get("testValue"));
index ac1e951..2bf304e 100644 (file)
@@ -17,6 +17,7 @@
  * SPDX-License-Identifier: Apache-2.0
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.policy.apex.context.test.utils;
 
 import java.util.TimeZone;
@@ -51,8 +52,12 @@ public class Constants {
     public static final String TEST_POLICY_CONTEXT_ITEM = TestPolicyContextItem.class.getName();
     public static final TimeZone TIME_ZONE = TimeZone.getTimeZone("Europe/Dublin");
 
-    public static AxArtifactKey[] USED_ARTIFACT_STACK_ARRAY = {new AxArtifactKey("testC-top", VERSION),
-            new AxArtifactKey("testC-next", VERSION), new AxArtifactKey("testC-bot", VERSION)};
+    private static final AxArtifactKey KEY = new AxArtifactKey("testC-top", VERSION);
+    private static final AxArtifactKey KEY3 = new AxArtifactKey("testC-bot", VERSION);
+    private static final AxArtifactKey KEY2 = new AxArtifactKey("testC-next", VERSION);
+
+    private static final AxArtifactKey[] AX_ARTIFACT_KEYS = {KEY, KEY2, KEY3};
+    public static final AxArtifactKey[] USED_ARTIFACT_STACK_ARRAY = AX_ARTIFACT_KEYS;
 
     private Constants() {}
 
index fbe924a..901d30e 100644 (file)
             <artifactId>jruby</artifactId>
             <version>9.1.2.0</version>
             <exclusions>
-                <exclusion>
-                    <groupId>org.jruby.extras</groupId>
-                    <artifactId>bytelist</artifactId>
-                </exclusion>
                 <exclusion>
                     <groupId>org.jruby</groupId>
                     <artifactId>dirgra</artifactId>
index b0dd9c5..71dce58 100644 (file)
@@ -26,6 +26,7 @@ import org.onap.policy.apex.context.ContextException;
 import org.onap.policy.apex.core.engine.executor.TaskExecutor;
 import org.onap.policy.apex.core.engine.executor.exception.StateMachineException;
 import org.python.core.CompileMode;
+import org.python.core.CompilerFlags;
 import org.python.core.Py;
 import org.python.core.PyCode;
 import org.python.core.PyException;
@@ -34,8 +35,8 @@ import org.slf4j.ext.XLogger;
 import org.slf4j.ext.XLoggerFactory;
 
 /**
- * The Class JythonTaskExecutor is the task executor for task logic written in Jython It is unlikely that this is thread
- * safe.
+ * The Class JythonTaskExecutor is the task executor for task logic written in Jython It is unlikely
+ * that this is thread safe.
  *
  * @author Liam Fallon (liam.fallon@ericsson.com)
  */
@@ -61,8 +62,9 @@ public class JythonTaskExecutor extends TaskExecutor {
         super.prepare();
         try {
             synchronized (Py.class) {
-                compiled = Py.compile_flags(getSubject().getTaskLogic().getLogic(),
-                        "<" + getSubject().getKey().toString() + ">", CompileMode.exec, null);
+                final String logic = getSubject().getTaskLogic().getLogic();
+                final String filename = "<" + getSubject().getKey().toString() + ">";
+                compiled = Py.compile_flags(logic, filename, CompileMode.exec, new CompilerFlags());
             }
         } catch (final PyException e) {
             LOGGER.warn("failed to compile Jython code for task " + getSubject().getKey().getID(), e);
index 4fd48f2..d28001d 100644 (file)
@@ -26,6 +26,7 @@ import org.onap.policy.apex.core.engine.executor.TaskSelectExecutor;
 import org.onap.policy.apex.core.engine.executor.exception.StateMachineException;
 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
 import org.python.core.CompileMode;
+import org.python.core.CompilerFlags;
 import org.python.core.Py;
 import org.python.core.PyCode;
 import org.python.core.PyException;
@@ -34,8 +35,8 @@ import org.slf4j.ext.XLogger;
 import org.slf4j.ext.XLoggerFactory;
 
 /**
- * The Class JythonTaskSelectExecutor is the task selection executor for task selection logic written in Jython It is
- * unlikely that this is thread safe.
+ * The Class JythonTaskSelectExecutor is the task selection executor for task selection logic
+ * written in Jython It is unlikely that this is thread safe.
  *
  * @author Liam Fallon (liam.fallon@ericsson.com)
  */
@@ -60,8 +61,9 @@ public class JythonTaskSelectExecutor extends TaskSelectExecutor {
         super.prepare();
         try {
             synchronized (Py.class) {
-                compiled = Py.compile_flags(getSubject().getTaskSelectionLogic().getLogic(),
-                        "<" + getSubject().getKey().toString() + ">", CompileMode.exec, null);
+                final String logic = getSubject().getTaskSelectionLogic().getLogic();
+                final String filename = "<" + getSubject().getKey().toString() + ">";
+                compiled = Py.compile_flags(logic, filename, CompileMode.exec, new CompilerFlags());
             }
         } catch (final PyException e) {
             LOGGER.warn("failed to compile Jython code for task selection logic in " + getSubject().getKey().getID(),
diff --git a/testsuites/integration/integration-executor-test/pom.xml b/testsuites/integration/integration-executor-test/pom.xml
new file mode 100644 (file)
index 0000000..d064f63
--- /dev/null
@@ -0,0 +1,89 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2018 Ericsson. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       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.
+
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.policy.apex-pdp.testsuites.integration</groupId>
+        <artifactId>integration</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>integration-executor-test</artifactId>
+    <name>${project.artifactId}</name>
+    <description>[${project.parent.artifactId}] module to run executor tests using various executor script plugins</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.core</groupId>
+            <artifactId>core-infrastructure</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.context</groupId>
+            <artifactId>context-test-utils</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.testsuites.integration</groupId>
+            <artifactId>integration-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId>
+            <artifactId>plugins-executor-mvel</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId>
+            <artifactId>plugins-executor-jruby</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId>
+            <artifactId>plugins-executor-jython</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId>
+            <artifactId>plugins-executor-javascript</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId>
+            <artifactId>plugins-executor-java</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+            <dependency>
+            <groupId>org.apache.derby</groupId>
+            <artifactId>derby</artifactId>
+            <version>${version.derby}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexActionListener.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexActionListener.java
new file mode 100644 (file)
index 0000000..fa79843
--- /dev/null
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.policy.apex.core.engine.engine.EnEventListener;
+import org.onap.policy.apex.core.engine.event.EnEvent;
+import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The listener interface for receiving testApexAction events. The class that is interested in
+ * processing a testApexAction event implements this interface, and the object created with that
+ * class is registered with a component using the component's <code>addTestApexActionListener</code>
+ * method. When the testApexAction event occurs, that object's appropriate method is invoked.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestApexActionListener implements EnEventListener {
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestApexActionListener.class);
+
+    private List<EnEvent> resultEvents = new ArrayList<>();
+
+    private final String id;
+
+    /**
+     * Instantiates a new test apex action listener.
+     *
+     * @param id the id
+     */
+    public TestApexActionListener(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * Gets the result.
+     *
+     * @param allowNulls if true and the returned event is null, then return, otherwise wait until
+     *        an event is returned.
+     * @return the result
+     */
+    public EnEvent getResult(final boolean allowNulls) {
+        EnEvent result = null;
+        while (true) {
+            while (resultEvents.isEmpty()) {
+                ThreadUtilities.sleep(100);
+            }
+            result = resultEvents.remove(0);
+            if (result != null || allowNulls) {
+                break;
+            }
+        }
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.onap.policy.apex.core.engine.engine.EnEventListener#onEnEvent(org.onap.policy.apex.core.
+     * engine.event.EnEvent)
+     */
+    @Override
+    public void onEnEvent(final EnEvent actionEvent) {
+        ThreadUtilities.sleep(100);
+        if (actionEvent != null) {
+            logger.info("Action event from engine: {}", actionEvent.getName());
+        }
+        resultEvents.add(actionEvent);
+    }
+
+    /**
+     * Gets the id.
+     *
+     * @return the id
+     */
+    public String getId() {
+        return id;
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngine.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngine.java
new file mode 100644 (file)
index 0000000..b087552
--- /dev/null
@@ -0,0 +1,129 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.core.engine.engine.ApexEngine;
+import org.onap.policy.apex.core.engine.engine.impl.ApexEngineFactory;
+import org.onap.policy.apex.core.engine.event.EnEvent;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.test.common.model.SampleDomainModelFactory;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+public class TestApexEngine {
+    // Logger for this class
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestApexEngine.class);
+
+    /**
+     * Instantiates a new test apex engine.
+     *
+     * @param axLogicExecutorType the type of logic executor to use to construct the sample policy
+     *        model for this test
+     * @throws ApexException the apex exception
+     * @throws InterruptedException the interrupted exception
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    public TestApexEngine(final String axLogicExecutorType, final EngineParameters parameters)
+            throws ApexException, InterruptedException, IOException {
+        logger.debug("Running TestApexEngine test for + " + axLogicExecutorType + "logic . . .");
+
+        final AxPolicyModel apexPolicyModel = new SampleDomainModelFactory().getSamplePolicyModel(axLogicExecutorType);
+        assertNotNull(apexPolicyModel);
+        final AxArtifactKey key = new AxArtifactKey("TestApexEngine", "0.0.1");
+
+        final ApexEngine apexEngine = new ApexEngineFactory().createApexEngine(key);
+        final TestApexActionListener listener = new TestApexActionListener("Test");
+        apexEngine.addEventListener("listener", listener);
+        apexEngine.updateModel(apexPolicyModel);
+        apexEngine.start();
+
+        for (final AxEvent axEvent : apexPolicyModel.getEvents().getEventMap().values()) {
+            final EnEvent event = apexEngine.createEvent(axEvent.getKey());
+
+            final Date aDate = new Date(1433453067123L);
+            final Map<String, Object> eventDataMap = new HashMap<String, Object>();
+            eventDataMap.put("TestSlogan", "This is a test slogan for event " + event.getName());
+            eventDataMap.put("TestMatchCase", new Byte((byte) 123));
+            eventDataMap.put("TestTimestamp", aDate.getTime());
+            eventDataMap.put("TestTemperature", 34.5445667);
+
+            event.putAll(eventDataMap);
+
+            apexEngine.handleEvent(event);
+        }
+
+        EnEvent result = listener.getResult(false);
+        logger.debug("result 1 is:" + result);
+        checkResult(result);
+        result = listener.getResult(false);
+        logger.debug("result 2 is:" + result);
+        checkResult(result);
+
+        final Map<AxArtifactKey, Map<String, Object>> apexContext = apexEngine.getEngineContext();
+        assertNotNull(apexContext);
+        apexEngine.stop();
+    }
+
+    /**
+     * Check result.
+     *
+     * @param result the result
+     */
+    private void checkResult(final EnEvent result) {
+        if (result.getExceptionMessage() == null) {
+            assertTrue(result.getName().equals("Event0004") || result.getName().equals("Event0104"));
+
+            assertTrue(((String) result.get("TestSlogan")).startsWith("This is a test slogan for event "));
+            assertTrue(((String) result.get("TestSlogan")).contains(result.getName().substring(0, 8)));
+
+            assertEquals((byte) 123, result.get("TestMatchCase"));
+            assertEquals(34.5445667, result.get("TestTemperature"));
+            assertTrue(
+                    (Byte) result.get("TestMatchCaseSelected") >= 0 && (Byte) result.get("TestMatchCaseSelected") <= 4);
+            assertTrue((Byte) result.get("TestEstablishCaseSelected") >= 0
+                    && (Byte) result.get("TestEstablishCaseSelected") <= 4);
+            assertTrue((Byte) result.get("TestDecideCaseSelected") >= 0
+                    && (Byte) result.get("TestDecideCaseSelected") <= 4);
+            assertTrue((Byte) result.get("TestActCaseSelected") >= 0 && (Byte) result.get("TestActCaseSelected") <= 4);
+        } else {
+            assertTrue(result.getName().equals("Event0001") || result.getName().equals("Event0104"));
+
+            assertTrue(((String) result.get("TestSlogan")).startsWith("This is a test slogan for event "));
+            assertTrue(((String) result.get("TestSlogan")).contains(result.getName().substring(0, 8)));
+
+            assertEquals((byte) 123, result.get("TestMatchCase"));
+            assertEquals(34.5445667, result.get("TestTemperature"));
+        }
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJRuby.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJRuby.java
new file mode 100644 (file)
index 0000000..8b1cc0b
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.plugins.executor.jruby.JrubyExecutorParameters;
+
+public class TestApexEngineJRuby {
+
+    /**
+     * Test apex engine.
+     *
+     * @throws ApexException the apex exception
+     * @throws InterruptedException the interrupted exception
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    @Test
+    public void testApexEngineJRuby() throws ApexException, InterruptedException, IOException {
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("JRUBY", new JrubyExecutorParameters());
+
+        new TestApexEngine("JRUBY", parameters);
+        new TestApexEngine("JRUBY", parameters);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJava.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJava.java
new file mode 100644 (file)
index 0000000..44593a0
--- /dev/null
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.plugins.executor.java.JavaExecutorParameters;
+
+/**
+ * The Class TestApexEngine_Java.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestApexEngineJava {
+
+    /**
+     * Test apex engine.
+     *
+     * @throws InterruptedException the interrupted exception
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexException the apex exception
+     */
+    @Test
+    public void testApexEngineJava() throws InterruptedException, IOException, ApexException {
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("JAVA", new JavaExecutorParameters());
+
+        new TestApexEngine("JAVA", parameters);
+        new TestApexEngine("JAVA", parameters);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJavascript.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJavascript.java
new file mode 100644 (file)
index 0000000..1f55f84
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters;
+
+public class TestApexEngineJavascript {
+
+    /**
+     * Test apex engine.
+     *
+     * @throws ApexException the apex exception
+     * @throws InterruptedException the interrupted exception
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    @Test
+    public void testApexEngineJavascript() throws ApexException, InterruptedException, IOException {
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("JAVASCRIPT", new JavascriptExecutorParameters());
+
+        new TestApexEngine("JAVASCRIPT", parameters);
+        new TestApexEngine("JAVASCRIPT", parameters);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJython.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJython.java
new file mode 100644 (file)
index 0000000..eabe63d
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.plugins.executor.jython.JythonExecutorParameters;
+
+public class TestApexEngineJython {
+
+    /**
+     * Test apex engine.
+     *
+     * @throws ApexException the apex exception
+     * @throws InterruptedException the interrupted exception
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    @Test
+    public void testApexEngineJython() throws ApexException, InterruptedException, IOException {
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("JYTHON", new JythonExecutorParameters());
+
+        new TestApexEngine("JYTHON", parameters);
+        new TestApexEngine("JYTHON", parameters);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineMVEL.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineMVEL.java
new file mode 100644 (file)
index 0000000..aea7cec
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.engine;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters;
+
+public class TestApexEngineMVEL {
+
+    /**
+     * Test apex engine.
+     *
+     * @throws ApexException the apex exception
+     * @throws InterruptedException the interrupted exception
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    @Test
+    public void testApexEngineMVEL() throws ApexException, InterruptedException, IOException {
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("MVEL", new MVELExecutorParameters());
+
+        new TestApexEngine("MVEL", parameters);
+        new TestApexEngine("MVEL", parameters);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/event/TestEventInstantiation.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/event/TestEventInstantiation.java
new file mode 100644 (file)
index 0000000..0ed78a1
--- /dev/null
@@ -0,0 +1,188 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.event;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.core.engine.engine.ApexEngine;
+import org.onap.policy.apex.core.engine.engine.impl.ApexEngineFactory;
+import org.onap.policy.apex.core.engine.event.EnEvent;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters;
+import org.onap.policy.apex.test.common.model.SampleDomainModelFactory;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestEventInstantiation.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestEventInstantiation {
+    // Logger for this class
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestEventInstantiation.class);
+
+    /**
+     * Test event instantiation.
+     *
+     * @throws ApexModelException on errors in handling Apex models
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexException the apex exception
+     */
+    @Test
+    public void testEventInstantiation() throws ApexModelException, IOException, ApexException {
+        final String xmlFileName = "xml/ApexModel_MVEL.xml";
+
+        logger.debug("Running TestEventInstantiation test  on file {} . . .", xmlFileName);
+
+        final AxPolicyModel apexPolicyModel = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
+        assertNotNull(apexPolicyModel);
+
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("MVEL", new MVELExecutorParameters());
+
+        final ApexEngine apexEngine = new ApexEngineFactory().createApexEngine(apexPolicyModel.getKey());
+        apexEngine.updateModel(apexPolicyModel);
+        apexEngine.start();
+
+        final EnEvent event = apexEngine.createEvent(new AxArtifactKey("Event0000", "0.0.1"));
+
+        Object slogan1 = event.put("TestSlogan", "This is a slogan");
+        assertNull(slogan1);
+        slogan1 = event.get("TestSlogan");
+        assertNotNull(slogan1);
+        assertEquals("This is a slogan", slogan1);
+
+        Object mc1 = event.put("TestMatchCase", new Byte("4"));
+        assertNull(mc1);
+        mc1 = event.get("TestMatchCase");
+        assertNotNull(mc1);
+        assertEquals((byte) 4, mc1);
+
+        Object mc2 = event.put("TestMatchCase", new Byte("16"));
+        assertNotNull(mc2);
+        assertEquals((byte) 4, mc2);
+        mc2 = event.get("TestMatchCase");
+        assertNotNull(mc2);
+        assertEquals((byte) 16, mc2);
+
+        final Date timeNow = new Date();
+        Object timestamp1 = event.put("TestTimestamp", timeNow.getTime());
+        assertNull(timestamp1);
+        timestamp1 = event.get("TestTimestamp");
+        assertNotNull(timestamp1);
+        assertEquals(timeNow.getTime(), timestamp1);
+
+        final double temperature = 123.456789;
+        Object temp1 = event.put("TestTemperature", temperature);
+        assertNull(temp1);
+        temp1 = event.get("TestTemperature");
+        assertNotNull(temp1);
+        assertEquals(temperature, temp1);
+
+        Object value = event.put("TestMatchCase", null);
+        assertEquals(16, ((Byte) value).intValue());
+        value = event.get("TestMatchCase");
+        assertNull(value);
+
+        try {
+            event.put("TestMatchCase", "Hello");
+        } catch (final Exception e) {
+            assertEquals(
+                    "Event0000:0.0.1:NULL:TestMatchCase: object \"Hello\" of class \"java.lang.String\" not compatible with class \"java.lang.Byte\"",
+                    e.getMessage());
+        }
+
+        try {
+            event.put("TestMatchCase", 123.45);
+        } catch (final Exception e) {
+            assertEquals(
+                    "Event0000:0.0.1:NULL:TestMatchCase: object \"123.45\" of class \"java.lang.Double\" not compatible with class \"java.lang.Byte\"",
+                    e.getMessage());
+        }
+
+        event.put("TestMatchCase", new Byte("16"));
+
+        final String slogan2 = (String) event.get("TestSlogan");
+        assertNotNull(slogan2);
+        assertEquals("This is a slogan", slogan2);
+
+        final byte mc21 = (byte) event.get("TestMatchCase");
+        assertNotNull(mc21);
+        assertEquals(16, mc21);
+
+        final byte mc22 = (byte) event.get("TestMatchCase");
+        assertNotNull(mc22);
+        assertEquals((byte) 16, mc22);
+
+        final long timestamp2 = (Long) event.get("TestTimestamp");
+        assertNotNull(timestamp2);
+        assertEquals(timestamp2, timestamp1);
+
+        final double temp2 = (double) event.get("TestTemperature");
+        assertNotNull(temp2);
+        assertTrue(temp2 == 123.456789);
+
+        final Double temp3 = (Double) event.get("TestTemperature");
+        assertNotNull(temp3);
+        assertTrue(temp3 == 123.456789);
+
+        final Date aDate = new Date(1433453067123L);
+        final Map<String, Object> eventDataList = new HashMap<String, Object>();
+        eventDataList.put("TestSlogan", "This is a test slogan");
+        eventDataList.put("TestMatchCase", new Byte("123"));
+        eventDataList.put("TestTimestamp", aDate.getTime());
+        eventDataList.put("TestTemperature", 34.5445667);
+
+        event.putAll(eventDataList);
+
+        final String slogan3 = (String) event.get("TestSlogan");
+        assertNotNull(slogan3);
+        assertEquals("This is a test slogan", slogan3);
+
+        final byte mc31 = (byte) event.get("TestMatchCase");
+        assertNotNull(mc31);
+        assertEquals((byte) 123, mc31);
+
+        final long timestamp3 = (Long) event.get("TestTimestamp");
+        assertNotNull(timestamp3);
+        assertEquals(timestamp3, aDate.getTime());
+
+        final double temp4 = (double) event.get("TestTemperature");
+        assertNotNull(temp4);
+        assertTrue(temp4 == 34.5445667);
+
+        logger.debug(event.toString());
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexModelExport.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexModelExport.java
new file mode 100644 (file)
index 0000000..6b72faa
--- /dev/null
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.policymodel.handling.PolicyModelSplitter;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestApexModelReader tests Apex model reading.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestApexModelExport {
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestApexModelExport.class);
+
+    private AxPolicyModel model = null;
+
+    @Before
+    public void initApexModelSmall() throws ApexException {
+        model = new TestApexSamplePolicyModelCreator("MVEL").getModel();
+    }
+
+    @Test
+    public void testApexModelExport() throws Exception {
+        logger.info("Starting test: testApexModelExport");
+
+        final List<AxArtifactKey> exportPolicyList = new ArrayList<AxArtifactKey>();
+        exportPolicyList.addAll(model.getPolicies().getPolicyMap().keySet());
+
+        final AxPolicyModel exportedModel0 = PolicyModelSplitter.getSubPolicyModel(model, exportPolicyList);
+
+        // Remove unused schemas and their keys
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem000", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem001", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem002", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem003", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem004", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem005", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem006", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem007", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem008", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem009", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem00A", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem00B", "0.0.1"));
+        model.getSchemas().getSchemasMap().remove(new AxArtifactKey("TestContextItem00C", "0.0.1"));
+
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem000", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem001", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem002", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem003", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem004", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem005", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem006", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem007", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem008", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem009", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem00A", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem00B", "0.0.1"));
+        model.getKeyInformation().getKeyInfoMap().remove(new AxArtifactKey("TestContextItem00C", "0.0.1"));
+
+        assertTrue(model.equals(exportedModel0));
+
+        exportPolicyList.remove(0);
+
+        final AxPolicyModel exportedModel1 = PolicyModelSplitter.getSubPolicyModel(model, exportPolicyList);
+        assertFalse(model.equals(exportedModel1));
+        assertTrue(model.getPolicies().get("Policy1").equals(exportedModel1.getPolicies().get("Policy1")));
+
+        exportPolicyList.clear();
+        exportPolicyList.add(new AxArtifactKey("NonExistentPolicy", "0.0.1"));
+
+        try {
+            final AxPolicyModel emptyExportedModel = PolicyModelSplitter.getSubPolicyModel(model, exportPolicyList);
+            assertNotNull(emptyExportedModel);
+        } catch (final Exception e) {
+            assertTrue(e.getMessage()
+                    .equals("new model is invalid:\n" + "***validation of model failed***\n"
+                            + "AxPolicies:Policies:0.0.1 - policyMap may not be null or empty\n"
+                            + "AxEvents:Events:0.0.1 - eventMap may not be null or empty\n"
+                            + "********************************"));
+        }
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexPolicyModelAnalysis.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexPolicyModelAnalysis.java
new file mode 100644 (file)
index 0000000..91153d6
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.policymodel.handling.PolicyAnalyser;
+import org.onap.policy.apex.model.policymodel.handling.PolicyAnalysisResult;
+
+public class TestApexPolicyModelAnalysis {
+    @Test
+    public void testApexPolicyModelAnalysis() throws Exception {
+        final AxPolicyModel model = new TestApexSamplePolicyModelCreator("MVEL").getModel();
+        final PolicyAnalysisResult result = new PolicyAnalyser().analyse(model);
+
+        assertNotNull(result);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyCreateModelFiles.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyCreateModelFiles.java
new file mode 100644 (file)
index 0000000..8113436
--- /dev/null
@@ -0,0 +1,73 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.test.TestApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+
+public class TestApexSamplePolicyCreateModelFiles {
+    @Test
+    public void testModelWriteReadJava() throws Exception {
+        final TestApexSamplePolicyModelCreator apexPolicyModelCreator = new TestApexSamplePolicyModelCreator("JAVA");
+        final TestApexModel<AxPolicyModel> testApexPolicyModel =
+                new TestApexModel<AxPolicyModel>(AxPolicyModel.class, apexPolicyModelCreator);
+        testApexPolicyModel.testApexModelWriteReadXML();
+        testApexPolicyModel.testApexModelWriteReadJSON();
+    }
+
+    @Test
+    public void testModelWriteReadJavascript() throws Exception {
+        final TestApexSamplePolicyModelCreator apexPolicyModelCreator =
+                new TestApexSamplePolicyModelCreator("JAVASCRIPT");
+        final TestApexModel<AxPolicyModel> testApexPolicyModel =
+                new TestApexModel<AxPolicyModel>(AxPolicyModel.class, apexPolicyModelCreator);
+        testApexPolicyModel.testApexModelWriteReadXML();
+        testApexPolicyModel.testApexModelWriteReadJSON();
+    }
+
+    @Test
+    public void testModelWriteReadJRuby() throws Exception {
+        final TestApexSamplePolicyModelCreator apexPolicyModelCreator = new TestApexSamplePolicyModelCreator("JRUBY");
+        final TestApexModel<AxPolicyModel> testApexPolicyModel =
+                new TestApexModel<AxPolicyModel>(AxPolicyModel.class, apexPolicyModelCreator);
+        testApexPolicyModel.testApexModelWriteReadXML();
+        testApexPolicyModel.testApexModelWriteReadJSON();
+    }
+
+    @Test
+    public void testModelWriteReadJython() throws Exception {
+        final TestApexSamplePolicyModelCreator apexPolicyModelCreator = new TestApexSamplePolicyModelCreator("JYTHON");
+        final TestApexModel<AxPolicyModel> testApexPolicyModel =
+                new TestApexModel<AxPolicyModel>(AxPolicyModel.class, apexPolicyModelCreator);
+        testApexPolicyModel.testApexModelWriteReadXML();
+        testApexPolicyModel.testApexModelWriteReadJSON();
+    }
+
+    @Test
+    public void testModelWriteReadMvel() throws Exception {
+        final TestApexSamplePolicyModelCreator apexPolicyModelCreator = new TestApexSamplePolicyModelCreator("MVEL");
+        final TestApexModel<AxPolicyModel> testApexPolicyModel =
+                new TestApexModel<AxPolicyModel>(AxPolicyModel.class, apexPolicyModelCreator);
+        testApexPolicyModel.testApexModelWriteReadXML();
+        testApexPolicyModel.testApexModelWriteReadJSON();
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyDBWrite.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyDBWrite.java
new file mode 100644 (file)
index 0000000..48e2f80
--- /dev/null
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.dao.DAOParameters;
+import org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao;
+import org.onap.policy.apex.model.basicmodel.test.TestApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+
+public class TestApexSamplePolicyDBWrite {
+    private Connection connection;
+    TestApexModel<AxPolicyModel> testApexModel;
+
+    @Before
+    public void setup() throws Exception {
+        connection = DriverManager.getConnection("jdbc:derby:memory:apex_test;create=true");
+
+        final TestApexSamplePolicyModelCreator apexPolicyModelCreator = new TestApexSamplePolicyModelCreator("MVEL");
+        testApexModel = new TestApexModel<AxPolicyModel>(AxPolicyModel.class, apexPolicyModelCreator);
+    }
+
+    @After
+    public void teardown() throws Exception {
+        connection.close();
+    }
+
+    @Test
+    public void testModelWriteReadJPA() throws Exception {
+        final DAOParameters daoParameters = new DAOParameters();
+        daoParameters.setPluginClass(DefaultApexDao.class.getCanonicalName());
+        daoParameters.setPersistenceUnit("SampleModelTest");
+
+        testApexModel.testApexModelWriteReadJPA(daoParameters);
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModel.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModel.java
new file mode 100644 (file)
index 0000000..3673dae
--- /dev/null
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import static org.junit.Assert.assertTrue;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.dao.DAOParameters;
+import org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao;
+import org.onap.policy.apex.model.basicmodel.test.TestApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+
+public class TestApexSamplePolicyModel {
+    private static final String VALID_MODEL_STRING = "***validation of model successful***";
+    private Connection connection;
+    private TestApexModel<AxPolicyModel> testApexModel;
+
+    @Before
+    public void setup() throws Exception {
+        connection = DriverManager.getConnection("jdbc:derby:memory:apex_test;create=true");
+
+        testApexModel =
+                new TestApexModel<AxPolicyModel>(AxPolicyModel.class, new TestApexSamplePolicyModelCreator("MVEL"));
+    }
+
+    @After
+    public void teardown() throws Exception {
+        connection.close();
+    }
+
+    @Test
+    public void testModelValid() throws Exception {
+        final AxValidationResult result = testApexModel.testApexModelValid();
+        assertTrue(result.toString().equals(VALID_MODEL_STRING));
+    }
+
+    @Test
+    public void testModelWriteReadXML() throws Exception {
+        testApexModel.testApexModelWriteReadXML();
+    }
+
+    @Test
+    public void testModelWriteReadJSON() throws Exception {
+        testApexModel.testApexModelWriteReadJSON();
+    }
+
+    @Test
+    public void testModelWriteReadJPA() throws Exception {
+        final DAOParameters daoParameters = new DAOParameters();
+        daoParameters.setPluginClass(DefaultApexDao.class.getCanonicalName());
+        daoParameters.setPersistenceUnit("SampleModelTest");
+
+        testApexModel.testApexModelWriteReadJPA(daoParameters);
+    }
+
+    
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModelCreator.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModelCreator.java
new file mode 100644 (file)
index 0000000..d5ba536
--- /dev/null
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.test.common.model.SampleDomainModelFactory;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestApexSamplePolicyModelCreator implements TestApexModelCreator<AxPolicyModel> {
+    private String logicExecutorType;
+
+    public TestApexSamplePolicyModelCreator(final String logicExecutorType) {
+        this.logicExecutorType = logicExecutorType;
+    }
+
+    @Override
+    public AxPolicyModel getModel() {
+        return new SampleDomainModelFactory().getSamplePolicyModel(logicExecutorType);
+    }
+
+    @Override
+    public AxPolicyModel getMalstructuredModel() {
+        return null;
+    }
+
+    @Override
+    public AxPolicyModel getObservationModel() {
+        return null;
+    }
+
+    @Override
+    public AxPolicyModel getWarningModel() {
+        return getModel();
+    }
+
+    @Override
+    public AxPolicyModel getInvalidModel() {
+        return null;
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateDifferentModels.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateDifferentModels.java
new file mode 100644 (file)
index 0000000..5ca71cf
--- /dev/null
@@ -0,0 +1,102 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.core.engine.engine.impl.ApexEngineFactory;
+import org.onap.policy.apex.core.engine.engine.impl.ApexEngineImpl;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters;
+import org.onap.policy.apex.plugins.executor.test.script.engine.TestApexActionListener;
+import org.onap.policy.apex.test.common.model.SampleDomainModelFactory;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestApexEngine.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestContextUpdateDifferentModels {
+    // Logger for this class
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestContextUpdateDifferentModels.class);
+
+    @Test
+    public void testContextUpdateDifferentModels() throws ApexException, InterruptedException, IOException {
+        logger.debug("Running test testContextUpdateDifferentModels . . .");
+
+        final AxPolicyModel apexModelSample = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
+        assertNotNull(apexModelSample);
+
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("MVEL", new MVELExecutorParameters());
+
+        final ApexEngineImpl apexEngine =
+                (ApexEngineImpl) new ApexEngineFactory().createApexEngine(new AxArtifactKey("TestApexEngine", "0.0.1"));
+        final TestApexActionListener listener = new TestApexActionListener("Test");
+        apexEngine.addEventListener("listener", listener);
+        apexEngine.updateModel(apexModelSample);
+        apexEngine.start();
+
+        apexEngine.stop();
+
+        final AxPolicyModel someSpuriousModel = new AxPolicyModel(new AxArtifactKey("SomeSpuriousModel", "0.0.1"));
+        assertNotNull(someSpuriousModel);
+
+        try {
+            apexEngine.updateModel(null);
+            fail("null model should throw an exception");
+        } catch (final ApexException e) {
+            assertEquals("updateModel()<-TestApexEngine:0.0.1, Apex model is not defined, it has a null value",
+                    e.getMessage());
+        }
+        assertEquals(apexEngine.getInternalContext().getContextAlbums().size(),
+                apexModelSample.getAlbums().getAlbumsMap().size());
+        for (final ContextAlbum contextAlbum : apexEngine.getInternalContext().getContextAlbums().values()) {
+            assertTrue(
+                    contextAlbum.getAlbumDefinition().equals(apexModelSample.getAlbums().get(contextAlbum.getKey())));
+        }
+
+        apexEngine.updateModel(someSpuriousModel);
+        assertEquals(apexEngine.getInternalContext().getContextAlbums().size(),
+                someSpuriousModel.getAlbums().getAlbumsMap().size());
+        for (final ContextAlbum contextAlbum : apexEngine.getInternalContext().getContextAlbums().values()) {
+            assertTrue(
+                    contextAlbum.getAlbumDefinition().equals(someSpuriousModel.getAlbums().get(contextAlbum.getKey())));
+        }
+
+        apexEngine.clear();
+
+        logger.debug("Ran test testContextUpdateDifferentModels");
+    }
+
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateModel.java b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateModel.java
new file mode 100644 (file)
index 0000000..e78d4c5
--- /dev/null
@@ -0,0 +1,158 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.executor.test.script.handling;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.After;
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.core.engine.engine.ApexEngine;
+import org.onap.policy.apex.core.engine.engine.impl.ApexEngineFactory;
+import org.onap.policy.apex.core.engine.event.EnEvent;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters;
+import org.onap.policy.apex.plugins.executor.test.script.engine.TestApexActionListener;
+import org.onap.policy.apex.test.common.model.SampleDomainModelFactory;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestApexEngine.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestContextUpdateModel {
+    // Logger for this class
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestContextUpdateModel.class);
+
+
+    @Test
+    public void testContextUpdateModel() throws ApexException, InterruptedException, IOException {
+        final AxArtifactKey key = new AxArtifactKey("TestApexEngine", "0.0.1");
+
+        final EngineParameters parameters = new EngineParameters();
+        parameters.getExecutorParameterMap().put("MVEL", new MVELExecutorParameters());
+
+        final ApexEngine apexEngine = new ApexEngineFactory().createApexEngine(key);
+        final TestApexActionListener listener = new TestApexActionListener("Test");
+        apexEngine.addEventListener("listener", listener);
+
+        final AxPolicyModel model1 = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
+        assertNotNull(model1);
+        assertEquals(2, model1.getPolicies().getPolicyMap().size());
+
+        apexEngine.updateModel(model1);
+        apexEngine.start();
+        sendEvent(apexEngine, listener, "Event0000", true);
+        sendEvent(apexEngine, listener, "Event0100", true);
+        apexEngine.stop();
+
+        final AxPolicyModel model2 = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
+        assertNotNull(model2);
+        model2.getPolicies().getPolicyMap().remove(new AxArtifactKey("Policy0", "0.0.1"));
+        assertEquals(1, model2.getPolicies().getPolicyMap().size());
+        apexEngine.updateModel(model2);
+        apexEngine.start();
+        sendEvent(apexEngine, listener, "Event0000", false);
+        sendEvent(apexEngine, listener, "Event0100", true);
+        apexEngine.stop();
+
+        final AxPolicyModel model3 = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
+        assertNotNull(model3);
+        model3.getPolicies().getPolicyMap().remove(new AxArtifactKey("Policy1", "0.0.1"));
+        assertEquals(1, model3.getPolicies().getPolicyMap().size());
+        apexEngine.updateModel(model3);
+        apexEngine.start();
+        sendEvent(apexEngine, listener, "Event0000", true);
+        sendEvent(apexEngine, listener, "Event0100", false);
+        apexEngine.stop();
+
+        final AxPolicyModel model4 = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
+        assertNotNull(model4);
+        assertEquals(2, model4.getPolicies().getPolicyMap().size());
+        apexEngine.updateModel(model4);
+        apexEngine.start();
+        sendEvent(apexEngine, listener, "Event0100", true);
+        sendEvent(apexEngine, listener, "Event0000", true);
+        apexEngine.stop();
+
+        apexEngine.clear();
+    }
+
+    @After
+    public void testContextUpdateModelAfter() {}
+
+    private void sendEvent(final ApexEngine apexEngine, final TestApexActionListener listener, final String eventName,
+            final boolean shouldWork) throws ContextException {
+        final Date aDate = new Date(1433453067123L);
+        final Map<String, Object> eventDataMap = new HashMap<String, Object>();
+        eventDataMap.put("TestSlogan", "This is a test slogan");
+        eventDataMap.put("TestMatchCase", new Byte((byte) 123));
+        eventDataMap.put("TestTimestamp", aDate.getTime());
+        eventDataMap.put("TestTemperature", 34.5445667);
+
+        final EnEvent event0 = apexEngine.createEvent(new AxArtifactKey(eventName, "0.0.1"));
+        event0.putAll(eventDataMap);
+        apexEngine.handleEvent(event0);
+
+        final EnEvent result = listener.getResult(true);
+        logger.debug("result 1 is:" + result);
+        checkResult(result, shouldWork);
+    }
+
+    private void checkResult(final EnEvent result, final boolean shouldWork) {
+        if (!shouldWork) {
+            assertNotNull(result.getExceptionMessage());
+            return;
+        }
+
+        assertTrue(result.getName().equals("Event0004") || result.getName().equals("Event0104"));
+
+        if (result.getName().equals("Event0004")) {
+            assertEquals("This is a test slogan", result.get("TestSlogan"));
+            assertEquals((byte) 123, result.get("TestMatchCase"));
+            assertEquals(34.5445667, result.get("TestTemperature"));
+            assertEquals((byte) 2, result.get("TestMatchCaseSelected"));
+            assertEquals((byte) 0, result.get("TestEstablishCaseSelected"));
+            assertEquals((byte) 1, result.get("TestDecideCaseSelected"));
+            assertEquals((byte) 3, result.get("TestActCaseSelected"));
+        } else {
+            assertEquals("This is a test slogan", result.get("TestSlogan"));
+            assertEquals((byte) 123, result.get("TestMatchCase"));
+            assertEquals(34.5445667, result.get("TestTemperature"));
+            assertEquals((byte) 1, result.get("TestMatchCaseSelected"));
+            assertEquals((byte) 3, result.get("TestEstablishCaseSelected"));
+            assertEquals((byte) 1, result.get("TestDecideCaseSelected"));
+            assertEquals((byte) 2, result.get("TestActCaseSelected"));
+        }
+    }
+}
diff --git a/testsuites/integration/integration-executor-test/src/test/resources/META-INF/persistence.xml b/testsuites/integration/integration-executor-test/src/test/resources/META-INF/persistence.xml
new file mode 100644 (file)
index 0000000..5ba5bfa
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
+    <persistence-unit name="SampleModelTest" transaction-type="RESOURCE_LOCAL">
+        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+
+        <class>org.onap.policy.apex.model.basicmodel.dao.converters.CDATAConditioner</class>
+        <class>org.onap.policy.apex.model.basicmodel.dao.converters.UUID2String</class>
+        <class>org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey</class>
+        <class>org.onap.policy.apex.model.basicmodel.concepts.AxConcept</class>
+        <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo</class>
+        <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation</class>
+        <class>org.onap.policy.apex.model.basicmodel.concepts.AxModel</class>
+        <class>org.onap.policy.apex.model.basicmodel.concepts.TestEntity</class>
+        <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema</class>
+        <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas</class>
+        <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum</class>
+        <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums</class>
+        <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextModel</class>
+        <class>org.onap.policy.apex.model.eventmodel.concepts.AxField</class>
+        <class>org.onap.policy.apex.model.eventmodel.concepts.AxInputField</class>
+        <class>org.onap.policy.apex.model.eventmodel.concepts.AxOutputField</class>
+        <class>org.onap.policy.apex.model.eventmodel.concepts.AxEvent</class>
+        <class>org.onap.policy.apex.model.eventmodel.concepts.AxEvents</class>
+        <class>org.onap.policy.apex.model.eventmodel.concepts.AxEventModel</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxLogic</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxTaskParameter</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxTaskLogic</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxTask</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxTasks</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxStateFinalizerLogic</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxStateOutput</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxState</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxPolicy</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxPolicies</class>
+        <class>org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel</class>
+
+        <properties>
+            <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" />
+            <property name="javax.persistence.target-database" value="Derby" />
+            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+
+            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
+            <property name="eclipselink.ddl-generation.output-mode" value="database" />
+            <property name="eclipselink.logging.level" value="INFO" />
+        </properties>
+    </persistence-unit>
+</persistence>
diff --git a/testsuites/integration/integration-executor-test/src/test/resources/logback-test.xml b/testsuites/integration/integration-executor-test/src/test/resources/logback-test.xml
new file mode 100644 (file)
index 0000000..b0fa687
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<configuration>
+
+    <contextName>Apex</contextName>
+    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
+    <property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" />
+
+       <!-- USE FOR STD OUT ONLY -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+    <logger name="org.infinispan" level="INFO" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org.apache.zookeeper.ClientCnxn" level="OFF" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>${LOG_DIR}/apex.log</file>
+        <encoder>
+            <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+                %logger{26} - %msg %n %ex{full}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="CTXT_FILE" class="ch.qos.logback.core.FileAppender">
+        <file>${LOG_DIR}/apex_ctxt.log</file>
+        <encoder>
+            <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+                %logger{26} - %msg %n %ex{full}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.onap.policy.apex.core.context.monitoring" level="TRACE" additivity="false">
+        <appender-ref ref="CTXT_FILE" />
+    </logger>
+
+    <logger name="org.onap.policy.apex.core.engine.monitoring" level="TRACE" additivity="false">
+        <appender-ref ref="CTXT_FILE" />
+    </logger>
+
+    <logger name="org.onap.policy.apex.executionlogging" level="TRACE" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="com.ericsson.apex" level="INFO" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+</configuration>
index 366556c..9fcfd32 100644 (file)
@@ -39,6 +39,7 @@
             </activation>
             <modules>
                 <module>integration-common</module>
+                <module>integration-executor-test</module>
                 <module>integration-uservice-test</module>
             </modules>
         </profile>
@@ -51,6 +52,7 @@
             </activation>
             <modules>
                 <module>integration-common</module>
+                <module>integration-executor-test</module>
                 <module>integration-uservice-test</module>
                 <module>integration-context-metrics</module>
             </modules>
@@ -64,6 +66,7 @@
             </activation>
             <modules>
                 <module>integration-common</module>
+                <module>integration-executor-test</module>
                 <module>integration-uservice-test</module>
                 <module>integration-context-test</module>
                 <module>integration-context-metrics</module>