Increase test coverage for plugins-executor-jython 39/79239/2
authorning.xi <ning.xi@est.tech>
Thu, 28 Feb 2019 03:01:19 +0000 (03:01 +0000)
committerning.xi <ning.xi@est.tech>
Thu, 28 Feb 2019 03:01:19 +0000 (03:01 +0000)
Add junit test cases into apex-pdp/plugins/plugins-executor-jython

Issue-ID: POLICY-1523
Change-Id: I2545a9cefc6b4b9a53200b98081ddd8bc8274b40
Signed-off-by: ning.xi <ning.xi@est.tech>
plugins/plugins-executor/plugins-executor-jython/src/main/java/org/onap/policy/apex/plugins/executor/jython/JythonStateFinalizerExecutor.java
plugins/plugins-executor/plugins-executor-jython/src/main/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskExecutor.java
plugins/plugins-executor/plugins-executor-jython/src/main/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskSelectExecutor.java
plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonExecutorParametersTest.java [new file with mode: 0644]
plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonStateFinalizerExecutorTest.java [new file with mode: 0644]
plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskExecutorTest.java [new file with mode: 0644]
plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskSelectExecutorTest.java [new file with mode: 0644]

index ecd9f7a..3636d81 100644 (file)
 package org.onap.policy.apex.plugins.executor.jython;
 
 import java.util.Map;
-
 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;
 import org.python.core.CompileMode;
+import org.python.core.CompilerFlags;
 import org.python.core.Py;
 import org.python.core.PyCode;
 import org.python.core.PyException;
