Increase test coverage for plugins-executor-js 29/79429/2
authorHengye <yehui.wang@est.tech>
Wed, 6 Mar 2019 05:14:13 +0000 (05:14 +0000)
committerHengye <yehui.wang@est.tech>
Wed, 6 Mar 2019 05:14:13 +0000 (05:14 +0000)
Add junit test cases into apex-pdp/plugins/plugins-executor-javascript

Issue-ID: POLICY-1523
Change-Id: Ie8017be2f7507fdb641a4020e13152c656cadf04
Signed-off-by: Hengye <yehui.wang@est.tech>
plugins/plugins-executor/plugins-executor-javascript/src/main/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptStateFinalizerExecutor.java
plugins/plugins-executor/plugins-executor-javascript/src/main/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskExecutor.java
plugins/plugins-executor/plugins-executor-javascript/src/main/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskSelectExecutor.java
plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptExecutorParametersTest.java [new file with mode: 0644]
plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptStateFinalizerExecutorTest.java [new file with mode: 0644]
plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskExecutorTest.java [new file with mode: 0644]
plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskSelectExecutorTest.java [new file with mode: 0644]

index bc3062d..2e32bb6 100644 (file)
 package org.onap.policy.apex.plugins.executor.javascript;
 
 import java.util.Map;
-
 import javax.script.Compilable;
 import javax.script.CompiledScript;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
-
 import org.onap.policy.apex.context.ContextException;
 import org.onap.policy.apex.core.engine.executor.StateFinalizerExecutor;
 import org.onap.policy.apex.core.engine.executor.exception.StateMachineException;
@@ -35,8 +33,8 @@ import org.slf4j.ext.XLogger;
 import org.slf4j.ext.XLoggerFactory;
 
 /**
- * The Class JavascriptStateFinalizerExecutor is the state finalizer executor for state finalizer logic written in
- * Javascript It is unlikely that this is thread safe.
+ * The Class JavascriptStateFinalizerExecutor is the state finalizer executor for state finalizer
+ * logic written in Javascript It is unlikely that this is thread safe.
  *
  * @author Liam Fallon (liam.fallon@ericsson.com)
  */
@@ -100,17 +98,10 @@ public class JavascriptStateFinalizerExecutor extends StateFinalizerExecutor {
                     + getSubject().getKey().getId() + "\"", e);
         }
 
-        returnValue = (boolean) engine.get("returnValue");
-
         // Do the execution post work
-        executePost(returnValue);
+        executePost((boolean) engine.get("returnValue"));
 
-        // Send back the return event
-        if (returnValue) {
-            return getOutgoing();
-        } else {
-            return null;
-        }
+        return getOutgoing();
     }
 
     /**
index 14e4ba3..af6db11 100644 (file)
 package org.onap.policy.apex.plugins.executor.javascript;
 
 import java.util.Map;
-
 import javax.script.Compilable;
 import javax.script.CompiledScript;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
-
 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;
@@ -35,8 +33,8 @@ import org.slf4j.ext.XLogger;
 import org.slf4j.ext.XLoggerFactory;
 
 /**
- * The Class JavascriptTaskExecutor is the task executor for task logic written in Javascript It is unlikely that this
- * is thread safe.
+ * The Class JavascriptTaskExecutor is the task executor for task logic written in Javascript It is
+ * unlikely that this is thread safe.
  *
  * @author Liam Fallon (liam.fallon@ericsson.com)
  */
@@ -98,31 +96,18 @@ public class JavascriptTaskExecutor extends TaskExecutor {
                     "task logic failed to run for task  \"" + getSubject().getKey().getId() + "\"", e);
         }
 
