diff options
Diffstat (limited to 'testsuites')
20 files changed, 1583 insertions, 0 deletions
diff --git a/testsuites/integration/integration-executor-test/pom.xml b/testsuites/integration/integration-executor-test/pom.xml new file mode 100644 index 000000000..d064f6373 --- /dev/null +++ b/testsuites/integration/integration-executor-test/pom.xml @@ -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 index 000000000..fa79843e9 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexActionListener.java @@ -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 index 000000000..b087552eb --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngine.java @@ -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 index 000000000..8b1cc0b04 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJRuby.java @@ -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 index 000000000..44593a0a2 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJava.java @@ -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 index 000000000..1f55f8458 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJavascript.java @@ -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 index 000000000..eabe63dfb --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineJython.java @@ -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 index 000000000..aea7cecc6 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/engine/TestApexEngineMVEL.java @@ -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 index 000000000..0ed78a13f --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/event/TestEventInstantiation.java @@ -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 index 000000000..6b72faa8f --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexModelExport.java @@ -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 index 000000000..91153d698 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexPolicyModelAnalysis.java @@ -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 index 000000000..8113436ca --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyCreateModelFiles.java @@ -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 index 000000000..48e2f8058 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyDBWrite.java @@ -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 index 000000000..3673dae2f --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModel.java @@ -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 index 000000000..d5ba53699 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestApexSamplePolicyModelCreator.java @@ -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 index 000000000..5ca71cf33 --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateDifferentModels.java @@ -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 index 000000000..e78d4c5bb --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/java/org/onap/policy/apex/plugins/executor/test/script/handling/TestContextUpdateModel.java @@ -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 index 000000000..5ba5bfa4c --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/resources/META-INF/persistence.xml @@ -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 index 000000000..b0fa687ce --- /dev/null +++ b/testsuites/integration/integration-executor-test/src/test/resources/logback-test.xml @@ -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> diff --git a/testsuites/integration/pom.xml b/testsuites/integration/pom.xml index 366556cf1..9fcfd324e 100644 --- a/testsuites/integration/pom.xml +++ b/testsuites/integration/pom.xml @@ -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> |