Controller Blueprints Nitrogen to Oxygen Migration
[ccsdk/features.git] / blueprints-processor / plugin / generator-provider / src / test / java / org / onap / ccsdk / features / generator / service / ConfigGeneratorNodeTest.java
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * Modifications Copyright © 2018 IBM.\r
4  * \r
5  * Licensed under the Apache License, Version 2.0 (the "License");\r
6  * you may not use this file except in compliance with the License.\r
7  * You may obtain a copy of the License at\r
8  * \r
9  * http://www.apache.org/licenses/LICENSE-2.0\r
10  * \r
11  * Unless required by applicable law or agreed to in writing, software\r
12  * distributed under the License is distributed on an "AS IS" BASIS,\r
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  * See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  */\r
17 \r
18 package org.onap.ccsdk.features.generator.service;\r
19 \r
20 import static org.mockito.Matchers.any;\r
21 import java.nio.charset.Charset;\r
22 import java.util.ArrayList;\r
23 import java.util.Arrays;\r
24 import java.util.HashMap;\r
25 import java.util.List;\r
26 import java.util.Map;\r
27 import org.apache.commons.io.IOUtils;\r
28 import org.junit.Assert;\r
29 import org.junit.Before;\r
30 import org.junit.Test;\r
31 import org.junit.runner.RunWith;\r
32 import org.mockito.Mock;\r
33 import org.mockito.Mockito;\r
34 import org.mockito.MockitoAnnotations;\r
35 import org.mockito.invocation.InvocationOnMock;\r
36 import org.mockito.runners.MockitoJUnitRunner;\r
37 import org.mockito.stubbing.Answer;\r
38 import org.onap.ccsdk.features.data.adaptor.domain.ConfigResource;\r
39 import org.onap.ccsdk.features.data.adaptor.domain.TransactionLog;\r
40 import org.onap.ccsdk.features.data.adaptor.service.ConfigResourceService;\r
41 import org.onap.ccsdk.features.generator.ConfigGeneratorConstant;\r
42 import org.onap.ccsdk.features.generator.service.ConfigGeneratorNode;\r
43 import org.onap.ccsdk.features.model.ConfigModelConstant;\r
44 import org.onap.ccsdk.features.model.service.ConfigModelService;\r
45 import org.onap.ccsdk.features.model.service.ConfigModelServiceImpl;\r
46 import org.onap.ccsdk.features.model.utils.TransformationUtils;\r
47 import org.onap.ccsdk.features.rest.adaptor.service.ConfigRestAdaptorService;\r
48 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;\r
49 import org.onap.ccsdk.sli.core.sli.SvcLogicException;\r
50 import com.att.eelf.configuration.EELFLogger;\r
51 import com.att.eelf.configuration.EELFManager;\r
52 \r
53 @RunWith(MockitoJUnitRunner.class)\r
54 public class ConfigGeneratorNodeTest {\r
55 \r
56     private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigGeneratorNodeTest.class);\r
57 \r
58     @Mock\r
59     private ConfigResourceService configResourceService;\r
60 \r
61     @Mock\r
62     private ConfigRestAdaptorService configRestAdaptorService;\r
63 \r
64     private ConfigModelService configModelService;\r
65 \r
66     @Before\r
67     public void setUp() throws Exception {\r
68 \r
69         configModelService = new ConfigModelServiceImpl(configRestAdaptorService);\r
70 \r
71         MockitoAnnotations.initMocks(this);\r
72 \r
73         try {\r
74             Mockito.doAnswer(new Answer<Void>() {\r
75                 @Override\r
76                 public Void answer(InvocationOnMock invocationOnMock) throws Throwable {\r
77                     Object[] args = invocationOnMock.getArguments();\r
78                     if (args != null) {\r
79                         logger.trace("Transaction info " + Arrays.asList(args));\r
80                     }\r
81                     return null;\r
82                 }\r
83             }).when(configResourceService).save(any(TransactionLog.class));\r
84 \r
85             Mockito.doAnswer(new Answer<List<ConfigResource>>() {\r
86                 @Override\r
87                 public List<ConfigResource> answer(InvocationOnMock invocationOnMock) throws Throwable {\r
88                     List<ConfigResource> configResources = new ArrayList<>();\r
89                     Object[] args = invocationOnMock.getArguments();\r
90                     if (args != null) {\r
91                         logger.trace("Transaction info " + Arrays.asList(args));\r
92                         String resourceData = IOUtils.toString(ConfigGeneratorNodeTest.class.getClassLoader()\r
93                                 .getResourceAsStream("service_templates/configdata.json"), Charset.defaultCharset());\r
94                         ConfigResource configResource = (ConfigResource) args[0];\r
95                         configResource.setRecipeName("Sample-recipe");\r
96                         configResource.setResourceData(resourceData);\r
97                         configResources.add(configResource);\r
98                     }\r
99                     return configResources;\r
100                 }\r
101             }).when(configResourceService).getConfigResource(any(ConfigResource.class));\r
102 \r
103         } catch (SvcLogicException e) {\r
104             e.printStackTrace();\r
105         }\r
106     }\r
107 \r
108     @Test\r
109     public void testInputTemplateContentNData() throws Exception {\r
110 \r
111         ConfigGeneratorNode configGeneratorNode = new ConfigGeneratorNode(configResourceService, configModelService);\r
112 \r
113         Map<String, String> inParams = new HashMap<String, String>();\r
114         inParams.put(ConfigModelConstant.PROPERTY_SELECTOR, "test");\r
115 \r
116         String jsonData = IOUtils.toString(\r
117                 ConfigGeneratorNodeTest.class.getClassLoader().getResourceAsStream("service_templates/configdata.json"),\r
118                 Charset.defaultCharset());\r
119         inParams.put(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_DATA, jsonData);\r
120 \r
121         String templateData = IOUtils.toString(ConfigGeneratorNodeTest.class.getClassLoader()\r
122                 .getResourceAsStream("service_templates/velocity/base-config-template.vtl"), Charset.defaultCharset());\r
123         inParams.put(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_CONTENT, templateData);\r
124 \r
125         SvcLogicContext ctx = new SvcLogicContext();\r
126         Map<String, Object> componentContext = new HashMap<>();\r
127         configGeneratorNode.process(inParams, ctx, componentContext);\r
128         Assert.assertEquals("Failed to generate Configuration Status as Failure",\r
129                 ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS,\r
130                 ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS));\r
131         Assert.assertNotNull("Failed to generate Configuration",\r
132                 ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG));\r
133 \r
134         logger.trace("Generated Configuration:\n "\r
135                 + ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG));\r
136         logger.trace("Generated Configuration:\n "\r
137                 + ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_MASK_INFO));\r
138 \r
139     }\r
140 \r
141     @Test\r
142     public void testInputTemplateWithNullData() throws Exception {\r
143 \r
144         ConfigGeneratorNode configGeneratorNode = new ConfigGeneratorNode(configResourceService, configModelService);\r
145 \r
146         Map<String, String> inParams = new HashMap<String, String>();\r
147         inParams.put(ConfigModelConstant.PROPERTY_SELECTOR, "test");\r
148 \r
149         String jsonData = IOUtils.toString(ConfigGeneratorNodeTest.class.getClassLoader()\r
150                 .getResourceAsStream("service_templates/configdata_with_null.json"), Charset.defaultCharset());\r
151         inParams.put(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_DATA, jsonData);\r
152 \r
153         String templateData = IOUtils.toString(ConfigGeneratorNodeTest.class.getClassLoader()\r
154                 .getResourceAsStream("service_templates/velocity/base-config-template.vtl"), Charset.defaultCharset());\r
155         inParams.put(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_CONTENT, templateData);\r
156 \r
157         SvcLogicContext ctx = new SvcLogicContext();\r
158         Map<String, Object> componentContext = new HashMap<>();\r
159         configGeneratorNode.process(inParams, ctx, componentContext);\r
160         Assert.assertEquals("Failed to generate Configuration Status as Failure",\r
161                 ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS,\r
162                 ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS));\r
163         Assert.assertNotNull("Failed to generate Configuration",\r
164                 ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG));\r
165 \r
166         logger.trace("Generated Configuration:\n "\r
167                 + ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG));\r
168         logger.trace("Generated Configuration:\n "\r
169                 + ctx.getAttribute("test." + ConfigGeneratorConstant.OUTPUT_PARAM_MASK_INFO));\r
170 \r
171     }\r
172 \r
173     @Test\r
174     public void testDBTemplateContentNData() throws Exception {\r
175 \r
176         String fileContent = IOUtils.toString(ConfigGeneratorNodeTest.class.getClassLoader()\r
177                 .getResourceAsStream("service_templates/generate_configuration.json"), Charset.defaultCharset());\r
178 \r
179         String baseConfigTemplateContent = IOUtils.toString(ConfigGeneratorNodeTest.class.getClassLoader()\r
180                 .getResourceAsStream("service_templates/velocity/base-config-template.vtl"), Charset.defaultCharset());\r
181 \r
182         Map<String, String> context = new HashMap<>();\r
183         context = configModelService.convertServiceTemplate2Properties(fileContent, context);\r
184 \r
185         context.put("node_templates.base-config-template.content", baseConfigTemplateContent);\r
186 \r
187         Assert.assertNotNull("Failed to Prepare Context : ", context);\r
188 \r
189         context.put("request-id", "12345");\r
190         context.put("vnf-id", "vnf12345");\r
191         context.put("action-name", "config-generator-action");\r
192 \r
193         Map<String, String> inparams = new HashMap<String, String>();\r
194         inparams.put(ConfigModelConstant.PROPERTY_SELECTOR, "generate-configuration");\r
195 \r
196         SvcLogicContext inputContext = new SvcLogicContext();\r
197         context.forEach((name, value) -> {\r
198             inputContext.setAttribute(name, value);\r
199         });\r
200 \r
201         TransformationUtils.printMap(context);\r
202         configModelService.assignInParamsFromModel(inputContext, inparams);\r
203         ConfigGeneratorNode configGeneratorNode = new ConfigGeneratorNode(configResourceService, configModelService);\r
204 \r
205         Map<String, Object> componentContext = new HashMap<>();\r
206         configGeneratorNode.process(inparams, inputContext, componentContext);\r
207 \r
208         Assert.assertEquals("Failed to generate Configuration Status as Failure",\r
209                 ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS,\r
210                 inputContext.getAttribute("generate-configuration." + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS));\r
211         Assert.assertNotNull("Failed to generate Configuration", inputContext\r
212                 .getAttribute("generate-configuration." + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG));\r
213 \r
214         logger.trace("Generated Configuration:\n " + inputContext\r
215                 .getAttribute("generate-configuration." + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG));\r
216     }\r
217 \r
218     @Test\r
219     public void testTemplateContentNDataForMask() throws Exception {\r
220 \r
221     }\r
222 \r
223 }\r