UT-ArtifactsBL handleDelete
[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.elements.ArtifactDataDefinition;
46 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
47 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
48 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
49 import org.openecomp.sdc.be.impl.ComponentsUtils;
50 import org.openecomp.sdc.be.model.*;
51 import org.openecomp.sdc.be.model.jsontitan.operations.ArtifactsOperations;
52 import org.openecomp.sdc.be.model.jsontitan.operations.NodeTemplateOperation;
53 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
54 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
55 import org.openecomp.sdc.be.model.operations.api.*;
56 import org.openecomp.sdc.be.model.operations.impl.ArtifactOperation;
57 import org.openecomp.sdc.be.resources.data.ESArtifactData;
58 import org.openecomp.sdc.be.servlets.RepresentationUtils;
59 import org.openecomp.sdc.be.user.UserBusinessLogic;
60 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
61 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
62 import org.openecomp.sdc.common.api.ConfigurationSource;
63 import org.openecomp.sdc.common.impl.ExternalConfiguration;
64 import org.openecomp.sdc.common.impl.FSConfigurationSource;
65 import org.openecomp.sdc.exception.ResponseFormat;
66
67 import java.io.IOException;
68 import java.util.*;
69
70 import static org.assertj.core.api.Java6Assertions.assertThat;
71 import static org.mockito.ArgumentMatchers.any;
72 import static org.mockito.ArgumentMatchers.anyBoolean;
73 import static org.mockito.ArgumentMatchers.anyString;
74 import static org.mockito.ArgumentMatchers.eq;
75 import static org.mockito.Mockito.*;
76 import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.HEAT_ENV_NAME;
77 import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.HEAT_VF_ENV_NAME;
78
79 public class ArtifactBusinessLogicTest {
80
81     public static final User USER = new User("John", "Doh", "jh0003", "jh0003@gmail.com", "ADMIN", System.currentTimeMillis());
82     private final static String RESOURCE_INSTANCE_NAME = "Service-111";
83     private final static String INSTANCE_ID = "S-123-444-ghghghg";
84
85     private final static String ARTIFACT_NAME = "service-Myservice-template.yml";
86     private final static String ARTIFACT_LABEL = "assettoscatemplate";
87     private final static String ES_ARTIFACT_ID = "123123dfgdfgd0";
88     private final static byte[] PAYLOAD = "some payload".getBytes();
89
90     static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
91     static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
92
93     @InjectMocks
94     private static ArtifactsBusinessLogic artifactBL;
95     @Mock
96     private ArtifactOperation artifactOperation;
97     @Mock
98     public ComponentsUtils componentsUtils;
99     @Mock
100     private IInterfaceLifecycleOperation lifecycleOperation;
101     @Mock
102     private IUserAdminOperation userOperation;
103     @Mock
104     private IElementOperation elementOperation;
105     @Mock
106     private ArtifactCassandraDao artifactCassandraDao;
107     @Mock
108     public ToscaOperationFacade toscaOperationFacade;
109     @Mock
110     private UserBusinessLogic userBusinessLogic;
111     @Mock
112     private NodeTemplateOperation nodeTemplateOperation;
113     @Mock
114     private ArtifactsOperations artifactsOperations;
115     @Mock
116     private IGraphLockOperation graphLockOperation;
117     @Mock
118     TitanDao titanDao;
119     @Mock
120     private IInterfaceLifecycleOperation interfaceLifecycleOperation;
121     @Mock
122     private ResponseFormat responseFormat;
123     @Mock
124     private User user;
125
126     public static final Resource resource = Mockito.mock(Resource.class);
127     private Gson gson = new GsonBuilder().setPrettyPrinting().create();
128
129
130     private static List<ArtifactType> getAllTypes() {
131         List<ArtifactType> artifactTypes = new ArrayList<>();
132         List<String> artifactTypesList = ConfigurationManager.getConfigurationManager().getConfiguration().getArtifactTypes();
133         for (String artifactType : artifactTypesList) {
134             ArtifactType artifactT = new ArtifactType();
135             artifactT.setName(artifactType);
136             artifactTypes.add(artifactT);
137         }
138         return artifactTypes;
139     }
140
141     @Before
142     public void initMocks() {
143         MockitoAnnotations.initMocks(this);
144         Either<ArtifactDefinition, StorageOperationStatus> NotFoundResult = Either.right(StorageOperationStatus.NOT_FOUND);
145
146         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> NotFoundResult2 = Either.right(StorageOperationStatus.NOT_FOUND);
147         when(artifactOperation.getArtifacts(Mockito.anyString(), eq(NodeTypeEnum.Service), Mockito.anyBoolean())).thenReturn(NotFoundResult2);
148         when(artifactOperation.getArtifacts(Mockito.anyString(), eq(NodeTypeEnum.Resource), Mockito.anyBoolean())).thenReturn(NotFoundResult2);
149
150         Either<Map<String, InterfaceDefinition>, StorageOperationStatus> notFoundInterfaces = Either.right(StorageOperationStatus.NOT_FOUND);
151         when(lifecycleOperation.getAllInterfacesOfResource(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(notFoundInterfaces);
152
153         Either<User, ActionStatus> getUserResult = Either.left(USER);
154
155         when(userOperation.getUserData("jh0003", false)).thenReturn(getUserResult);
156
157         Either<List<ArtifactType>, ActionStatus> getType = Either.left(getAllTypes());
158         when(elementOperation.getAllArtifactTypes()).thenReturn(getType);
159
160         when(resource.getResourceType()).thenReturn(ResourceTypeEnum.VFC);
161     }
162
163     @Test
164     public void testValidJson() {
165         ArtifactDefinition ad = createArtifactDef("artifact1.yml", ArtifactGroupTypeEnum.DEPLOYMENT);
166
167         String jsonArtifact  = "";
168
169         ObjectMapper mapper = new ObjectMapper();
170         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
171         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
172         mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
173
174         try {
175             jsonArtifact = mapper.writeValueAsString(ad);
176         } catch (IOException e) {
177             // TODO Auto-generated catch block
178             e.printStackTrace();
179         }
180
181         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact, ArtifactDefinition.class);
182         assertThat(afterConvert).isEqualTo(ad);
183     }
184
185     private ArtifactDefinition createArtifactDef(String artifactName, ArtifactGroupTypeEnum groupTypeEnum) {
186         ArtifactDefinition ad = new ArtifactDefinition();
187         ad.setArtifactName(artifactName);
188         ad.setArtifactLabel("label1");
189         ad.setDescription("description");
190         ad.setArtifactType(ArtifactTypeEnum.HEAT.getType());
191         ad.setArtifactGroupType(groupTypeEnum);
192         ad.setCreationDate(System.currentTimeMillis());
193         ad.setMandatory(false);
194         ad.setTimeout(15);
195         return ad;
196     }
197
198     @Test
199     public void testInvalidStringGroupType() {
200         ArtifactDefinition ad = new ArtifactDefinition();
201         ad.setArtifactName("artifact1");
202         ad.setCreationDate(System.currentTimeMillis());
203         ad.setMandatory(false);
204         ad.setTimeout(15);
205
206         JsonElement jsonArtifact = gson.toJsonTree(ad);
207         jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", "www");
208
209         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
210         assertThat(afterConvert).isNull();
211     }
212
213     @Test
214     public void testInvalidNumberGroupType() {
215         ArtifactDefinition ad = new ArtifactDefinition();
216         ad.setArtifactName("artifact1");
217         ad.setCreationDate(System.currentTimeMillis());
218         ad.setMandatory(false);
219         ad.setTimeout(15);
220
221         JsonElement jsonArtifact = gson.toJsonTree(ad);
222         jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", 123);
223
224         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
225         assertThat(afterConvert).isNull();
226     }
227
228     @Test
229     public void testInvalidGroupTypeWithSpace() {
230         ArtifactDefinition ad = new ArtifactDefinition();
231         ad.setArtifactName("artifact1");
232         ad.setCreationDate(System.currentTimeMillis());
233         ad.setMandatory(false);
234         ad.setTimeout(15);
235
236         JsonElement jsonArtifact = gson.toJsonTree(ad);
237         jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", " DEPLOYMENT");
238
239         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
240         assertThat(afterConvert).isNull();
241     }
242
243     @Test
244     public void testInvalidTimeoutWithSpace() {
245         ArtifactDefinition ad = new ArtifactDefinition();
246         ad.setArtifactName("artifact1");
247         ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
248         ad.setCreationDate(System.currentTimeMillis());
249         ad.setMandatory(false);
250
251         JsonElement jsonArtifact = gson.toJsonTree(ad);
252         jsonArtifact.getAsJsonObject().addProperty("timeout", "dfsdf15");
253
254         ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
255         assertThat(afterConvert).isNull();
256     }
257
258     @Test
259     public void validateArtifactNameUniqueness_Unique() {
260
261         ArtifactDefinition artifactInfo = createArtifactDef("artifactName3.yml", ArtifactGroupTypeEnum.DEPLOYMENT);
262         ArtifactDefinition informationArtifactDefinition1 = createArtifactDef("artifactName1.yml",
263                 ArtifactGroupTypeEnum.INFORMATIONAL);
264         ArtifactDefinition deploymentArtifactDefinition2 = createArtifactDef("artifactName2.yml",
265                 ArtifactGroupTypeEnum.DEPLOYMENT);
266
267         Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
268         artifactDefinitionMap.put("informationArtifact", informationArtifactDefinition1);
269         artifactDefinitionMap.put("DeploymentArtifact", deploymentArtifactDefinition2);
270
271         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifacts = Either.left(artifactDefinitionMap);
272         when(artifactsOperations.getAllInstanceArtifacts(anyString(), anyString())).thenReturn(artifacts);
273
274         Resource parent = new Resource();
275         parent.setUniqueId("uniqueId");
276
277         assertThat(artifactBL.validateArtifactNameUniqueness("componentId", parent,
278                 artifactInfo , ComponentTypeEnum.RESOURCE_INSTANCE)).isTrue();
279     }
280
281     @Test
282     public void validateArtifactNameUniqueness_nonUniqueResourceInterfaces() {
283
284         ArtifactDefinition artifactInfo = createArtifactDef("artifactName3.yml", ArtifactGroupTypeEnum.DEPLOYMENT);
285         ArtifactDefinition informationArtifactDefinition1 = createArtifactDef("artifactName1.yml",
286                 ArtifactGroupTypeEnum.INFORMATIONAL);
287         ArtifactDefinition deploymentArtifactDefinition2 = createArtifactDef("artifactName2.yml",
288                 ArtifactGroupTypeEnum.DEPLOYMENT);
289
290         Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
291         artifactDefinitionMap.put("informationArtifact", informationArtifactDefinition1);
292         artifactDefinitionMap.put("DeploymentArtifact", deploymentArtifactDefinition2);
293
294         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifacts = Either.left(artifactDefinitionMap);
295         when(artifactsOperations.getArtifacts(anyString())).thenReturn(artifacts);
296
297
298         Either<Map<String, InterfaceDefinition>, StorageOperationStatus> allInterfacesOfResource =
299                 Either.left(createInterfaceDefinitionMap("artifactName3.yml"));
300         when(interfaceLifecycleOperation.getAllInterfacesOfResource("componentId", true, true))
301                 .thenReturn(allInterfacesOfResource);
302
303         Resource parent = new Resource();
304         parent.setUniqueId("uniqueId");
305
306         assertThat(artifactBL.validateArtifactNameUniqueness("componentId", parent,
307                 artifactInfo, ComponentTypeEnum.RESOURCE)).isFalse();
308     }
309
310     @Test
311     public void validateArtifactNameUniqueness_UniqueInterface() {
312
313         ArtifactDefinition artifactInfo = createArtifactDef("artifactName2.yml", ArtifactGroupTypeEnum.DEPLOYMENT);
314         artifactInfo.setArtifactLabel("uniqueLabel");
315         ArtifactDefinition informationArtifactDefinition1 = createArtifactDef("artifactName1.yml",
316                 ArtifactGroupTypeEnum.INFORMATIONAL);
317         ArtifactDefinition deploymentArtifactDefinition2 = createArtifactDef("artifactName2.yml",
318                 ArtifactGroupTypeEnum.DEPLOYMENT);
319
320         Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
321         artifactDefinitionMap.put(informationArtifactDefinition1.getArtifactLabel(), informationArtifactDefinition1);
322         artifactDefinitionMap.put(deploymentArtifactDefinition2.getArtifactLabel(), deploymentArtifactDefinition2);
323
324         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifacts = Either.left(artifactDefinitionMap);
325         when(artifactsOperations.getArtifacts(anyString())).thenReturn(artifacts);
326
327
328         Either<Map<String, InterfaceDefinition>, StorageOperationStatus> allInterfacesOfResource =
329                 Either.left(createInterfaceDefinitionMap("artifactName3.yml"));
330         when(interfaceLifecycleOperation.getAllInterfacesOfResource("componentId", true, true))
331                 .thenReturn(allInterfacesOfResource);
332
333         Resource parent = new Resource();
334         parent.setUniqueId("uniqueId");
335
336         assertThat(artifactBL.validateArtifactNameUniqueness("componentId", parent,
337                 artifactInfo, ComponentTypeEnum.RESOURCE)).isFalse();
338     }
339
340     @Test
341     public void validateArtifactNameUniqueness_updateName() {
342
343         //artifacts with the same name have the same label
344         ArtifactDefinition artifactInfo = createArtifactDef("artifactName2.yml", ArtifactGroupTypeEnum.DEPLOYMENT);
345         ArtifactDefinition informationArtifactDefinition1 = createArtifactDef("artifactName1.yml",
346                 ArtifactGroupTypeEnum.INFORMATIONAL);
347         informationArtifactDefinition1.setArtifactLabel("label2");
348         ArtifactDefinition deploymentArtifactDefinition2 = createArtifactDef("artifactName2.yml",
349                 ArtifactGroupTypeEnum.DEPLOYMENT);
350
351         Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
352         artifactDefinitionMap.put(artifactInfo.getArtifactLabel(), artifactInfo);
353         artifactDefinitionMap.put(informationArtifactDefinition1.getArtifactLabel(), informationArtifactDefinition1);
354         artifactDefinitionMap.put(deploymentArtifactDefinition2.getArtifactLabel(), deploymentArtifactDefinition2);
355
356         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifacts = Either.left(artifactDefinitionMap);
357         when(artifactsOperations.getAllInstanceArtifacts(anyString(), anyString())).thenReturn(artifacts);
358
359         Resource parent = new Resource();
360         parent.setUniqueId("uniqueId");
361
362         assertThat(artifactBL.validateArtifactNameUniqueness("componentId", parent,
363                 artifactInfo, ComponentTypeEnum.RESOURCE_INSTANCE)).isTrue();
364     }
365
366     @Test
367     public void validateArtifactNameUniqueness_UniqueInGroupType() {
368
369         ArtifactDefinition artifactInfo = createArtifactDef("artifactName2.yml", ArtifactGroupTypeEnum.INFORMATIONAL);
370         ArtifactDefinition informationArtifactDefinition1 = createArtifactDef("artifactName1.yml",
371                 ArtifactGroupTypeEnum.INFORMATIONAL);
372         ArtifactDefinition deploymentArtifactDefinition2 = createArtifactDef("artifactName2.yml",
373                 ArtifactGroupTypeEnum.DEPLOYMENT);
374
375         Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
376         artifactDefinitionMap.put("informationArtifact", informationArtifactDefinition1);
377         artifactDefinitionMap.put("DeploymentArtifact", deploymentArtifactDefinition2);
378
379         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifacts = Either.left(artifactDefinitionMap);
380         when(artifactsOperations.getAllInstanceArtifacts(anyString(), anyString())).thenReturn(artifacts);
381
382         Resource parent = new Resource();
383         parent.setUniqueId("uniqueId");
384
385         assertThat(artifactBL.validateArtifactNameUniqueness("componentId", parent, artifactInfo,
386                 ComponentTypeEnum.RESOURCE_INSTANCE)).isTrue();
387     }
388
389     @Test
390     public void validateArtifactNameUniqueness_NonUnique() {
391
392         ArtifactDefinition artifactInfo = createArtifactDef("artifactName1.yml", ArtifactGroupTypeEnum.INFORMATIONAL);
393         artifactInfo.setArtifactLabel("artifactLabel");
394         ArtifactDefinition informationArtifactDefinition1 = createArtifactDef("artifactName1.yml",
395                 ArtifactGroupTypeEnum.INFORMATIONAL);
396         ArtifactDefinition deploymentArtifactDefinition2 = createArtifactDef("artifactName2.yml",
397                 ArtifactGroupTypeEnum.DEPLOYMENT);
398
399         Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
400         artifactDefinitionMap.put("informationArtifact", informationArtifactDefinition1);
401         artifactDefinitionMap.put("DeploymentArtifact", deploymentArtifactDefinition2);
402
403         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifacts = Either.left(artifactDefinitionMap);
404         when(artifactsOperations.getAllInstanceArtifacts(anyString(), anyString())).thenReturn(artifacts);
405
406         Resource parent = new Resource();
407         parent.setUniqueId("uniqueId");
408
409         assertThat(artifactBL.validateArtifactNameUniqueness("componentId", parent, artifactInfo,
410                 ComponentTypeEnum.RESOURCE_INSTANCE)).isFalse();
411     }
412
413
414     private Map<String, InterfaceDefinition> createInterfaceDefinitionMap(String artifactName) {
415
416         InterfaceDefinition id1 = new InterfaceDefinition();
417         Map<String, Operation> operationMap = new HashMap<>();
418         Operation operation1 = new Operation();
419         ArtifactDataDefinition dataImplementation = new ArtifactDataDefinition();
420         dataImplementation.setArtifactName(artifactName);
421         operation1.setImplementation(dataImplementation);
422         operationMap.put("operation1", operation1);
423         id1.setOperationsMap(operationMap);
424         Map<String, InterfaceDefinition> interfaceDefMap = new HashMap<>();
425         interfaceDefMap.put("id1",id1);
426         return interfaceDefMap;
427     }
428
429     @Test
430     public void testValidMibAritactsConfiguration() {
431         Map<String, ArtifactTypeConfig> componentDeploymentArtifacts =
432                 ConfigurationManager.getConfigurationManager().getConfiguration().getResourceDeploymentArtifacts();
433         Map<String, ArtifactTypeConfig> componentInstanceDeploymentArtifacts =
434                 ConfigurationManager.getConfigurationManager().getConfiguration().getResourceInstanceDeploymentArtifacts();
435         assertThat(componentDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_POLL.getType())).isTrue();
436         assertThat(componentDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_TRAP.getType())).isTrue();
437         assertThat(componentInstanceDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_POLL.getType())).isTrue();
438         assertThat(componentInstanceDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_TRAP.getType())).isTrue();
439     }
440
441     @Test
442     public void testDownloadServiceArtifactByNames() {
443         Service service = new Service();
444         String serviceName = "myService";
445         String serviceVersion = "1.0";
446         String serviceId = "serviceId";
447         service.setName(serviceName);
448         service.setVersion(serviceVersion);
449         service.setUniqueId(serviceId);
450
451         String artifactName = "service-Myservice-template.yml";
452         String artifactLabel = "assettoscatemplate";
453         String esArtifactId = "123123dfgdfgd0";
454         byte[] payload = "some payload".getBytes();
455         ArtifactDefinition toscaTemplateArtifact = new ArtifactDefinition();
456         toscaTemplateArtifact.setArtifactName(artifactName);
457         toscaTemplateArtifact.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
458         toscaTemplateArtifact.setArtifactLabel(artifactLabel);
459         toscaTemplateArtifact.setEsId(esArtifactId);
460         toscaTemplateArtifact.setPayload(payload);
461
462         Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
463         toscaArtifacts.put(artifactLabel, toscaTemplateArtifact);
464         service.setToscaArtifacts(toscaArtifacts);
465
466         ESArtifactData esArtifactData =new ESArtifactData(esArtifactId);
467         esArtifactData.setDataAsArray(payload);
468         Either<ESArtifactData, CassandraOperationStatus> artifactfromESres = Either.left(esArtifactData);
469         when(artifactCassandraDao.getArtifact(esArtifactId)).thenReturn(artifactfromESres);
470         List<org.openecomp.sdc.be.model.Component> serviceList = new ArrayList<>();
471         serviceList.add(service);
472         Either<List<org.openecomp.sdc.be.model.Component>, StorageOperationStatus> getServiceRes = Either.left(serviceList);
473         when(toscaOperationFacade.getBySystemName(ComponentTypeEnum.SERVICE, serviceName)).thenReturn(getServiceRes);
474         Either<byte[], ResponseFormat> downloadServiceArtifactByNamesRes =
475                 artifactBL.downloadServiceArtifactByNames(serviceName, serviceVersion, artifactName);
476         assertThat(downloadServiceArtifactByNamesRes.isLeft()).isTrue();
477         assertThat(downloadServiceArtifactByNamesRes.left().value() !=null &&
478                 downloadServiceArtifactByNamesRes.left().value().length == payload.length).isTrue();
479     }
480
481     @Test
482     public void createHeatEnvPlaceHolder_vf_emptyHeatParameters() throws Exception {
483         ArtifactDefinition heatArtifact = new ArtifactBuilder()
484                 .addHeatParam(ObjectGenerator.buildHeatParam("defVal1", "val1"))
485                 .addHeatParam(ObjectGenerator.buildHeatParam("defVal2", "val2"))
486                 .build();
487
488         Resource component = new Resource();
489         when(userBusinessLogic.getUser(anyString(), anyBoolean())).thenReturn(Either.left(USER));
490         when(artifactsOperations.addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class), eq(component.getUniqueId()), eq(NodeTypeEnum.Resource), eq(true), eq("parentId")))
491                 .thenReturn(Either.left(new ArtifactDefinition()));
492         Either<ArtifactDefinition, ResponseFormat> heatEnvPlaceHolder = artifactBL.createHeatEnvPlaceHolder(heatArtifact, HEAT_VF_ENV_NAME, "parentId", NodeTypeEnum.Resource, "parentName", USER, component, Collections.emptyMap());
493         assertThat(heatEnvPlaceHolder.isLeft()).isTrue();
494         assertThat(heatEnvPlaceHolder.left().value().getListHeatParameters()).isNull();
495     }
496
497     @Test
498     public void createHeatEnvPlaceHolder_resourceInstance_copyHeatParamasCurrValuesToHeatEnvDefaultVal() throws Exception {
499         HeatParameterDefinition heatParam1 = ObjectGenerator.buildHeatParam("defVal1", "val1");
500         HeatParameterDefinition heatParam2 = ObjectGenerator.buildHeatParam("defVal2", "val2");
501         HeatParameterDefinition heatParam3 = ObjectGenerator.buildHeatParam("defVal3", "val3");
502         ArtifactDefinition heatArtifact = new ArtifactBuilder()
503                 .addHeatParam(heatParam1)
504                 .addHeatParam(heatParam2)
505                 .addHeatParam(heatParam3)
506                 .build();
507
508         Resource component = new Resource();
509
510         when(userBusinessLogic.getUser(anyString(), anyBoolean())).thenReturn(Either.left(USER));
511         when(artifactsOperations.addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class), eq(component.getUniqueId()), eq(NodeTypeEnum.Resource), eq(true), eq("parentId")))
512                 .thenReturn(Either.left(new ArtifactDefinition()));
513
514         Either<ArtifactDefinition, ResponseFormat> heatEnvPlaceHolder = artifactBL.createHeatEnvPlaceHolder(heatArtifact, HEAT_ENV_NAME, "parentId", NodeTypeEnum.ResourceInstance, "parentName", USER, component, Collections.emptyMap());
515
516         assertThat(heatEnvPlaceHolder.isLeft()).isTrue();
517         ArtifactDefinition heatEnvArtifact = heatEnvPlaceHolder.left().value();
518         List<HeatParameterDefinition> listHeatParameters = heatEnvArtifact.getListHeatParameters();
519         assertThat(listHeatParameters.size()).isEqualTo(3);
520         verifyHeatParam(listHeatParameters.get(0), heatParam1);
521         verifyHeatParam(listHeatParameters.get(1), heatParam2);
522         verifyHeatParam(listHeatParameters.get(2), heatParam3);
523     }
524
525     @Test
526     public void buildArtifactPayloadWhenShouldLockAndInTransaction() {
527         ArtifactDefinition artifactDefinition = new ArtifactDefinition();
528         artifactDefinition.setArtifactName(ARTIFACT_NAME);
529         artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
530         artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
531         artifactDefinition.setEsId(ES_ARTIFACT_ID);
532         artifactDefinition.setPayload(PAYLOAD);
533         artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
534
535         when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
536         //TODO Remove if passes
537         when(artifactsOperations.updateArtifactOnResource(any(ArtifactDefinition.class), any(), any(), any(NodeTypeEnum.class)
538                 , any(String.class))).thenReturn(Either.left(artifactDefinition));
539         when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
540         when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
541         artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD), ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME,
542                 USER, INSTANCE_ID, true, true);
543     }
544
545     @Test
546     public void buildArtifactPayloadWhenShouldLockAndNotInTransaction() {
547         ArtifactDefinition artifactDefinition = new ArtifactDefinition();
548         artifactDefinition.setArtifactName(ARTIFACT_NAME);
549         artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
550         artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
551         artifactDefinition.setEsId(ES_ARTIFACT_ID);
552         artifactDefinition.setPayload(PAYLOAD);
553         artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
554
555         when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
556         //TODO Remove if passes
557         when(artifactsOperations.updateArtifactOnResource(any(ArtifactDefinition.class), any(), any(), any(NodeTypeEnum.class)
558                 , any(String.class))).thenReturn(Either.left(artifactDefinition));
559         when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
560         when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
561         artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD), ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME,
562                 USER, INSTANCE_ID, true, false);
563         verify(titanDao, times(1)).commit();
564     }
565
566     @Test
567     public void testDeleteComponent_ArtifactNotFound(){
568         Either<Either<ArtifactDefinition, Operation>, ResponseFormat> result;
569         Resource resource = new Resource();
570         String uniqueId = "uniqueId";
571         resource.setUniqueId(uniqueId);
572         Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
573         ArtifactDefinition artifact = new ArtifactDefinition();
574         artifact.setArtifactName("artifactName");
575         artifact.setEsId("esId");
576         artifact.setArtifactUUID("artifactUUID");
577         artifact.setArtifactType("YANG");
578         artifact.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
579         artifact.setDescription("description");
580         artifact.setArtifactLabel("artifactLabel");
581         toscaArtifacts.put("artifactId", artifact);
582         resource.setArtifacts(toscaArtifacts);
583         resource.setToscaArtifacts(toscaArtifacts);
584         when(graphLockOperation.lockComponent(uniqueId, NodeTypeEnum.Resource))
585                 .thenReturn(StorageOperationStatus.OK);
586         when(graphLockOperation.unlockComponent(uniqueId, NodeTypeEnum.Resource))
587                 .thenReturn(StorageOperationStatus.OK);
588         when(toscaOperationFacade.getToscaElement(uniqueId)).thenReturn(Either.left(resource));
589         when(componentsUtils.getResponseFormatByArtifactId(ActionStatus.ARTIFACT_NOT_FOUND, "artifactId")).
590                 thenReturn(responseFormat);
591         result = artifactBL.handleDelete("parentId", "artifactId", user, AuditingActionEnum.ARTIFACT_DELETE,
592                 ComponentTypeEnum.RESOURCE, resource,
593                 true, false);
594         assertThat(result.isRight());
595     }
596
597     private void verifyHeatParam(HeatParameterDefinition heatEnvParam, HeatParameterDefinition heatYamlParam) {
598         assertThat(heatYamlParam.getCurrentValue()).isEqualTo(heatEnvParam.getDefaultValue());
599         assertThat(heatEnvParam.getCurrentValue()).isNull();
600     }
601 }