0cc4764254b2cb1b45bab43fa4322faf4225c0da
[policy/apex-pdp.git] /
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  *  Copyright (C) 2019-2020 Nordix Foundation.\r
4  *  Modifications Copyright (C) 2021 Bell Canada. All rights reserved.\r
5  * ================================================================================\r
6  * Licensed under the Apache License, Version 2.0 (the "License");\r
7  * you may not use this file except in compliance with the License.\r
8  * You may obtain a copy of the License at\r
9  *\r
10  *      http://www.apache.org/licenses/LICENSE-2.0\r
11  *\r
12  * Unless required by applicable law or agreed to in writing, software\r
13  * distributed under the License is distributed on an "AS IS" BASIS,\r
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
15  * See the License for the specific language governing permissions and\r
16  * limitations under the License.\r
17  *\r
18  * SPDX-License-Identifier: Apache-2.0\r
19  * ============LICENSE_END=========================================================\r
20  */\r
21 \r
22 package org.onap.policy.apex.plugins.executor.jruby;\r
23 \r
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;\r
25 import static org.junit.Assert.assertEquals;\r
26 import static org.junit.Assert.assertNotNull;\r
27 \r
28 import java.lang.reflect.Field;\r
29 import java.util.HashMap;\r
30 import java.util.Map;\r
31 import java.util.Properties;\r
32 import java.util.TreeMap;\r
33 import org.junit.After;\r
34 import org.junit.Before;\r
35 import org.junit.Test;\r
36 import org.onap.policy.apex.context.ContextException;\r
37 import org.onap.policy.apex.context.parameters.ContextParameterConstants;\r
38 import org.onap.policy.apex.context.parameters.DistributorParameters;\r
39 import org.onap.policy.apex.context.parameters.LockManagerParameters;\r
40 import org.onap.policy.apex.context.parameters.PersistorParameters;\r
41 import org.onap.policy.apex.core.engine.context.ApexInternalContext;\r
42 import org.onap.policy.apex.core.engine.executor.exception.StateMachineException;\r
43 import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;\r
44 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;\r
45 import org.onap.policy.apex.model.policymodel.concepts.AxTask;\r
46 import org.onap.policy.common.parameters.ParameterService;\r
47 \r
48 /**\r
49  * Test the JrubyTaskExecutor class.\r
50  *\r
51  */\r
52 public class JrubyTaskExecutorTest {\r
53     /**\r
54      * Initiate Parameters.\r
55      */\r
56     @Before\r
57     public void initiateParameters() {\r
58         ParameterService.register(new DistributorParameters());\r
59         ParameterService.register(new LockManagerParameters());\r
60         ParameterService.register(new PersistorParameters());\r
61     }\r
62 \r
63     /**\r
64      * Clear Parameters.\r
65      */\r
66     @After\r
67     public void clearParameters() {\r
68         ParameterService.deregister(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);\r
69         ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME);\r
70         ParameterService.deregister(ContextParameterConstants.PERSISTENCE_GROUP_NAME);\r
71     }\r
72 \r
73     @Test\r
74     public void testJrubyTaskExecutor() throws StateMachineException, ContextException,\r
75         IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {\r
76         // Run test twice to check for incorrect shutdown activity\r
77         jrubyExecutorTest();\r
78         jrubyExecutorTest();\r
79     }\r
80 \r
81     /**\r
82      * Test the JRuby executor.\r
83      */\r
84     private void jrubyExecutorTest() throws StateMachineException, ContextException,\r
85         IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {\r
86         JrubyTaskExecutor jte = new JrubyTaskExecutor();\r
87         assertNotNull(jte);\r
88 \r
89         Field fieldContainer = JrubyTaskExecutor.class.getDeclaredField("container");\r
90         fieldContainer.setAccessible(true);\r
91         fieldContainer.set(jte, null);\r
92         assertThatThrownBy(jte::prepare).isInstanceOf(java.lang.NullPointerException.class);\r
93         AxTask task = new AxTask();\r
94         ApexInternalContext internalContext = null;\r
95         internalContext = new ApexInternalContext(new AxPolicyModel());\r
96         task.setInputEvent(new AxEvent());\r
97         task.setOutputEvents(new TreeMap<>());\r
98         jte.setContext(null, task, internalContext);\r
99 \r
100         jte.prepare();\r
101 \r
102         Map<String, Object> incomingParameters = new HashMap<>();\r
103         assertThatThrownBy(() -> jte.execute(-1, new Properties(), incomingParameters))\r
104             .hasMessage("execute-post: task logic execution failure on task \"NULL\" in model NULL:0.0.0");\r
105         final String jrubyLogic = "if executor.executionId == -1" + "\n return false" + "\n else " + "\n return true"\r
106                         + "\n end";\r
107         task.getTaskLogic().setLogic(jrubyLogic);\r
108         jte.prepare();\r
109         Map<String, Map<String, Object>> returnMap = jte.execute(0, new Properties(), incomingParameters);\r
110         assertEquals(0, returnMap.size());\r
111         jte.cleanUp();\r
112 \r
113         jte.prepare();\r
114         Map<String, Map<String, Object>> returnMap1 = jte.execute(0, new Properties(), incomingParameters);\r
115         assertEquals(0, returnMap1.size());\r
116         jte.cleanUp();\r
117     }\r
118 }\r