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