Add new LCM actions GetConfig, StartTraffic, StopTraffic, etc
[appc.git] / appc-inbound / appc-artifact-handler / provider / src / test / java / org / onap / appc / artifact / handler / node / ArtifactHandlerNodeTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * ================================================================================
9  * Modifications Copyright (C) 2019 Ericsson
10  * =============================================================================
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  *
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  *
23  * ============LICENSE_END=========================================================
24  */
25
26 package org.onap.appc.artifact.handler.node;
27
28 import org.apache.commons.io.IOUtils;
29 import org.json.JSONArray;
30 import org.json.JSONObject;
31 import org.junit.Before;
32 import org.junit.Ignore;
33 import org.junit.Rule;
34 import org.junit.Test;
35 import org.junit.rules.ExpectedException;
36 import org.junit.runner.RunWith;
37 import org.mockito.Mockito;
38 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
39 import org.onap.sdnc.config.params.transformer.tosca.ArtifactProcessorImpl;
40 import org.onap.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
41 import org.powermock.api.mockito.PowerMockito;
42 import org.powermock.core.classloader.annotations.PrepareForTest;
43 import org.powermock.modules.junit4.PowerMockRunner;
44 import org.powermock.reflect.Whitebox;
45 import org.onap.appc.artifact.handler.dbservices.DBService;
46 import org.onap.appc.artifact.handler.dbservices.MockDBService;
47 import org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants;
48 import org.onap.appc.yang.YANGGenerator;
49 import org.onap.appc.yang.impl.YANGGeneratorFactory;
50 import org.onap.appc.artifact.handler.utils.ArtifactHandlerProviderUtilTest;
51 import java.util.Map;
52 import java.util.HashMap;
53 import java.io.IOException;
54 import java.nio.charset.Charset;
55
56 import static org.junit.Assert.assertEquals;
57 import static org.junit.Assert.assertFalse;
58 import static org.junit.Assert.assertNotNull;
59 import static org.junit.Assert.assertNull;
60 import static org.junit.Assert.assertTrue;
61 import static org.junit.Assert.fail;
62
63
64 @RunWith(PowerMockRunner.class)
65 @PrepareForTest({DBService.class, YANGGeneratorFactory.class})
66 public class ArtifactHandlerNodeTest {
67
68     private ArtifactHandlerNode artifactHandlerNode;
69     private DBService dbServiceMock;
70
71     @Rule
72     public ExpectedException expectedEx = ExpectedException.none();
73
74     @Before
75     public void setUp() throws Exception {
76         artifactHandlerNode = Mockito.spy(new ArtifactHandlerNode());
77         PowerMockito.mockStatic(DBService.class);
78         dbServiceMock = Mockito.mock(DBService.class);
79         Mockito.doReturn("12345").when(dbServiceMock).getInternalVersionNumber(Mockito.any(), Mockito.anyString(), Mockito.anyString());
80         PowerMockito.when(DBService.initialise()).thenReturn(dbServiceMock);
81         PowerMockito.mockStatic(YANGGeneratorFactory.class);
82         YANGGenerator yangGeneratorMock = Mockito.mock(YANGGenerator.class);
83         PowerMockito.when(YANGGeneratorFactory.getYANGGenerator()).thenReturn(yangGeneratorMock);
84         ArtifactProcessorImpl artifactProcessorMock = Mockito.mock(ArtifactProcessorImpl.class);
85         Mockito.doReturn(artifactProcessorMock).when(artifactHandlerNode).getArtifactProcessorImpl();
86     }
87
88     @Test
89     public void testProcessArtifact() throws Exception {
90         SvcLogicContext ctx = new SvcLogicContext();
91         ctx.setAttribute("test", "test");
92         Map<String, String> inParams = new HashMap<>();
93         JSONObject postData = new JSONObject();
94         JSONObject input = new JSONObject();
95         inParams.put("response_prefix", "prefix");
96         JSONObject requestInfo = new JSONObject();
97         JSONObject documentInfo = getDocumentInfo("templates/reference_template");
98         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "reference_Junit.json");
99         requestInfo.put("RequestInfo", "testValue");
100         requestInfo.put("request-id","testREQUEST_ID");
101         input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo);
102         input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
103         postData.put("input", input);
104         inParams.put("postData", postData.toString());
105         artifactHandlerNode.processArtifact(inParams, ctx);
106         assertNull(ctx.getAttribute(SdcArtifactHandlerConstants.FILE_CATEGORY));
107     }
108
109     @Test
110     public void testPopulateProtocolReference() throws Exception {
111         ArtifactHandlerNode ah = new ArtifactHandlerNode();
112         String contentStr =
113                 "{\"action\": \"TestAction\",\"action-level\": \"vnf\",\"scope\": {\"vnf-type\": \"vDBE-I\",\"vnfc-type\": null},\"template\": \"N\",\"device-protocol\": \"REST\"}";
114         JSONObject content = new JSONObject(contentStr);
115         MockDBService dbService = MockDBService.initialise();
116         Whitebox.invokeMethod(ah, "populateProtocolReference", dbService, content);
117     }
118
119     @Test
120     public void testCleanVnfcInstance() throws Exception {
121         ArtifactHandlerNode ah = new ArtifactHandlerNode();
122         SvcLogicContext ctx = new SvcLogicContext();
123         Whitebox.invokeMethod(ah, "cleanVnfcInstance", ctx);
124         assertTrue(true);
125     }
126
127     @Test
128     public void testStoreUpdateSdcArtifacts() throws Exception {
129         ArtifactHandlerNode ah = new ArtifactHandlerNode();
130         String postDataStr =
131                 "{\"request-information\":{\"request-id\": \"12345\"},\"document-parameters\":{\"artifact-name\":\"testArtifact\",\"artifact-contents\":{\"content\":\"TestContent\"}}}";
132         JSONObject postData = new JSONObject(postDataStr);
133         expectedEx.expect(ArtifactHandlerInternalException.class);
134         Whitebox.invokeMethod(ah, "storeUpdateSdcArtifacts", postData);
135     }
136
137     @Test
138     public void testUpdateYangContents() throws Exception {
139         String artifactId = "1";
140         String yangContents = "SomeContent";
141         Whitebox.invokeMethod(artifactHandlerNode, "updateYangContents", artifactId, yangContents);
142         Mockito.verify(dbServiceMock).updateYangContents(Mockito.any(SvcLogicContext.class),
143                 Mockito.anyString(), Mockito.anyString());
144     }
145
146     @Test
147     public void testProcessVmList() throws Exception{
148         String contentStr = "{\r\n\t\"action\": \"ConfigScaleOut\",\r\n\t\"action-level\": \"VNF\",\r\n\t\"scope\": "
149                 + "{\r\n\t\t\"vnf-type\": \"ScaleOutVNF\",\r\n\t\t\"vnfc-type\": \"\"\r\n\t},\r\n\t\"template\": \"Y\",\r\n\t\"vm\": "
150                 + "[\r\n\t{ \r\n\t\t\"vm-instance\": 1,\r\n\t\t\"template-id\":\"id1\",\r\n\t\t\r\n\t\t\"vnfc\": [{\r\n\t\t\t\"vnfc-instance\": 1,\r\n\t\t\t\"vnfc-type\": \"t1\",\r\n\t\t\t\"vnfc-function-code\": "
151                 + "\"Testdbg\",\r\n\t\t\t\"group-notation-type\": \"GNType\",\r\n\t\t\t\"ipaddress-v4-oam-vip\": \"N\",\r\n\t\t\t\"group-notation-value\": "
152                 + "\"GNValue\"\r\n\t\t}]\r\n\t},\r\n\t{ \r\n\t\t\"vm-instance\": 1,\r\n\t\t\"template-id\":\"id2\",\r\n\t\t\r\n\t\t\"vnfc\": [{\r\n\t\t\t\"vnfc-instance\": 1,\r\n\t\t\t\"vnfc-type\": "
153                 + "\"t1\",\r\n\t\t\t\"vnfc-function-code\": \"Testdbg\",\r\n\t\t\t\"group-notation-type\": \"GNType\",\r\n\t\t\t\"ipaddress-v4-oam-vip\": \"N\",\r\n\t\t\t\"group-notation-value\": "
154                 + "\"GNValue\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"vnfc-instance\": 2,\r\n\t\t\t\"vnfc-type\": \"t2\",\r\n\t\t\t\"vnfc-function-code\": \"Testdbg\",\r\n\t\t\t\"group-notation-type\": "
155                 + "\"GNType\",\r\n\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\"group-notation-value\": \"GNValue\"\r\n\t\t}]\r\n\t},\r\n\t{\r\n\t\t\"vm-instance\": 2,\r\n\t\t\"template-id\":\"id3\",\r\n\t\t\"vnfc\": "
156                 + "[{\r\n\t\t\t\"vnfc-instance\": 1,\r\n\t\t\t\"vnfc-type\": \"t3\",\r\n\t\t\t\"vnfc-function-code\": \"Testdbg\",\r\n\t\t\t\"group-notation-type\": "
157                 + "\"GNType\",\r\n\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\"group-notation-value\": \"GNValue\"\r\n\t\t}]\r\n\t}],\r\n\t\"device-protocol\": "
158                 + "\"TEST-PROTOCOL\",\r\n\t\"user-name\": \"Testnetconf\",\r\n\t\"port-number\": \"22\",\r\n\t\"artifact-list\": [{\r\n\t\t\"artifact-name\": \"Testv_template.json\",\r\n\t\t\"artifact-type\": "
159                 + "\"Testconfig_template\"\r\n\t},\r\n\t{\r\n\t\t\"artifact-name\": \"TESTv_parameter_definitions.json\",\r\n\t\t\"artifact-type\": \"Testparameter_definitions\"\r\n\t},\r\n\t{\r\n\t\t\"artifact-name\": "
160                 + "\"PD_JunitTESTv_parameter_yang.json\",\r\n\t\t\"artifact-type\": \"PD_definations\"\r\n\t}]\r\n}";
161         JSONObject content=new JSONObject(contentStr);
162         MockDBService dbService = MockDBService.initialise();
163         SvcLogicContext context = new SvcLogicContext();
164         artifactHandlerNode.processVmList(content, context, dbService);
165     }
166
167     @Test
168     public void testProcessConfigTypeActions() throws Exception{
169         String contentStr = "{\"action\": \"ConfigScaleOut\"}";
170         JSONObject content=new JSONObject(contentStr);
171         MockDBService dbService = MockDBService.initialise();
172         SvcLogicContext context = new SvcLogicContext();
173         context.setAttribute(SdcArtifactHandlerConstants.DEVICE_PROTOCOL,"Test");
174         artifactHandlerNode.processConfigTypeActions(content, dbService, context);
175     }
176
177     @Test
178     public void testProcessActionLists() throws Exception {
179         String contentStr = "{\r\n\t\"action\": \"HealthCheck\",\r\n\t\"action-level\": \"vm\",\r\n\t\"scope\":"
180                 + " {\r\n\t\t\"vnf-type\": \"vDBE-I\",\r\n\t\t\"vnfc-type\": null\r\n\t},\r\n\t\"template\": "
181                 + "\"N\",\r\n\t\"device-protocol\": \"REST\",\r\n\t\"vnfc-function-code-list\": [\"SSC\", \"MMSC\"]\r\n}";
182         JSONObject content = new JSONObject(contentStr);
183         JSONArray vmActionVnfcFunctionCodesList = new JSONArray();
184         JSONArray vnfActionList = new JSONArray();
185         JSONArray vfModuleActionList = new JSONArray();
186         JSONArray vnfcActionList = new JSONArray();
187         String[] actionLevels = { "vnf", "vm", "vf-module", "vnfc" };
188         for (String actionLevel : actionLevels) {
189             artifactHandlerNode.processActionLists(content, actionLevel, vnfcActionList, vfModuleActionList,
190                     vnfActionList, vmActionVnfcFunctionCodesList);
191         }
192     }
193
194     @Test
195     public void testIsCapabilityArtifactNeeded() throws Exception {
196         String scopeObjStr1= "{\"vnf-type\":\"someVnf\",\"vnfc-type\":\"somVnfc\"}";
197         String scopeObjStr2= "{\"vnf-type\":\"someVnf\",\"vnfc-type\":\"\"}";
198         JSONObject scope1 = new JSONObject(scopeObjStr1);
199         JSONObject scope2 = new JSONObject(scopeObjStr2);
200         SvcLogicContext context = new SvcLogicContext();
201         artifactHandlerNode.setVnfcTypeInformation(scope1, context);
202         assertFalse(artifactHandlerNode.isCapabilityArtifactNeeded(context));
203         artifactHandlerNode.setVnfcTypeInformation(scope2, context);
204         assertTrue(artifactHandlerNode.isCapabilityArtifactNeeded(context));
205     }
206
207     @Test
208     public void testProcessArtifactListsWithMultipleTemplates() throws Exception {
209         String contentStr = "{\r\n\t\t\"action\": \"ConfigScaleOut\",\r\n\t\t\"action-level\": \"vnf\",\r\n\t\t\"scope\": {\r\n\t\t\t\"vnf-type\": "
210                 + "\"vCfgSO-0405\",\r\n\t\t\t\"vnfc-type\": \"\"\r\n\t\t},\r\n\t\t\"template\": \"Y\",\r\n\t\t\"vm\": [{\r\n\t\t\t\"template-id\": "
211                 + "\"TID-0405-EZ\",\r\n\t\t\t\"vm-instance\": 1,\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": \"1\",\r\n\t\t\t\t\"vnfc-function-code\": "
212                 + "\"Cfg-ez\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": \"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\":"
213                 + " \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vCfg-0405-ez\"\r\n\t\t\t}]\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"template-id\": "
214                 + "\"TID-0405-EZ\",\r\n\t\t\t\"vm-instance\": 2,\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": \"1\",\r\n\t\t\t\t\"vnfc-function-code\": "
215                 + "\"Cfg-ez\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": \"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\":"
216                 + " \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vCfg-0405-ez\"\r\n\t\t\t}]\r\n\t\t}],\r\n\t\t\"device-protocol\": \"ANSIBLE\",\r\n\t\t\"user-name\": \"root\","
217                 + "\r\n\t\t\"port-number\": \"22\",\r\n\t\t\"artifact-list\": [{\r\n\t\t\t\"artifact-name\": \"template_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ.json\","
218                 + "\r\n\t\t\t\"artifact-type\": \"config_template\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": \"pd_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ.yaml\","
219                 + "\r\n\t\t\t\"artifact-type\": \"parameter_definitions\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": "
220                 + "\"template_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ-2.json\",\r\n\t\t\t\"artifact-type\": \"config_template\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": "
221                 + "\"pd_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ-2.yaml\",\r\n\t\t\t\"artifact-type\": \"parameter_definitions\"\r\n\t\t}],\r\n\t\t\"template-id-list\":"
222                 + " [\"TID-0405-EZ\",\r\n\t\t\"TID-0405-EZ-2\"],\r\n\t\t\"scopeType\": \"vnf-type\"\r\n\t}";
223         JSONObject content = new JSONObject(contentStr);
224         MockDBService dbService = MockDBService.initialise();
225         SvcLogicContext context = new SvcLogicContext();
226         context.setAttribute("vnf-type", "someVnf");
227         context.setAttribute("action", "ConfigScaleOut");
228         artifactHandlerNode.processArtifactList(content, dbService, context, null);
229     }
230
231     @Test
232     public void testProcessArtifactListsWithVnfcTypeList() throws Exception {
233         String contentStr = "{\r\n\t\"action\": \"Configure\",\r\n\t\"action-level\": \"vnf\",\r\n\t\"scope\": {\r\n\t\t\"vnf-type\": "
234                 + "\"newtypeofvnf\",\r\n\t\t\"vnfc-type-list\": [\"vnfctype1\",\"vnfctype2\"]\r\n\t},\r\n\t\"template\": \"Y\",\r\n\t\"vm\":"
235                 + " [{\r\n\t\t\t\"vm-instance\": 1,\r\n\t\t\t\"template-id\": \"vnfctype1\",\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": "
236                 + "\"1\",\r\n\t\t\t\t\"vnfc-function-code\": \"fcx\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": "
237                 + "\"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\": \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vDBE\"\r\n\t\t\t}]\r\n\t\t},"
238                 + "\r\n\t\t{\r\n\t\t\t\"vm-instance\": 1,\r\n\t\t\t\"template-id\": \"vnfctype2\",\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": "
239                 + "\"1\",\r\n\t\t\t\t\"vnfc-function-code\": \"fcx\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": "
240                 + "\"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\": \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vDBE\"\r\n\t\t\t}]\r\n\t\t},"
241                 + "\r\n\t\t{\r\n\t\t\t\"vm-instance\": 2,\r\n\t\t\t\"template-id\": \"vnfctype2\",\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": "
242                 + "\"1\",\r\n\t\t\t\t\"vnfc-function-code\": \"fcx\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": "
243                 + "\"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\": \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vDBE\"\r\n\t\t\t}]\r\n\t\t}\r\n\t],"
244                 + "\r\n\t\"device-protocol\": \"NETCONF-XML\",\r\n\t\"user-name\": \"netconf\",\r\n\t\"port-number\": \"20\",\r\n\t\"artifact-list\": "
245                 + "[{\r\n\t\t\t\"artifact-name\": \"template_ConfigScaleOut_newtypeofvnf_0.0.1V_vnfctype1.xml\",\r\n\t\t\t\"artifact-type\": "
246                 + "\"config_template\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": \"pd_ConfigScaleOut_newtypeofvnf_0.0.1V_vnfctype1.yaml\","
247                 + "\r\n\t\t\t\"artifact-type\": \"parameter_definitions\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": "
248                 + "\"template_ConfigScaleOut_newtypeofvnf_0.0.1V_vnfctype2.xml\",\r\n\t\t\t\"artifact-type\": "
249                 + "\"config_template\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": \"pd_ConfigScaleOut_newtypeofvnf_0.0.1V_vnfctype2.yaml\","
250                 + "\r\n\t\t\t\"artifact-type\": \"parameter_definitions\"\r\n\t\t}\r\n\t],\r\n\t\"scopeType\": \"vnf-type\"\r\n}";
251         JSONObject content = new JSONObject(contentStr);
252         MockDBService dbService = MockDBService.initialise();
253         SvcLogicContext context = new SvcLogicContext();
254         context.setAttribute("vnf-type", "someVnf");
255         context.setAttribute("action", "Configure");
256         JSONObject scope = (JSONObject)content.get("scope");
257         JSONArray vnfcTypeList = artifactHandlerNode.setVnfcTypeInformation(scope, context);
258         artifactHandlerNode.processArtifactList(content, dbService, context, vnfcTypeList);
259         JSONArray vnfcLists = scope.getJSONArray("vnfc-type-list");        
260         assertEquals(vnfcLists.toString(), "[\"vnfctype1\",\"vnfctype2\"]");
261         assertEquals(context.getAttribute("vnfc-type"),"vnfctype2");
262         assertNotNull (vnfcTypeList);
263     }
264
265     @Test
266     public void testProcessArtifactPdArtifactName() throws IOException, ArtifactProcessorException {
267         SvcLogicContext ctx = new SvcLogicContext();
268         ctx.setAttribute("test", "test");
269         Map<String, String> inParams = new HashMap<>();
270         JSONObject postData = new JSONObject();
271         JSONObject input = new JSONObject();
272         inParams.put("response_prefix", "prefix");
273         JSONObject requestInfo = new JSONObject();
274         JSONObject documentInfo = getDocumentInfo("templates/pd_template");
275         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "pd_Junit.json");
276         requestInfo.put("RequestInfo", "testValue");
277         requestInfo.put("request-id","testREQUEST_ID");
278         input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo);
279         input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
280         postData.put("input", input);
281         inParams.put("postData", postData.toString());
282         artifactHandlerNode.processArtifact(inParams, ctx);
283         Mockito.verify(dbServiceMock, Mockito.times(2)).initialise();
284     }
285
286     private JSONObject getDocumentInfo(String filename) throws IOException {
287         JSONObject documentInfo = new JSONObject();
288         String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader()
289                 .getResourceAsStream(filename), Charset.defaultCharset());
290         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent);
291         documentInfo.put(SdcArtifactHandlerConstants.SERVICE_UUID, "12345");
292         documentInfo.put(SdcArtifactHandlerConstants.DISTRIBUTION_ID, "12345");
293         documentInfo.put(SdcArtifactHandlerConstants.SERVICE_NAME, "12345");
294         documentInfo.put(SdcArtifactHandlerConstants.SERVICE_DESCRIPTION, "12345");
295         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_UUID, "12345");        
296         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, "12345");
297         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_VERSION, "12345");
298         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_TYPE, "12345");
299         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_UUID, "12345");
300         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_TYPE, "12345");
301         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_VERSION, "12345");
302         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "12345");
303         return documentInfo;
304     }
305     
306     
307     @Test
308     public void testValidateAnsibleAdminArtifact() throws Exception {
309         String contentStr = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\","
310           + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]},{\"region-id\":\"san4b\","
311           + "\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]}]},{\"cloud-owner\":\"nc1.0\",\"region-id-list\":[{\"region-id\":\"san4a\","
312           + "\"tenant-id-list\":[\"tenantuuid3\",\"tenantuuid4\"]}]}],\"description\":\"fqdn for east zone Production\",\"username\":\"attuid\","
313           + "\"create-date\":\"\",\"modify-username\":\"\",\"modify-date\":\"\"},{\"vnf-management-server-fqdn\":\"fqdn-value2 url:port\","
314           + "\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\",\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid5\","
315           + "\"tenantuuid6\"]},{\"region-id\":\"san4b\",\"tenant-id-list\":[\"tenantuuid5\",\"tenantuuid6\"]}]},{\"cloud-owner\":\"nc1.0\","
316           + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid7\",\"tenantuuid8\"]}]}],"
317           + "\"description\":\"fqdn for east zone Test\",\"username\":\"attuid\",\"create-date\":\"\","
318           + "\"modify-username\":\"\",\"modify-date\":\"\"}]}";
319
320         JSONObject documentInfo = new JSONObject();       
321         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStr);
322         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json");
323         artifactHandlerNode.validateAnsibleAdminArtifact(documentInfo);
324     }
325     
326     @Test
327     public void testValidateAnsibleAdminArtifactWithException() throws Exception {
328        String contentStrOne = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\","
329          + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]},{\"region-id\":\"san4b\","
330          + "\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]}]},{\"cloud-owner\":\"nc1.0\",\"region-id-list\":[{\"region-id\":\"san4a\","
331          + "\"tenant-id-list\":[\"tenantuuid3\",\"tenantuuid4\"]}]}],\"description\":\"fqdn for east zone Production\",\"username\":\"attuid\","
332          + "\"create-date\":\"\",\"modify-username\":\"\",\"modify-date\":\"\"},{\"vnf-management-server-fqdn\":\"fqdn-value2 url:port\","
333          + "\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\",\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\","
334          + "\"tenantuuid6\"]},{\"region-id\":\"san4b\",\"tenant-id-list\":[\"tenantuuid5\",\"tenantuuid6\"]}]},{\"cloud-owner\":\"nc1.0\","
335          + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid7\",\"tenantuuid8\"]}]}],"
336          + "\"description\":\"fqdn for east zone Test\",\"username\":\"attuid\",\"create-date\":\"\","
337          + "\"modify-username\":\"\",\"modify-date\":\"\"}]}";
338        JSONObject documentInfoOne = new JSONObject();       
339        documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStrOne);
340        documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json");
341        
342        try {
343            artifactHandlerNode.validateAnsibleAdminArtifact(documentInfoOne);
344            fail("Missing exception");
345            }catch(ArtifactHandlerInternalException e) {
346             assertTrue(e.getMessage().contains("Validation Failure"));
347             }
348        
349     }
350     
351     @Test
352     public void testValidateAnsibleAdminArtifactWithJSONException() throws Exception {
353         String contentStrOne = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\"}";           
354        
355         JSONObject documentInfoOne = new JSONObject();       
356         documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStrOne);
357         documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json");
358                
359         try {
360             artifactHandlerNode.validateAnsibleAdminArtifact(documentInfoOne);
361             fail("Missing exception");
362         }catch(ArtifactHandlerInternalException je) {
363           assertTrue(je.getMessage().contains("JSON Exception"));
364           
365         }           
366        
367      }
368     
369     @Test
370     public void testProcessArtifactWithException() throws Exception {
371         SvcLogicContext ctx = new SvcLogicContext();
372         ctx.setAttribute("test", "test");
373         Map<String, String> inParams = new HashMap<>();
374         JSONObject postData = new JSONObject();
375         JSONObject input = new JSONObject();
376         inParams.put("response_prefix", "prefix");
377         JSONObject requestInfo = new JSONObject();
378         JSONObject documentInfo = new JSONObject();
379         String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader()
380                 .getResourceAsStream("templates/reference_template"), Charset.defaultCharset());
381         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent);
382         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "");
383         requestInfo.put("RequestInfo", "testValue");
384         requestInfo.put("request-id","testREQUEST_ID");
385         input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo);
386         input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
387         postData.put("input", input);
388         inParams.put("postData", postData.toString());
389         try {
390             artifactHandlerNode.processArtifact(inParams, ctx);
391             fail("Missing exception");
392         }catch(Exception e) {
393           assertTrue(e.getMessage().contains("Missing Artifact Name"));
394         }
395         
396     }
397     @Test
398     public void testProcessArtifactWithExceptionforAnsible() throws Exception {
399         SvcLogicContext ctx = new SvcLogicContext();
400         ctx.setAttribute("test", "test");
401         Map<String, String> inParams = new HashMap<>();
402         JSONObject postData = new JSONObject();
403         JSONObject input = new JSONObject();
404         inParams.put("response_prefix", "prefix");
405         JSONObject requestInfo = new JSONObject();
406         JSONObject documentInfo = new JSONObject();
407         String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader()
408                 .getResourceAsStream("templates/reference_template"), Charset.defaultCharset());
409         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent);
410         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.2V.json");
411         requestInfo.put("RequestInfo", "testValue");
412         requestInfo.put("request-id","testREQUEST_ID");
413         input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo);
414         input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
415         postData.put("input", input);
416         inParams.put("postData", postData.toString());
417         
418         try {
419              artifactHandlerNode.processArtifact(inParams, ctx);
420              fail("Missing exception");
421         }catch(Exception e) {
422            assertTrue(e.getMessage().contains("JSON Exception:ansible admin"));
423         }
424      }
425     
426     @Test
427     public void testProcessAndStoreCapablitiesArtifact() throws Exception {
428         ArtifactHandlerNode ah = new ArtifactHandlerNode();
429         JSONObject capabilities = new JSONObject();
430         JSONObject documentInfo = new JSONObject();
431         MockDBService dbService = MockDBService.initialise();
432         documentInfo.put(SdcArtifactHandlerConstants.SERVICE_UUID, "testuid");
433         documentInfo.put(SdcArtifactHandlerConstants.DISTRIBUTION_ID, "testDist");
434         documentInfo.put(SdcArtifactHandlerConstants.SERVICE_NAME, "testName");
435         documentInfo.put(SdcArtifactHandlerConstants.SERVICE_DESCRIPTION, "testDesc");
436         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_UUID, "testRes");
437         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, "testResIns");
438         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_VERSION, "testVers");
439         documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_TYPE, "testResType");
440         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_UUID, "testArtifactUuid");
441         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_VERSION, "testArtifactVers");
442         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "testArtifactDesc");
443         Whitebox.invokeMethod(ah, "processAndStoreCapabilitiesArtifact", dbService, documentInfo, capabilities,
444                 "artifactName", "someVnf");
445     }
446     
447
448 }