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