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