Revert "Delete workflow artifact
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ArtifactBusinessLogicTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.impl;
22
23 import com.fasterxml.jackson.annotation.JsonInclude;
24 import com.fasterxml.jackson.databind.DeserializationFeature;
25 import com.fasterxml.jackson.databind.ObjectMapper;
26 import com.fasterxml.jackson.databind.SerializationFeature;
27 import com.google.gson.Gson;
28 import com.google.gson.GsonBuilder;
29 import com.google.gson.JsonElement;
30 import fj.data.Either;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.mockito.InjectMocks;
34 import org.mockito.Mock;
35 import org.mockito.Mockito;
36 import org.mockito.MockitoAnnotations;
37 import org.openecomp.sdc.be.components.utils.ArtifactBuilder;
38 import org.openecomp.sdc.be.components.utils.ObjectGenerator;
39 import org.openecomp.sdc.be.config.Configuration.ArtifactTypeConfig;
40 import org.openecomp.sdc.be.config.ConfigurationManager;
41 import org.openecomp.sdc.be.dao.api.ActionStatus;
42 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
43 import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
44 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
45 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
46 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
47 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
48 import org.openecomp.sdc.be.impl.ComponentsUtils;
49 import org.openecomp.sdc.be.model.ArtifactDefinition;
50 import org.openecomp.sdc.be.model.ArtifactType;
51 import org.openecomp.sdc.be.model.HeatParameterDefinition;
52 import org.openecomp.sdc.be.model.InterfaceDefinition;
53 import org.openecomp.sdc.be.model.Resource;
54 import org.openecomp.sdc.be.model.Service;
55 import org.openecomp.sdc.be.model.User;
56 import org.openecomp.sdc.be.model.jsontitan.operations.ArtifactsOperations;
57 import org.openecomp.sdc.be.model.jsontitan.operations.NodeTemplateOperation;
58 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
59 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
60 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
61 import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation;
62 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
63 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
64 import org.openecomp.sdc.be.model.operations.impl.ArtifactOperation;
65 import org.openecomp.sdc.be.resources.data.ESArtifactData;
66 import org.openecomp.sdc.be.servlets.RepresentationUtils;
67 import org.openecomp.sdc.be.user.UserBusinessLogic;
68 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
69 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
70 import org.openecomp.sdc.common.api.ConfigurationSource;
71 import org.openecomp.sdc.common.impl.ExternalConfiguration;
72 import org.openecomp.sdc.common.impl.FSConfigurationSource;
73 import org.openecomp.sdc.exception.ResponseFormat;
74
75 import java.io.IOException;
76 import java.util.ArrayList;
77 import java.util.Collections;
78 import java.util.HashMap;
79 import java.util.List;
80 import java.util.Map;
81
82 import static org.junit.Assert.assertEquals;
83 import static org.junit.Assert.assertNull;
84 import static org.junit.Assert.assertTrue;
85 import static org.mockito.ArgumentMatchers.any;
86 import static org.mockito.ArgumentMatchers.anyBoolean;
87 import static org.mockito.ArgumentMatchers.anyString;
88 import static org.mockito.ArgumentMatchers.eq;
89 import static org.mockito.Mockito.times;
90 import static org.mockito.Mockito.verify;
91 import static org.mockito.Mockito.when;
92 import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.HEAT_ENV_NAME;
93 import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.HEAT_VF_ENV_NAME;
94
95 public class ArtifactBusinessLogicTest {
96
97     public static final User USER = new User("John", "Doh", "jh0003", "jh0003@gmail.com", "ADMIN", System.currentTimeMillis());
98     private final static String RESOURCE_INSTANCE_NAME = "Service-111";
99     private final static String INSTANCE_ID = "S-123-444-ghghghg";
100
101     private final static String ARTIFACT_NAME = "service-Myservice-template.yml";
102     private final static String ARTIFACT_LABEL = "assettoscatemplate";
103     private final static String ES_ARTIFACT_ID = "123123dfgdfgd0";
104     private final static byte[] PAYLOAD = "some payload".getBytes();
105
106     static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
107     static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
108
109     @InjectMocks
110     private static ArtifactsBusinessLogic artifactBL;
111     @Mock
112     private ArtifactOperation artifactOperation;
113     @Mock
114     public ComponentsUtils componentsUtils;
115     @Mock
116     private IInterfaceLifecycleOperation lifecycleOperation;
117     @Mock
118     private IUserAdminOperation userOperation;
119     @Mock
120     private IElementOperation elementOperation;
121     @Mock
122     private ArtifactCassandraDao artifactCassandraDao;
123     @Mock
124     public ToscaOperationFacade toscaOperationFacade;
125     @Mock
126     private UserBusinessLogic userBusinessLogic;
127     @Mock
128     private NodeTemplateOperation nodeTemplateOperation;
129     @Mock
130     private ArtifactsOperations artifactsOperations;
131     @Mock
132     private IGraphLockOperation graphLockOperation;
133     @Mock
134     TitanDao titanDao;
135
136     // public static final InformationDeployedArtifactsBusinessLogic
137     // informationDeployedArtifactsBusinessLogic =
138     // Mockito.mock(InformationDeployedArtifactsBusinessLogic.class);
139
140     public static final Resource resource = Mockito.mock(Resource.class);
141     private Gson gson = new GsonBuilder().setPrettyPrinting().create();
142
143
144     private static List<ArtifactType> getAllTypes() {
145         List<ArtifactType> artifactTypes = new ArrayList<ArtifactType>();
146         List<String> artifactTypesList = ConfigurationManager.getConfigurationManager().getConfiguration().getArtifactTypes();
147         for (String artifactType : artifactTypesList) {
148             ArtifactType artifactT = new ArtifactType();
149             artifactT.setName(artifactType);
150             artifactTypes.add(artifactT);
151         }
152         return artifactTypes;
153     }
154
155     @Before
156     public void initMocks() {
157         MockitoAnnotations.initMocks(this);
158         Either<ArtifactDefinition, StorageOperationStatus> NotFoundResult = Either.right(StorageOperationStatus.NOT_FOUND);
159
160         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> NotFoundResult2 = Either.right(StorageOperationStatus.NOT_FOUND);
161         when(artifactOperation.getArtifacts(Mockito.anyString(), eq(NodeTypeEnum.Service), Mockito.anyBoolean())).thenReturn(NotFoundResult2);
162         when(artifactOperation.getArtifacts(Mockito.anyString(), eq(NodeTypeEnum.Resource), Mockito.anyBoolean())).thenReturn(NotFoundResult2);
163
164         Either<Map<String, InterfaceDefinition>, StorageOperationStatus> notFoundInterfaces = Either.right(StorageOperationStatus.NOT_FOUND);
165         when(lifecycleOperation.getAllInterfacesOfResource(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(notFoundInterfaces);
166
167         Either<User, ActionStatus> getUserResult = Either.left(USER);
168
169         when(userOperation.getUserData("jh0003", false)).thenReturn(getUserResult);
170
171         Either<List<ArtifactType>, ActionStatus> getType = Either.left(getAllTypes());
172         when(elementOperation.getAllArtifactTypes()).thenReturn(getType);
173
174         when(resource.getResourceType()).thenReturn(ResourceTypeEnum.VFC);
175     }
176
177     @Test
178     public void testValidJson() {
179         ArtifactDefinition ad = createArtifactDef();
180
181         String jsonArtifact  = "";
182
183         ObjectMapper mapper = new ObjectMapper();
184         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
185         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
186         mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
187
188         try {
189             jsonArtifact = mapper.writeValueAsString(ad);
190         } catch (IOException e) {
191             // TODO Auto-generated catch block
192             e.printStackTrace();
193         }
194
195         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact, ArtifactDefinition.class);
196         assertEquals(ad, afterConvert);
197     }
198
199     private ArtifactDefinition createArtifactDef() {
200         ArtifactDefinition ad = new ArtifactDefinition();
201         ad.setArtifactName("artifact1.yaml");
202         ad.setArtifactLabel("label1");
203         ad.setDescription("description");
204         ad.setArtifactType(ArtifactTypeEnum.HEAT.getType());
205         ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
206         ad.setCreationDate(System.currentTimeMillis());
207         ad.setMandatory(false);
208         ad.setTimeout(15);
209         return ad;
210     }
211
212     @Test
213     public void testInvalidStringGroupType() {
214         ArtifactDefinition ad = new ArtifactDefinition();
215         ad.setArtifactName("artifact1");
216         ad.setCreationDate(System.currentTimeMillis());
217         ad.setMandatory(false);
218         ad.setTimeout(15);
219
220         JsonElement jsonArtifact = gson.toJsonTree(ad);
221         jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", "www");
222
223         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
224         assertNull(afterConvert);
225     }
226
227     @Test
228     public void testInvalidNumberGroupType() {
229         ArtifactDefinition ad = new ArtifactDefinition();
230         ad.setArtifactName("artifact1");
231         ad.setCreationDate(System.currentTimeMillis());
232         ad.setMandatory(false);
233         ad.setTimeout(15);
234
235         JsonElement jsonArtifact = gson.toJsonTree(ad);
236         jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", 123);
237
238         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
239         assertNull(afterConvert);
240     }
241
242     @Test
243     public void testInvalidGroupTypeWithSpace() {
244         ArtifactDefinition ad = new ArtifactDefinition();
245         ad.setArtifactName("artifact1");
246         ad.setCreationDate(System.currentTimeMillis());
247         ad.setMandatory(false);
248         ad.setTimeout(15);
249
250         JsonElement jsonArtifact = gson.toJsonTree(ad);
251         jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", " DEPLOYMENT");
252
253         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
254         assertNull(afterConvert);
255     }
256
257     @Test
258     public void testInvalidTimeoutWithSpace() {
259         ArtifactDefinition ad = new ArtifactDefinition();
260         ad.setArtifactName("artifact1");
261         ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
262         ad.setCreationDate(System.currentTimeMillis());
263         ad.setMandatory(false);
264
265         JsonElement jsonArtifact = gson.toJsonTree(ad);
266         jsonArtifact.getAsJsonObject().addProperty("timeout", "dfsdf15");
267
268         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
269         assertNull(afterConvert);
270     }
271
272     @Test
273     public void testValidMibAritactsConfiguration() {
274         Map<String, ArtifactTypeConfig> componentDeploymentArtifacts =
275                     ConfigurationManager.getConfigurationManager().getConfiguration().getResourceDeploymentArtifacts();
276         Map<String, ArtifactTypeConfig> componentInstanceDeploymentArtifacts =
277                     ConfigurationManager.getConfigurationManager().getConfiguration().getResourceInstanceDeploymentArtifacts();
278         assertTrue(componentDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_POLL.getType()));
279         assertTrue(componentDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_TRAP.getType()));
280         assertTrue(componentInstanceDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_POLL.getType()));
281         assertTrue(componentInstanceDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_TRAP.getType()));
282     }
283
284     @Test
285     public void testDownloadServiceArtifactByNames() {
286         Service service = new Service();
287         String serviceName = "myService";
288         String serviceVersion = "1.0";
289         String serviceId = "serviceId";
290         service.setName(serviceName);
291         service.setVersion(serviceVersion);
292         service.setUniqueId(serviceId);
293
294         String artifactName = "service-Myservice-template.yml";
295         String artifactLabel = "assettoscatemplate";
296         String esArtifactId = "123123dfgdfgd0";
297         byte[] payload = "some payload".getBytes();
298         ArtifactDefinition toscaTemplateArtifact = new ArtifactDefinition();
299         toscaTemplateArtifact.setArtifactName(artifactName);
300         toscaTemplateArtifact.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
301         toscaTemplateArtifact.setArtifactLabel(artifactLabel);
302         toscaTemplateArtifact.setEsId(esArtifactId);
303         toscaTemplateArtifact.setPayload(payload);
304
305         Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
306         toscaArtifacts.put(artifactLabel, toscaTemplateArtifact);
307         service.setToscaArtifacts(toscaArtifacts);
308
309         ESArtifactData esArtifactData =new ESArtifactData(esArtifactId);
310         esArtifactData.setDataAsArray(payload);
311         Either<ESArtifactData, CassandraOperationStatus> artifactfromESres = Either.left(esArtifactData);
312         when(artifactCassandraDao.getArtifact(esArtifactId)).thenReturn(artifactfromESres);
313         List<org.openecomp.sdc.be.model.Component> serviceList = new ArrayList<>();
314         serviceList.add(service);
315         Either<List<org.openecomp.sdc.be.model.Component>, StorageOperationStatus> getServiceRes = Either.left(serviceList);
316         when(toscaOperationFacade.getBySystemName(ComponentTypeEnum.SERVICE, serviceName)).thenReturn(getServiceRes);
317         Either<byte[], ResponseFormat> downloadServiceArtifactByNamesRes =
318         artifactBL.downloadServiceArtifactByNames(serviceName, serviceVersion, artifactName);
319         assertTrue(downloadServiceArtifactByNamesRes.isLeft());
320         assertTrue(downloadServiceArtifactByNamesRes.left().value() !=null && downloadServiceArtifactByNamesRes.left().value().length == payload.length);
321     }
322
323     @Test
324     public void createHeatEnvPlaceHolder_vf_emptyHeatParameters() throws Exception {
325         ArtifactDefinition heatArtifact = new ArtifactBuilder()
326                 .addHeatParam(ObjectGenerator.buildHeatParam("defVal1", "val1"))
327                 .addHeatParam(ObjectGenerator.buildHeatParam("defVal2", "val2"))
328                 .build();
329
330         Resource component = new Resource();
331         when(userBusinessLogic.getUser(anyString(), anyBoolean())).thenReturn(Either.left(USER));
332         when(artifactsOperations.addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class), eq(component.getUniqueId()), eq(NodeTypeEnum.Resource), eq(true), eq("parentId")))
333                 .thenReturn(Either.left(new ArtifactDefinition()));
334         Either<ArtifactDefinition, ResponseFormat> heatEnvPlaceHolder = artifactBL.createHeatEnvPlaceHolder(heatArtifact, HEAT_VF_ENV_NAME, "parentId", NodeTypeEnum.Resource, "parentName", USER, component, Collections.emptyMap());
335         assertTrue(heatEnvPlaceHolder.isLeft());
336         assertNull(heatEnvPlaceHolder.left().value().getListHeatParameters());
337     }
338
339     @Test
340     public void createHeatEnvPlaceHolder_resourceInstance_copyHeatParamasCurrValuesToHeatEnvDefaultVal() throws Exception {
341         HeatParameterDefinition heatParam1 = ObjectGenerator.buildHeatParam("defVal1", "val1");
342         HeatParameterDefinition heatParam2 = ObjectGenerator.buildHeatParam("defVal2", "val2");
343         HeatParameterDefinition heatParam3 = ObjectGenerator.buildHeatParam("defVal3", "val3");
344         ArtifactDefinition heatArtifact = new ArtifactBuilder()
345                 .addHeatParam(heatParam1)
346                 .addHeatParam(heatParam2)
347                 .addHeatParam(heatParam3)
348                 .build();
349
350         Resource component = new Resource();
351
352         when(userBusinessLogic.getUser(anyString(), anyBoolean())).thenReturn(Either.left(USER));
353         when(artifactsOperations.addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class), eq(component.getUniqueId()), eq(NodeTypeEnum.Resource), eq(true), eq("parentId")))
354                 .thenReturn(Either.left(new ArtifactDefinition()));
355
356         Either<ArtifactDefinition, ResponseFormat> heatEnvPlaceHolder = artifactBL.createHeatEnvPlaceHolder(heatArtifact, HEAT_ENV_NAME, "parentId", NodeTypeEnum.ResourceInstance, "parentName", USER, component, Collections.emptyMap());
357
358         assertTrue(heatEnvPlaceHolder.isLeft());
359         ArtifactDefinition heatEnvArtifact = heatEnvPlaceHolder.left().value();
360         List<HeatParameterDefinition> listHeatParameters = heatEnvArtifact.getListHeatParameters();
361         assertEquals(listHeatParameters.size(), 3);
362         verifyHeatParam(listHeatParameters.get(0), heatParam1);
363         verifyHeatParam(listHeatParameters.get(1), heatParam2);
364         verifyHeatParam(listHeatParameters.get(2), heatParam3);
365     }
366
367     @Test
368     public void buildArtifactPayloadWhenShouldLockAndInTransaction() {
369         ArtifactDefinition artifactDefinition = new ArtifactDefinition();
370         artifactDefinition.setArtifactName(ARTIFACT_NAME);
371         artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
372         artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
373         artifactDefinition.setEsId(ES_ARTIFACT_ID);
374         artifactDefinition.setPayload(PAYLOAD);
375         artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
376
377         when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
378         when(artifactsOperations.updateArifactOnResource(any(ArtifactDefinition.class), any(), any(), any(NodeTypeEnum.class)
379                 , any(String.class))).thenReturn(Either.left(artifactDefinition));
380         when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
381         when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
382         artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD), ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME,
383                 USER, INSTANCE_ID, true, true);
384     }
385
386     @Test
387     public void buildArtifactPayloadWhenShouldLockAndNotInTransaction() {
388         ArtifactDefinition artifactDefinition = new ArtifactDefinition();
389         artifactDefinition.setArtifactName(ARTIFACT_NAME);
390         artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
391         artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
392         artifactDefinition.setEsId(ES_ARTIFACT_ID);
393         artifactDefinition.setPayload(PAYLOAD);
394         artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
395
396         when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
397         when(artifactsOperations.updateArifactOnResource(any(ArtifactDefinition.class), any(), any(), any(NodeTypeEnum.class)
398                 , any(String.class))).thenReturn(Either.left(artifactDefinition));
399         when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
400         when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
401         artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD), ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME,
402                 USER, INSTANCE_ID, true, false);
403         verify(titanDao, times(1)).commit();
404     }
405
406     private void verifyHeatParam(HeatParameterDefinition heatEnvParam, HeatParameterDefinition heatYamlParam) {
407         assertEquals(heatEnvParam.getDefaultValue(), heatYamlParam.getCurrentValue());
408         assertNull(heatEnvParam.getCurrentValue());
409     }
410
411
412
413 // @Test
414     // public void convertAndValidateDeploymentArtifactNonHeatSuccess(){
415     // ArtifactDefinition createArtifactDef = createArtifactDef();
416     // createArtifactDef.setArtifactType(ArtifactTypeEnum.YANG_XML.getType());
417     //
418     // Either<ArtifactDefinition, ResponseFormat> validateResult = artifactBL
419     //
420     // assertTrue(validateResult.isLeft());
421     // ArtifactDefinition validatedArtifact = validateResult.left().value();
422     //
423     // assertEquals(createArtifactDef.getArtifactGroupType(),
424     // validatedArtifact.getArtifactGroupType());
425     // assertEquals(new Integer(0), validatedArtifact.getTimeout());
426     // assertFalse(validatedArtifact.getMandatory());
427     // assertFalse(validatedArtifact.getServiceApi());
428     //
429     // }
430 }