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