-        try {
-            final Object ret = engine.get("returnValue");
-            if (ret == null) {
-                LOGGER.error("execute: task logic failed to set a return value for task  \""
-                        + getSubject().getKey().getId() + "\"");
-                throw new StateMachineException("execute: task logic failed to set a return value for task  \""
-                        + getSubject().getKey().getId() + "\"");
-            }
-            returnValue = (Boolean) ret;
-        } catch (NullPointerException | ClassCastException e) {
-            LOGGER.error("execute: task selection logic failed to set a correct return value for state  \""
-                    + getSubject().getKey().getId() + "\"", e);
-            throw new StateMachineException("execute: task selection logic failed to set a return value for state  \""
-                    + getSubject().getKey().getId() + "\"", e);
+        final Object ret = engine.get("returnValue");
+        if (ret == null) {
+            LOGGER.error("execute: task logic failed to set a return value for task  \"" + getSubject().getKey().getId()
+                    + "\"");
+            throw new StateMachineException("execute: task logic failed to set a return value for task  \""
+                    + getSubject().getKey().getId() + "\"");
         }
 
         // Do the execution post work
-        executePost(returnValue);
+        executePost((Boolean) ret);
 
-        // Send back the return event
-        if (returnValue) {
-            return getOutgoing();
-        } else {
-            return null;
-        }
+        return getOutgoing();
     }
 
     /**
index adeb73f..80b005f 100644 (file)
@@ -25,7 +25,6 @@ import javax.script.CompiledScript;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
-
 import org.onap.policy.apex.context.ContextException;
 import org.onap.policy.apex.core.engine.event.EnEvent;
 import org.onap.policy.apex.core.engine.executor.TaskSelectExecutor;
@@ -35,8 +34,8 @@ import org.slf4j.ext.XLogger;
 import org.slf4j.ext.XLoggerFactory;
 
 /**
- * The Class JavascriptTaskSelectExecutor is the task selection executor for task selection logic written in Javascript
- * It is unlikely that this is thread safe.
+ * The Class JavascriptTaskSelectExecutor is the task selection executor for task selection logic
+ * written in Javascript It is unlikely that this is thread safe.
  *
  * @author Liam Fallon (liam.fallon@ericsson.com)
  */
@@ -46,7 +45,7 @@ public class JavascriptTaskSelectExecutor extends TaskSelectExecutor {
 
     // Recurring string constants
     private static final String TSL_FAILED_PREFIX =
-                    "execute: task selection logic failed to set a return value for state  \"";
+            "execute: task selection logic failed to set a return value for state  \"";
 
     // Javascript engine
     private ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
@@ -65,9 +64,9 @@ public class JavascriptTaskSelectExecutor extends TaskSelectExecutor {
             compiled = ((Compilable) engine).compile(getSubject().getTaskSelectionLogic().getLogic());
         } catch (final ScriptException e) {
             LOGGER.error("execute: task selection logic failed to compile for state  \"" + getSubject().getKey().getId()
-                            + "\"");
-            throw new StateMachineException("task selection logic failed to compile for state  \""
-                            + getSubject().getKey().getId() + "\"", e);
+                    + "\"");
+            throw new StateMachineException(
+                    "task selection logic failed to compile for state  \"" + getSubject().getKey().getId() + "\"", e);
         }
 
     }