@@ -61,8 +61,9 @@ public class JythonStateFinalizerExecutor extends StateFinalizerExecutor {
         super.prepare();
         try {
             synchronized (Py.class) {
-                compiled = Py.compile_flags(getSubject().getLogic(), "<" + getSubject().getKey().toString() + ">",
-                        CompileMode.exec, null);
+                final String logic = getSubject().getLogic();
+                final String filename = "<" + getSubject().getKey().toString() + ">";
+                compiled = Py.compile_flags(logic, filename, CompileMode.exec, new CompilerFlags());
             }
         } catch (final PyException e) {
             LOGGER.warn("failed to compile Jython code for state finalizer " + getSubject().getKey(), e);
@@ -98,7 +99,7 @@ public class JythonStateFinalizerExecutor extends StateFinalizerExecutor {
                 // Set up the Jython engine
                 interpreter.set("executor", getExecutionContext());
                 interpreter.exec(compiled);
-                returnValue = (boolean) interpreter.get("returnValue", java.lang.Boolean.class);
+                returnValue = interpreter.get("returnValue", java.lang.Boolean.class);
             }
             /* */
         } catch (final Exception e) {
@@ -111,11 +112,7 @@ public class JythonStateFinalizerExecutor extends StateFinalizerExecutor {
         executePost(returnValue);
 
         // Send back the return event
-        if (returnValue) {
-            return getOutgoing();
-        } else {
-            return null;
-        }
+        return getOutgoing();
     }
 
     /**
index bddb63b..1280fb8 100644 (file)
@@ -21,7 +21,6 @@
 package org.onap.policy.apex.plugins.executor.jython;
 
 import java.util.Map;
-
 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;
@@ -113,40 +112,26 @@ public class JythonTaskExecutor extends TaskExecutor {
         executePost(returnValue);
 
         // Send back the return event
-        if (returnValue) {
-            return getOutgoing();
-        } else {
-            return null;
-        }
+        return getOutgoing();
+
     }
 
     /**
      * Handle the result returned by the interpreter.
-     * 
+     *
      * @return true if the result was successful
      * @throws StateMachineException on interpreter failures
      */
     private boolean handleInterpreterResult() throws StateMachineException {
-        boolean returnValue = false;
-        
-        try {
-            final Object ret = interpreter.get("returnValue", java.lang.Boolean.class);
-            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 = interpreter.get("returnValue", java.lang.Boolean.class);
+        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() + "\"");
         }
-        return returnValue;
+        return (Boolean) ret;
+
     }
 
     /**
index 9a24331..d6e6dd7 100644 (file)
@@ -44,8 +44,8 @@ public class JythonTaskSelectExecutor extends TaskSelectExecutor {
     private static final XLogger LOGGER = XLoggerFactory.getXLogger(JythonTaskSelectExecutor.class);
 
     // Recurring string constants
-    private static final String TSL_FAILED_PREFIX = 
-                    "execute: task selection logic failed to set a return value for state  \"";
+    private static final String TSL_FAILED_PREFIX =
+            "execute: task selection logic failed to set a return value for state  \"";
 
     // The Jython interpreter
     private final PythonInterpreter interpreter = new PythonInterpreter();
@@ -117,41 +117,24 @@ public class JythonTaskSelectExecutor extends TaskSelectExecutor {
         executePost(returnValue);
 
         // Send back the return event
-        if (returnValue) {
-            return getOutgoing();
-        } else {
-            return null;
-        }
+        return getOutgoing();
+
     }
 
     /**
      * Handle the result returned by the interpreter.
-     * 
+     *
      * @return true if the result was successful
      * @throws StateMachineException on interpreter errors
      */
     private boolean handleInterpreterResult() throws StateMachineException {
-        boolean returnValue = false;
-        
-        try {
-            final Object ret = interpreter.get("returnValue", java.lang.Boolean.class);
-            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 = interpreter.get("returnValue", java.lang.Boolean.class);
+        if (ret == null) {
+            LOGGER.error(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"");
+            throw new StateMachineException(TSL_FAILED_PREFIX + getSubject().getKey().getId() + "\"");
         }
-        return returnValue;
+        return (Boolean) ret;
+
     }
 
     /**
diff --git a/plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonExecutorParametersTest.java b/plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonExecutorParametersTest.java
new file mode 100644 (file)
index 0000000..8bfde0a
--- /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.jython;
+
+import static org.junit.Assert.assertNotNull;
+import org.junit.Test;
+
+/**
+ * Test the JythonExecutorParameters class.
+ */
+public class JythonExecutorParametersTest {
+
+    @Test
+    public void testJavaExecutorParameters() {
+        assertNotNull(new JythonExecutorParameters());
+    }
+}
diff --git a/plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonStateFinalizerExecutorTest.java b/plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonStateFinalizerExecutorTest.java
new file mode 100644 (file)
index 0000000..2ae41d6
--- /dev/null
@@ -0,0 +1,170 @@
+/*-
+ * ============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.jython;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import java.util.Map;
+import java.util.TreeMap;
+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.basicmodel.concepts.AxReferenceKey;
+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.apex.model.policymodel.concepts.AxStateOutput;
+import org.onap.policy.common.parameters.ParameterService;
+
+/**
+ * Test the JythonStateFinalizerExecutor class.
+ *
+ */
+public class JythonStateFinalizerExecutorTest {
+    /**
+     * 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 testJythonStateFinalizerExecutor() {
+        JythonStateFinalizerExecutor jsfe = new JythonStateFinalizerExecutor();
+        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();
+        Map<String, AxStateOutput> stateOutputs = new TreeMap<>();
+        AxArtifactKey triggerKey = new AxArtifactKey("TriggerName", "0.0.1");
+        AxStateOutput isMe = new AxStateOutput(new AxReferenceKey(), triggerKey,
+                new AxReferenceKey());
+        stateOutputs.put("SelectedOutputIsMe", isMe);
+        state.setStateOutputs(stateOutputs);
+
+        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(
+                    "failed to compile Jython code for state finalizer AxReferenceKey:"
+                            + "(parentKeyName=NULL,parentKeyVersion=0.0.0,parentLocalName=NULL,localName=NULL)",
+                    jtseException.getMessage());
+        }
+
+        String scriptSource = "for i in range(0,10): print(i)";
+        stateFinalizerLogic.setLogic(scriptSource);
+        try {
+            jsfe.prepare();
+            jsfe.execute(-1, null);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals(
+                    "failed to execute Jython code for state finalizer AxReferenceKey:(parentKeyName=NULL,"
+                            + "parentKeyVersion=0.0.0,parentLocalName=NULL,localName=NULL)",
+                    jtseException.getMessage());
+        }
+
+        scriptSource = "setattr(executor, 'selectedStateOutputName', 'SelectedOutputIsMe')\n"
+                + "returnValue=('' if executor == -1 else True)";
+          stateFinalizerLogic.setLogic(scriptSource);
+         try {
+             jsfe.prepare();
+         } catch (Exception jteException) {
+             fail("test should not throw an exception here");
+         }
+
+        AxEvent axEvent = new AxEvent(new AxArtifactKey("Event", "0.0.1"));
+        EnEvent event = new EnEvent(axEvent);
+        try {
+            jsfe.execute(0, event);
+        } catch (Exception jtseException) {
+            jtseException.printStackTrace();
+            fail("test should not throw an exception here");
+        }
+
+        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-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskExecutorTest.java b/plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskExecutorTest.java
new file mode 100644 (file)
index 0000000..97af4b1
--- /dev/null
@@ -0,0 +1,145 @@
+/*-
+ * ============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.jython;
+
+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.basicmodel.concepts.AxArtifactKey;
+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 JythonTaskExecutorTest {
+    /**
+     * 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 testJythonTaskExecutor() {
+        JythonTaskExecutor jte = new JythonTaskExecutor();
+        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 false");
+        try {
+            jte.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("failed to compile Jython code 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("failed to execute Jython code for task NULL:0.0.0", jteException.getMessage());
+        }
+
+        String scriptSource = "for i in range(0,10): print(i)";
+        task.getTaskLogic().setLogic(scriptSource);
+        AxArtifactKey taskKey = new AxArtifactKey("String", "0.0.1");
+        task.setKey(taskKey);
+
+        try {
+            jte.prepare();
+            Map<String, Object> returnMap = jte.execute(-1, incomingParameters);
+            assertEquals(0, returnMap.size());
+            jte.cleanUp();
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("failed to execute Jython code for task String:0.0.1", jteException.getMessage());
+        }
+
+        scriptSource = "returnValue=('' if executor == -1 else True)";
+        task.getTaskLogic().setLogic(scriptSource);
+        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-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskSelectExecutorTest.java b/plugins/plugins-executor/plugins-executor-jython/src/test/java/org/onap/policy/apex/plugins/executor/jython/JythonTaskSelectExecutorTest.java
new file mode 100644 (file)
index 0000000..d54887a
--- /dev/null
@@ -0,0 +1,128 @@
+/*-
+ * ============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.jython;
+
+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 JythonTaskSelectExecutor class.
+ *
+ */
+public class JythonTaskSelectExecutorTest {
+    /**
+     * 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 testJythonTaskSelectExecutor() {
+        JythonTaskSelectExecutor jtse = new JythonTaskSelectExecutor();
+        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("return false");
+        try {
+            jtse.prepare();
+            fail("test should throw an exception here");
+        } catch (Exception jteException) {
+            assertEquals("failed to compile Jython code for task selection logic in NULL:0.0.0:NULL:NULL",
+                    jteException.getMessage());
+        }
+
+        String scriptSource = "for i in range(0,10): print(i)";
+        state.getTaskSelectionLogic().setLogic(scriptSource);
+        try {
+            jtse.prepare();
+            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.prepare();
+            jtse.execute(-1, event);
+            fail("test should throw an exception here");
+        } catch (Exception jtseException) {
+            assertEquals("failed to execute Jython code for task selection logic in NULL:0.0.0:NULL:NULL",
+                    jtseException.getMessage());
+        }
+
+        scriptSource = "returnValue=('' if executor == -1 else True)";
+        state.getTaskSelectionLogic().setLogic(scriptSource);
+        try {
+            jtse.prepare();
+            jtse.execute(-1, event);
+            jtse.cleanUp();
+        } catch (Exception jtseException) {
+            fail("test should not throw an exception here");
+        }
+    }
+}