@@ -83,7 +82,7 @@ public class JavascriptTaskSelectExecutor extends TaskSelectExecutor {
      */
     @Override
     public AxArtifactKey execute(final long executionId, final EnEvent incomingEvent)
-                    throws StateMachineException, ContextException {
+            throws StateMachineException, ContextException {
         // Do execution pre work
         executePre(executionId, incomingEvent);
 
@@ -99,35 +98,22 @@ public class JavascriptTaskSelectExecutor extends TaskSelectExecutor {
                 compiled.eval(engine.getContext());
             }
         } catch (final ScriptException e) {
-            LOGGER.error("execute: task selection logic failed to run for state  \"" + getSubject().getKey().getId()
-                            + "\"");
+            LOGGER.error(
+                    "execute: task selection logic failed to run for state  \"" + getSubject().getKey().getId() + "\"");
             throw new StateMachineException(
-                            "task selection logic failed to run for state  \"" + getSubject().getKey().getId() + "\"",
-                            e);
+                    "task selection logic failed to run for state  \"" + getSubject().getKey().getId() + "\"", e);
         }
 
-        try {
-            final Object ret = engine.get("returnValue");
-            if (ret == null) {
-                LOGGER.error(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"");
-                throw new StateMachineException(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"");
-            }
-            returnValue = (Boolean) ret;
-        } catch (NullPointerException | ClassCastException e) {
-            LOGGER.error("execute: task selection logic failed to set a correct return value for state  \""
-                            + getSubject().getKey().getId() + "\"", e);
-            throw new StateMachineException(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"", e);
+        final Object ret = engine.get("returnValue");
+        if (ret == null) {
+            LOGGER.error(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"");
+            throw new StateMachineException(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"");
         }
 
         // Do the execution post work
-        executePost(returnValue);
+        executePost((Boolean) ret);
 
-        // Send back the return event
-        if (returnValue) {
-            return getOutgoing();
-        } else {
-            return null;
-        }
+        return getOutgoing();
     }
 
     /**
@@ -138,8 +124,8 @@ public class JavascriptTaskSelectExecutor extends TaskSelectExecutor {
     @Override
     public void cleanUp() throws StateMachineException {
         LOGGER.debug("cleanUp:" + getSubject().getKey().getId() + ","
-                        + getSubject().getTaskSelectionLogic().getLogicFlavour() + ","
-                        + getSubject().getTaskSelectionLogic().getLogic());
+                + getSubject().getTaskSelectionLogic().getLogicFlavour() + ","
+                + getSubject().getTaskSelectionLogic().getLogic());
         engine = null;
     }
 }
diff --git a/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptExecutorParametersTest.java b/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptExecutorParametersTest.java
new file mode 100644 (file)
index 0000000..eabfd44
--- /dev/null
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.javascript;
+
+import static org.junit.Assert.assertNotNull;
+import org.junit.Test;
+
+/**
+ * Test the JavaExecutorParameters class.
+ */
+public class JavascriptExecutorParametersTest {
+
+    @Test
+    public void testJavascriptExecutorParameters() {
+        assertNotNull(new JavascriptExecutorParameters());
+    }
+}
diff --git a/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptStateFinalizerExecutorTest.java b/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptStateFinalizerExecutorTest.java
new file mode 100644 (file)
index 0000000..6ab9cb6
--- /dev/null
@@ -0,0 +1,163 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.javascript;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.parameters.ContextParameterConstants;
+import org.onap.policy.apex.context.parameters.DistributorParameters;
+import org.onap.policy.apex.context.parameters.LockManagerParameters;
+import org.onap.policy.apex.context.parameters.PersistorParameters;
+import org.onap.policy.apex.core.engine.EngineParameterConstants;
+import org.onap.policy.apex.core.engine.EngineParameters;
+import org.onap.policy.apex.core.engine.context.ApexInternalContext;
+import org.onap.policy.apex.core.engine.event.EnEvent;
+import org.onap.policy.apex.core.engine.executor.StateExecutor;
+import org.onap.policy.apex.core.engine.executor.exception.StateMachineException;
+import org.onap.policy.apex.core.engine.executor.impl.ExecutorFactoryImpl;
+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.model.policymodel.concepts.AxState;
+import org.onap.policy.apex.model.policymodel.concepts.AxStateFinalizerLogic;
+import org.onap.policy.common.parameters.ParameterService;
+
+/**
+ * Test the JavascriptStateFinalizerExecutor class.
+ *
+ */
+public class JavascriptStateFinalizerExecutorTest {
+    /**
+     * Initiate Parameters.
+     */
+    @Before
+    public void initiateParameters() {
+        ParameterService.register(new DistributorParameters());
+        ParameterService.register(new LockManagerParameters());
+        ParameterService.register(new PersistorParameters());
+        ParameterService.register(new EngineParameters());
+    }
+
+    /**
+     * Clear down Parameters.
+     */
+    @After
+    public void clearParameters() {
+        ParameterService.deregister(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);
+        ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME);
+        ParameterService.deregister(ContextParameterConstants.PERSISTENCE_GROUP_NAME);
+        ParameterService.deregister(EngineParameterConstants.MAIN_GROUP_NAME);
+    }
+
+    @Test
+    public void testJavaStateFinalizerExecutor() {
+        JavascriptStateFinalizerExecutor jsfe = new JavascriptStateFinalizerExecutor();
+        assertNotNull(jsfe);
+
+        try {
+            jsfe.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(java.lang.NullPointerException.class, jtseException.getClass());
+        }
+
+        ApexInternalContext internalContext = null;
+        try {
+            internalContext = new ApexInternalContext(new AxPolicyModel());
+        } catch (ContextException e) {
+            fail("test should not throw an exception here");
+        }
+
+        StateExecutor parentStateExcutor = null;
+        try {
+            parentStateExcutor = new StateExecutor(new ExecutorFactoryImpl());
+        } catch (StateMachineException e) {
+            fail("test should not throw an exception here");
+        }
+
+        AxState state = new AxState();
+        parentStateExcutor.setContext(null, state, internalContext);
+        AxStateFinalizerLogic stateFinalizerLogic = new AxStateFinalizerLogic();
+        jsfe.setContext(parentStateExcutor, stateFinalizerLogic, internalContext);
+
+        stateFinalizerLogic.setLogic("return false");
+        try {
+            jsfe.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals("state finalizer logic failed to compile for state finalizer  \"NULL:0.0.0:NULL:NULL\"",
+                    jtseException.getMessage());
+        }
+
+        Map<String, Object> incomingParameters1 = new HashMap<>();
+        try {
+            jsfe.execute(-1, incomingParameters1);
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("state finalizer logic failed to run for state finalizer  \"NULL:0.0.0:NULL:NULL\"",
+                    jteException.getMessage());
+        }
+
+        stateFinalizerLogic.setLogic("java.lang.String");
+        try {
+            jsfe.prepare();
+        } catch (Exception jtseException) {
+            fail("test should not throw an exception here");
+        }
+
+        AxEvent axEvent = new AxEvent(new AxArtifactKey("Event", "0.0.1"));
+        EnEvent event = new EnEvent(axEvent);
+        stateFinalizerLogic.setLogic(
+                "if(executor.executionId==-1)" + "{\r\n" + "var returnValueType = Java.type(\"java.lang.Boolean\");"
+                        + "var returnValue = new returnValueType(false); }\n" + "else{\n"
+                        + "executor.setSelectedStateOutputName(\"SelectedOutputIsMe\");\n"
+                        + "var returnValueType = Java.type(\"java.lang.Boolean\");\n" + "\n"
+                        + "var returnValue = new returnValueType(true);}");
+        try {
+            jsfe.prepare();
+            jsfe.execute(-1, event);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(
+                    "execute-post: state finalizer logic execution failure on state \"NULL:0.0.0:NULL:NULL\" "
+                            + "on finalizer logic NULL:0.0.0:NULL:NULL",
+                    jtseException.getMessage());
+        }
+
+        state.getStateOutputs().put("SelectedOutputIsMe", null);
+        try {
+            jsfe.prepare();
+            String stateOutput = jsfe.execute(0, event);
+            assertEquals("SelectedOutputIsMe", stateOutput);
+            jsfe.cleanUp();
+        } catch (Exception jtseException) {
+            jtseException.printStackTrace();
+            fail("test should not throw an exception here");
+        }
+    }
+}
diff --git a/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskExecutorTest.java b/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskExecutorTest.java
new file mode 100644 (file)
index 0000000..b98e2c0
--- /dev/null
@@ -0,0 +1,149 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.javascript;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.parameters.ContextParameterConstants;
+import org.onap.policy.apex.context.parameters.DistributorParameters;
+import org.onap.policy.apex.context.parameters.LockManagerParameters;
+import org.onap.policy.apex.context.parameters.PersistorParameters;
+import org.onap.policy.apex.core.engine.context.ApexInternalContext;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxTask;
+import org.onap.policy.common.parameters.ParameterService;
+
+/**
+ * Test the JavaTaskExecutor class.
+ *
+ */
+public class JavascriptTaskExecutorTest {
+    /**
+     * Initiate Parameters.
+     */
+    @Before
+    public void initiateParameters() {
+        ParameterService.register(new DistributorParameters());
+        ParameterService.register(new LockManagerParameters());
+        ParameterService.register(new PersistorParameters());
+    }
+
+    /**
+     * Clear Parameters.
+     */
+    @After
+    public void clearParameters() {
+        ParameterService.deregister(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);
+        ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME);
+        ParameterService.deregister(ContextParameterConstants.PERSISTENCE_GROUP_NAME);
+    }
+
+    @Test
+    public void testJavascriptTaskExecutor() {
+        JavascriptTaskExecutor jte = new JavascriptTaskExecutor();
+        assertNotNull(jte);
+
+        try {
+            jte.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals(java.lang.NullPointerException.class, jteException.getClass());
+        }
+
+        AxTask task = new AxTask();
+        ApexInternalContext internalContext = null;
+        try {
+            internalContext = new ApexInternalContext(new AxPolicyModel());
+        } catch (ContextException e) {
+            fail("test should not throw an exception here");
+        }
+        jte.setContext(null, task, internalContext);
+
+        task.getTaskLogic().setLogic("return boolean");
+        try {
+            jte.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("task logic failed to compile for task  \"NULL:0.0.0\"", jteException.getMessage());
+        }
+
+        Map<String, Object> incomingParameters2 = new HashMap<>();
+        try {
+            jte.execute(-1, incomingParameters2);
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("task logic failed to run for task  \"NULL:0.0.0\"", jteException.getMessage());
+        }
+
+        task.getTaskLogic().setLogic("java.lang.String");
+
+        try {
+            jte.prepare();
+        } catch (Exception jteException) {
+            fail("test should not throw an exception here");
+        }
+
+        try {
+            jte.execute(-1, null);
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals(java.lang.NullPointerException.class, jteException.getClass());
+        }
+
+        Map<String, Object> incomingParameters = new HashMap<>();
+        try {
+            jte.execute(-1, incomingParameters);
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("execute: task logic failed to set a return value for task  \"NULL:0.0.0\"",
+                    jteException.getMessage());
+        }
+
+        task.getTaskLogic().setLogic("var returnValueType = Java.type(\"java.lang.Boolean\");\r\n"
+                + "var returnValue = new returnValueType(false); ");
+        try {
+            jte.prepare();
+            jte.execute(-1, incomingParameters);
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("execute-post: task logic execution failure on task \"NULL\" in model NULL:0.0.0",
+                    jteException.getMessage());
+        }
+
+        task.getTaskLogic().setLogic("var returnValueType = Java.type(\"java.lang.Boolean\");\r\n"
+                + "var returnValue = new returnValueType(true); ");
+        try {
+            jte.prepare();
+            Map<String, Object> returnMap = jte.execute(0, incomingParameters);
+            assertEquals(0, returnMap.size());
+            jte.cleanUp();
+        } catch (Exception jteException) {
+            fail("test should not throw an exception here");
+        }
+    }
+}
diff --git a/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskSelectExecutorTest.java b/plugins/plugins-executor/plugins-executor-javascript/src/test/java/org/onap/policy/apex/plugins/executor/javascript/JavascriptTaskSelectExecutorTest.java
new file mode 100644 (file)
index 0000000..1c99b32
--- /dev/null
@@ -0,0 +1,156 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.javascript;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.parameters.ContextParameterConstants;
+import org.onap.policy.apex.context.parameters.DistributorParameters;
+import org.onap.policy.apex.context.parameters.LockManagerParameters;
+import org.onap.policy.apex.context.parameters.PersistorParameters;
+import org.onap.policy.apex.core.engine.context.ApexInternalContext;
+import org.onap.policy.apex.core.engine.event.EnEvent;
+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.model.policymodel.concepts.AxState;
+import org.onap.policy.common.parameters.ParameterService;
+
+/**
+ * Test the JavaTaskSelectExecutor class.
+ *
+ */
+public class JavascriptTaskSelectExecutorTest {
+    /**
+     * Initiate Parameters.
+     */
+    @Before
+    public void initiateParameters() {
+        ParameterService.register(new DistributorParameters());
+        ParameterService.register(new LockManagerParameters());
+        ParameterService.register(new PersistorParameters());
+    }
+
+    /**
+     * Clear Parameters.
+     */
+    @After
+    public void clearParameters() {
+        ParameterService.deregister(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);
+        ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME);
+        ParameterService.deregister(ContextParameterConstants.PERSISTENCE_GROUP_NAME);
+    }
+
+    @Test
+    public void testJavascriptTaskSelectExecutor() {
+        JavascriptTaskSelectExecutor jtse = new JavascriptTaskSelectExecutor();
+        assertNotNull(jtse);
+
+        try {
+            jtse.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(java.lang.NullPointerException.class, jtseException.getClass());
+        }
+
+        AxState state = new AxState();
+        ApexInternalContext internalContext = null;
+        try {
+            internalContext = new ApexInternalContext(new AxPolicyModel());
+        } catch (ContextException e) {
+            fail("test should not throw an exception here");
+        }
+        jtse.setContext(null, state, internalContext);
+
+        state.getTaskSelectionLogic().setLogic("x!0");
+        try {
+            jtse.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals("task selection logic failed to compile for state  \"NULL:0.0.0:NULL:NULL\"",
+                    jtseException.getMessage());
+        }
+
+        AxEvent axEvent1 = new AxEvent(new AxArtifactKey("Event", "0.0.1"));
+        EnEvent event1 = new EnEvent(axEvent1);
+        try {
+            jtse.execute(-1, event1);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(
+                    "task selection logic failed to run for state  \"NULL:0.0.0:NULL:NULL\"",
+                    jtseException.getMessage());
+        }
+
+        state.getTaskSelectionLogic().setLogic("java.lang.String");
+
+        try {
+            jtse.prepare();
+        } catch (Exception jtseException) {
+            fail("test should not throw an exception here");
+        }
+
+        try {
+            jtse.execute(-1, null);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(java.lang.NullPointerException.class, jtseException.getClass());
+        }
+
+        AxEvent axEvent = new AxEvent(new AxArtifactKey("Event", "0.0.1"));
+        EnEvent event = new EnEvent(axEvent);
+        try {
+            jtse.execute(-1, event);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(
+                    "execute: task selection logic failed to set a return value for state  \"NULL:0.0.0:NULL:NULL\"",
+                    jtseException.getMessage());
+        }
+
+        state.getTaskSelectionLogic().setLogic("var returnValueType = Java.type(\"java.lang.Boolean\");\r\n"
+                + "var returnValue = new returnValueType(false); ");
+        try {
+            jtse.prepare();
+            jtse.execute(-1, event);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals("execute-post: task selection logic failed on state \"NULL:0.0.0:NULL:NULL\"",
+                    jtseException.getMessage());
+        }
+
+        state.getTaskSelectionLogic().setLogic("var returnValueType = Java.type(\"java.lang.Boolean\");\r\n"
+                + "var returnValue = new returnValueType(true); ");
+        try {
+            jtse.prepare();
+            AxArtifactKey taskKey = jtse.execute(0, event);
+            assertEquals("NULL:0.0.0", taskKey.getId());
+            jtse.cleanUp();
+        } catch (Exception jtseException) {
+            fail("test should not throw an exception here");
+        }
+    }
+}